From e40403f7dbcd057b6ad7226bdcac4433fe715682 Mon Sep 17 00:00:00 2001 From: maxinyu Date: Thu, 11 Jun 2026 09:45:31 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A7=86=E9=A2=91=E5=88=A0=E9=99=A4=E5=8A=9F?= =?UTF-8?q?=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../liveVideo/AlarmLogActivity.kt | 60 ++++++++++++++++++- .../defenseapplication/utils/ApiService.kt | 12 +++- app/src/main/res/values/strings.xml | 8 ++- 3 files changed, 74 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/com/example/defenseapplication/liveVideo/AlarmLogActivity.kt b/app/src/main/java/com/example/defenseapplication/liveVideo/AlarmLogActivity.kt index f848120..53d3ea3 100644 --- a/app/src/main/java/com/example/defenseapplication/liveVideo/AlarmLogActivity.kt +++ b/app/src/main/java/com/example/defenseapplication/liveVideo/AlarmLogActivity.kt @@ -22,7 +22,10 @@ import com.shuyu.gsyvideoplayer.utils.OrientationUtils import com.shuyu.gsyvideoplayer.video.StandardGSYVideoPlayer import com.bigkoo.pickerview.builder.TimePickerBuilder import com.bigkoo.pickerview.listener.OnTimeSelectListener +import com.example.defenseapplication.view.CustomDialogFragment +import com.example.defenseapplication.view.LoadingDialog import com.example.defenseapplication.view.MyGSYVideoPlayer +import com.example.defenseapplication.view.showDefenseDialog import com.gyf.immersionbar.ImmersionBar import com.shuyu.gsyvideoplayer.GSYVideoManager import kotlinx.coroutines.launch @@ -44,6 +47,7 @@ class AlarmLogActivity : AppCompatActivity() { private var isMute = false private lateinit var audioManager: AudioManager private var isRightMenuVisible = false + private var currentAlarmItem: DeviceAlarmBean? = null override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) @@ -137,8 +141,10 @@ class AlarmLogActivity : AppCompatActivity() { } private fun initRecyclerView() { adapter = AlarmLogAdapter(alarmList) { item -> + currentAlarmItem = item if (!item.video.isNullOrEmpty()) { - Toast.makeText(this, "该告警记录有视频", Toast.LENGTH_SHORT).show() + binding.exoPlayContextId.setUp(item.video, true, item.categoryName) + binding.exoPlayContextId.startPlayLogic() } else { Toast.makeText(this, "该告警记录没有视频", Toast.LENGTH_SHORT).show() } @@ -170,6 +176,7 @@ class AlarmLogActivity : AppCompatActivity() { originalAlarmList.clear() originalAlarmList.addAll(newData) filterAlarmListByDate(calendar) + currentAlarmItem = alarmList.firstOrNull() Log.d("AlarmLogActivity", "已获取 ${newData.size} 条数据") } catch (e: Exception) { @@ -207,8 +214,10 @@ class AlarmLogActivity : AppCompatActivity() { if (alarmList.isEmpty()) { showEmptyView() + currentAlarmItem = null } else { hideEmptyView() + currentAlarmItem = alarmList.firstOrNull() } } @@ -225,10 +234,21 @@ class AlarmLogActivity : AppCompatActivity() { } binding.ivDownload.setOnClickListener { - Toast.makeText(this,"下载视频",Toast.LENGTH_SHORT).show() + showConfirmDialog(getString(R.string.tip), getString(R.string.download_alarm_video_confirm)) { + // 下载逻辑 + Toast.makeText(this, getString(R.string.download_start), Toast.LENGTH_SHORT).show() + } } binding.ivDelete.setOnClickListener { - + val item = currentAlarmItem + if (item == null) { + Toast.makeText(this, "没有可删除的告警记录", Toast.LENGTH_SHORT).show() + return@setOnClickListener + } + showConfirmDialog(getString(R.string.tip), getString(R.string.delete_alarm_video_confirm)) { + val loadingDialog = LoadingDialog(this).setMessage("删除中...").apply { show() } + deleteAlarmItem(item.id, loadingDialog) + } } binding.ivMute.setOnClickListener { isMute = !isMute @@ -277,6 +297,40 @@ class AlarmLogActivity : AppCompatActivity() { binding.exoPlayContextId.onVideoResume() } + private fun showConfirmDialog(title: String, message: String, onConfirm: () -> Unit) { + val config = CustomDialogFragment.Config( + title = title, + message = message, + positiveText = getString(R.string.confirm), + negativeText = getString(R.string.cancel) + ) + showDefenseDialog(config, onPositiveClick = { onConfirm() }) + } + + private fun deleteAlarmItem(id: String, loadingDialog: LoadingDialog) { + lifecycleScope.launch { + try { + val response = RetrofitNetwork.getNetworkService().deleteMessage(id) + if (response.code == 200) { + Toast.makeText(this@AlarmLogActivity, getString(R.string.delete_success), Toast.LENGTH_SHORT).show() + originalAlarmList.removeAll { it.id == id } + alarmList.removeAll { it.id == id } + adapter?.notifyDataSetChanged() + currentAlarmItem = alarmList.firstOrNull() + if (alarmList.isEmpty()) { + showEmptyView() + } + } else { + Toast.makeText(this@AlarmLogActivity, response.msg, Toast.LENGTH_SHORT).show() + } + } catch (e: Exception) { + Toast.makeText(this@AlarmLogActivity, "删除失败: ${e.message}", Toast.LENGTH_SHORT).show() + } finally { + loadingDialog.dismiss() + } + } + } + override fun onDestroy() { super.onDestroy() diff --git a/app/src/main/java/com/example/defenseapplication/utils/ApiService.kt b/app/src/main/java/com/example/defenseapplication/utils/ApiService.kt index 915ce41..180b7d4 100644 --- a/app/src/main/java/com/example/defenseapplication/utils/ApiService.kt +++ b/app/src/main/java/com/example/defenseapplication/utils/ApiService.kt @@ -27,6 +27,7 @@ import com.example.defenseapplication.bean.UserInfoBean import com.example.defenseapplication.bean.VerifyOptionPasswordRequest import okhttp3.MultipartBody import retrofit2.http.Body +import retrofit2.http.DELETE import retrofit2.http.GET import retrofit2.http.Multipart import retrofit2.http.POST @@ -236,8 +237,15 @@ interface ApiService { /** * 查看告警消息 */ - //@GET("/app/appMessageInfo/{id}") - //suspend fun getMessageInfo(@retrofit2.http.Path("id") id: String): GetCodeBean + @GET("/app/appMessageInfo/{id}") + suspend fun getMessageInfo(@retrofit2.http.Path("id") id: String): GetCodeBean + + + /** + * 删除告警消息 + */ + @DELETE("/app/deleteMessage/{id}") + suspend fun deleteMessage(@retrofit2.http.Path("id") id: String): GetCodeBean /** diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 06fa8f0..5da439d 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -235,7 +235,13 @@ Generate Invite Code - Tip + 提示 + 确定下载该入侵告警视频? + 确定删除该入侵告警视频? + 确定下载该入侵告警照片? + 确定删除该入侵告警照片? + 开始下载 + 删除成功 Please wait... Operation successful Operation failed