视频删除功能

This commit is contained in:
2026-06-11 09:45:31 +08:00
parent 09fdb75644
commit e40403f7db
3 changed files with 74 additions and 6 deletions

View File

@@ -22,7 +22,10 @@ import com.shuyu.gsyvideoplayer.utils.OrientationUtils
import com.shuyu.gsyvideoplayer.video.StandardGSYVideoPlayer import com.shuyu.gsyvideoplayer.video.StandardGSYVideoPlayer
import com.bigkoo.pickerview.builder.TimePickerBuilder import com.bigkoo.pickerview.builder.TimePickerBuilder
import com.bigkoo.pickerview.listener.OnTimeSelectListener 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.MyGSYVideoPlayer
import com.example.defenseapplication.view.showDefenseDialog
import com.gyf.immersionbar.ImmersionBar import com.gyf.immersionbar.ImmersionBar
import com.shuyu.gsyvideoplayer.GSYVideoManager import com.shuyu.gsyvideoplayer.GSYVideoManager
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
@@ -44,6 +47,7 @@ class AlarmLogActivity : AppCompatActivity() {
private var isMute = false private var isMute = false
private lateinit var audioManager: AudioManager private lateinit var audioManager: AudioManager
private var isRightMenuVisible = false private var isRightMenuVisible = false
private var currentAlarmItem: DeviceAlarmBean? = null
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
@@ -137,8 +141,10 @@ class AlarmLogActivity : AppCompatActivity() {
} }
private fun initRecyclerView() { private fun initRecyclerView() {
adapter = AlarmLogAdapter(alarmList) { item -> adapter = AlarmLogAdapter(alarmList) { item ->
currentAlarmItem = item
if (!item.video.isNullOrEmpty()) { if (!item.video.isNullOrEmpty()) {
Toast.makeText(this, "该告警记录有视频", Toast.LENGTH_SHORT).show() binding.exoPlayContextId.setUp(item.video, true, item.categoryName)
binding.exoPlayContextId.startPlayLogic()
} else { } else {
Toast.makeText(this, "该告警记录没有视频", Toast.LENGTH_SHORT).show() Toast.makeText(this, "该告警记录没有视频", Toast.LENGTH_SHORT).show()
} }
@@ -170,6 +176,7 @@ class AlarmLogActivity : AppCompatActivity() {
originalAlarmList.clear() originalAlarmList.clear()
originalAlarmList.addAll(newData) originalAlarmList.addAll(newData)
filterAlarmListByDate(calendar) filterAlarmListByDate(calendar)
currentAlarmItem = alarmList.firstOrNull()
Log.d("AlarmLogActivity", "已获取 ${newData.size} 条数据") Log.d("AlarmLogActivity", "已获取 ${newData.size} 条数据")
} catch (e: Exception) { } catch (e: Exception) {
@@ -207,8 +214,10 @@ class AlarmLogActivity : AppCompatActivity() {
if (alarmList.isEmpty()) { if (alarmList.isEmpty()) {
showEmptyView() showEmptyView()
currentAlarmItem = null
} else { } else {
hideEmptyView() hideEmptyView()
currentAlarmItem = alarmList.firstOrNull()
} }
} }
@@ -225,10 +234,21 @@ class AlarmLogActivity : AppCompatActivity() {
} }
binding.ivDownload.setOnClickListener { 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 { 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 { binding.ivMute.setOnClickListener {
isMute = !isMute isMute = !isMute
@@ -277,6 +297,40 @@ class AlarmLogActivity : AppCompatActivity() {
binding.exoPlayContextId.onVideoResume() 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() { override fun onDestroy() {
super.onDestroy() super.onDestroy()

View File

@@ -27,6 +27,7 @@ import com.example.defenseapplication.bean.UserInfoBean
import com.example.defenseapplication.bean.VerifyOptionPasswordRequest import com.example.defenseapplication.bean.VerifyOptionPasswordRequest
import okhttp3.MultipartBody import okhttp3.MultipartBody
import retrofit2.http.Body import retrofit2.http.Body
import retrofit2.http.DELETE
import retrofit2.http.GET import retrofit2.http.GET
import retrofit2.http.Multipart import retrofit2.http.Multipart
import retrofit2.http.POST import retrofit2.http.POST
@@ -236,8 +237,15 @@ interface ApiService {
/** /**
* 查看告警消息 * 查看告警消息
*/ */
//@GET("/app/appMessageInfo/{id}") @GET("/app/appMessageInfo/{id}")
//suspend fun getMessageInfo(@retrofit2.http.Path("id") id: String): GetCodeBean<MessageBean> suspend fun getMessageInfo(@retrofit2.http.Path("id") id: String): GetCodeBean<MessageBean>
/**
* 删除告警消息
*/
@DELETE("/app/deleteMessage/{id}")
suspend fun deleteMessage(@retrofit2.http.Path("id") id: String): GetCodeBean<Any>
/** /**

View File

@@ -235,7 +235,13 @@
<string name="generate_invite_code">Generate Invite Code</string> <string name="generate_invite_code">Generate Invite Code</string>
<!-- Dialog --> <!-- Dialog -->
<string name="tip">Tip</string> <string name="tip">提示</string>
<string name="download_alarm_video_confirm">确定下载该入侵告警视频?</string>
<string name="delete_alarm_video_confirm">确定删除该入侵告警视频?</string>
<string name="download_alarm_photo_confirm">确定下载该入侵告警照片?</string>
<string name="delete_alarm_photo_confirm">确定删除该入侵告警照片?</string>
<string name="download_start">开始下载</string>
<string name="delete_success">删除成功</string>
<string name="please_wait">Please wait...</string> <string name="please_wait">Please wait...</string>
<string name="operation_success">Operation successful</string> <string name="operation_success">Operation successful</string>
<string name="operation_failed">Operation failed</string> <string name="operation_failed">Operation failed</string>