1+ package com.tencent.iot.explorer.link.demo.core.activity
2+
3+ import android.os.Bundle
4+ import android.view.View
5+ import android.widget.Toast
6+ import com.tencent.iot.explorer.link.demo.BaseActivity
7+ import com.tencent.iot.explorer.link.demo.R
8+ import com.tencent.iot.explorer.link.demo.databinding.ActivityCameraDetailBinding
9+ import com.tencent.iot.explorer.link.demo.video.playback.VideoPlaybackActivity
10+ import com.tencent.iot.explorer.link.demo.core.activity.ShareDeviceActivity
11+
12+ /* *
13+ * 摄像头详情页面 - 视频播放和控制界面
14+ */
15+ class CameraDetailActivity : BaseActivity <ActivityCameraDetailBinding >() {
16+
17+ private var isPlaying = false
18+ private var isMuted = true
19+ private var isPowerOn = true
20+ private var currentQuality = " 自动"
21+ private var isPtzPanelVisible = false
22+
23+ override fun getViewBinding (): ActivityCameraDetailBinding =
24+ ActivityCameraDetailBinding .inflate(layoutInflater)
25+
26+ override fun initView () {
27+ // // 设置状态栏透明
28+ // setStatusBarTransparent()
29+
30+ // 初始化视频播放器
31+ initVideoPlayer()
32+
33+ // 更新UI状态
34+ updateUIState()
35+ }
36+
37+ override fun setListener () {
38+ with (binding) {
39+ // 返回按钮
40+ btnBack.setOnClickListener {
41+ finish()
42+ }
43+
44+ // 更多设置按钮
45+ // btnSettings.setOnClickListener {
46+ // showDeviceSettings()
47+ // }
48+
49+ // 电源开关
50+ btnPower.setOnClickListener {
51+ togglePower()
52+ }
53+
54+ // 声音开关
55+ btnSound.setOnClickListener {
56+ toggleSound()
57+ }
58+
59+ // 画质切换
60+ btnQuality.setOnClickListener {
61+ toggleQuality()
62+ }
63+
64+ // 全屏切换
65+ btnFullscreen.setOnClickListener {
66+ toggleFullscreen()
67+ }
68+
69+ // 底部控制按钮
70+ btnTalk.setOnClickListener {
71+ toggleTalk()
72+ }
73+
74+ btnSnapshot.setOnClickListener {
75+ takeSnapshot()
76+ }
77+
78+ btnRecord.setOnClickListener {
79+ toggleRecording()
80+ }
81+
82+ btnPTZ.setOnClickListener {
83+ togglePtzPanel()
84+ }
85+
86+ // 云台控制按钮
87+ btnPTZUp.setOnClickListener {
88+ handlePtz(" up" )
89+ }
90+
91+ btnPTZLeft.setOnClickListener {
92+ handlePtz(" left" )
93+ }
94+
95+ btnPTZCenter.setOnClickListener {
96+ handlePtz(" home" )
97+ }
98+
99+ btnPTZRight.setOnClickListener {
100+ handlePtz(" right" )
101+ }
102+
103+ btnPTZDown.setOnClickListener {
104+ handlePtz(" down" )
105+ }
106+ }
107+ }
108+
109+ /* *
110+ * 设置状态栏透明
111+ */
112+ private fun setStatusBarTransparent () {
113+ // TODO: 实现状态栏透明设置
114+ window.decorView.systemUiVisibility = (
115+ View .SYSTEM_UI_FLAG_LAYOUT_STABLE or
116+ View .SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
117+ )
118+ }
119+
120+ /* *
121+ * 初始化视频播放器
122+ */
123+ private fun initVideoPlayer () {
124+ // TODO: 初始化视频播放器,连接摄像头流
125+ binding.loadingOverlay.visibility = View .VISIBLE
126+
127+ // 模拟视频加载
128+ binding.videoPlayer.postDelayed({
129+ binding.loadingOverlay.visibility = View .GONE
130+ isPlaying = true
131+ updateUIState()
132+ }, 2000 )
133+ }
134+
135+ /* *
136+ * 切换电源状态
137+ */
138+ private fun togglePower () {
139+ isPowerOn = ! isPowerOn
140+ if (isPowerOn) {
141+ // 开启摄像头
142+ binding.loadingOverlay.visibility = View .VISIBLE
143+ binding.videoPlayer.postDelayed({
144+ binding.loadingOverlay.visibility = View .GONE
145+ isPlaying = true
146+ updateUIState()
147+ }, 1000 )
148+ } else {
149+ // 关闭摄像头
150+ isPlaying = false
151+ updateUIState()
152+ }
153+ Toast .makeText(this , if (isPowerOn) " 摄像头已开启" else " 摄像头已关闭" , Toast .LENGTH_SHORT ).show()
154+ }
155+
156+ /* *
157+ * 切换声音状态
158+ */
159+ private fun toggleSound () {
160+ isMuted = ! isMuted
161+ updateUIState()
162+ Toast .makeText(this , if (isMuted) " 声音已关闭" else " 声音已开启" , Toast .LENGTH_SHORT ).show()
163+ }
164+
165+ /* *
166+ * 切换画质
167+ */
168+ private fun toggleQuality () {
169+ val qualities = arrayOf(" 自动" , " 流畅" , " 标清" , " 高清" , " 超清" )
170+ val currentIndex = qualities.indexOf(currentQuality)
171+ val nextIndex = (currentIndex + 1 ) % qualities.size
172+ currentQuality = qualities[nextIndex]
173+
174+ binding.btnQuality.text = currentQuality
175+ Toast .makeText(this , " 画质切换为: $currentQuality " , Toast .LENGTH_SHORT ).show()
176+ }
177+
178+ /* *
179+ * 切换全屏
180+ */
181+ private fun toggleFullscreen () {
182+ // TODO: 实现全屏切换逻辑
183+ Toast .makeText(this , " 全屏切换" , Toast .LENGTH_SHORT ).show()
184+ }
185+
186+ /* *
187+ * 切换对讲模式
188+ */
189+ private fun toggleTalk () {
190+ // TODO: 实现对讲功能
191+ Toast .makeText(this , " 对讲模式" , Toast .LENGTH_SHORT ).show()
192+ }
193+
194+ /* *
195+ * 截图
196+ */
197+ private fun takeSnapshot () {
198+ // TODO: 实现截图功能
199+ Toast .makeText(this , " 截图已保存" , Toast .LENGTH_SHORT ).show()
200+ }
201+
202+ /* *
203+ * 切换录像状态
204+ */
205+ private fun toggleRecording () {
206+ // TODO: 实现录像功能
207+ Toast .makeText(this , " 录像功能" , Toast .LENGTH_SHORT ).show()
208+ }
209+
210+ /* *
211+ * 切换云台控制面板
212+ */
213+ private fun togglePtzPanel () {
214+ isPtzPanelVisible = ! isPtzPanelVisible
215+ binding.ptzPanel.visibility = if (isPtzPanelVisible) View .VISIBLE else View .GONE
216+ }
217+
218+ /* *
219+ * 处理云台控制
220+ */
221+ private fun handlePtz (direction : String ) {
222+ when (direction) {
223+ " up" -> {
224+ // TODO: 云台上移
225+ Toast .makeText(this , " 云台上移" , Toast .LENGTH_SHORT ).show()
226+ }
227+ " down" -> {
228+ // TODO: 云台下移
229+ Toast .makeText(this , " 云台下移" , Toast .LENGTH_SHORT ).show()
230+ }
231+ " left" -> {
232+ // TODO: 云台左移
233+ Toast .makeText(this , " 云台左移" , Toast .LENGTH_SHORT ).show()
234+ }
235+ " right" -> {
236+ // TODO: 云台右移
237+ Toast .makeText(this , " 云台右移" , Toast .LENGTH_SHORT ).show()
238+ }
239+ " home" -> {
240+ // TODO: 云台复位
241+ Toast .makeText(this , " 云台复位" , Toast .LENGTH_SHORT ).show()
242+ }
243+ }
244+ }
245+
246+ /* *
247+ * 显示回放页面
248+ */
249+ private fun showPlayback () {
250+ // TODO: 跳转到回放页面
251+ jumpActivity(VideoPlaybackActivity ::class .java)
252+ }
253+
254+ /* *
255+ * 显示设备分享
256+ */
257+ private fun showShareDevice () {
258+ // TODO: 跳转到分享页面
259+ jumpActivity(ShareDeviceActivity ::class .java)
260+ }
261+
262+ /* *
263+ * 显示设备设置
264+ */
265+ private fun showDeviceSettings () {
266+ // TODO: 跳转到设备设置页面
267+ Toast .makeText(this , " 设备设置" , Toast .LENGTH_SHORT ).show()
268+ }
269+
270+ /* *
271+ * 更新UI状态
272+ */
273+ private fun updateUIState () {
274+ with (binding) {
275+ // 更新电源按钮状态
276+ btnPower.setImageResource(
277+ if (isPowerOn) R .drawable.ic_power_on else R .drawable.ic_power_off
278+ )
279+
280+ // 更新声音按钮状态
281+ btnSound.setImageResource(
282+ if (isMuted) R .drawable.ic_volume_mute else R .drawable.ic_volume_up
283+ )
284+
285+ // 更新视频播放状态
286+ videoPlayer.visibility = if (isPlaying && isPowerOn) View .VISIBLE else View .INVISIBLE
287+
288+ if (! isPowerOn) {
289+ loadingOverlay.visibility = View .GONE
290+ }
291+ }
292+ }
293+
294+ override fun onDestroy () {
295+ super .onDestroy()
296+ // 释放视频资源
297+ isPlaying = false
298+ isPowerOn = false
299+ }
300+ }
0 commit comments