From 7c26e906873db5506528a7f31b289df753cd4466 Mon Sep 17 00:00:00 2001 From: maxinyu Date: Tue, 19 May 2026 17:47:58 +0800 Subject: [PATCH] =?UTF-8?q?=E8=AF=AD=E9=9F=B3=E8=AE=BE=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../liveVideo/SettingsActivity.kt | 28 +++--- .../liveVideo/VoiceSettingsActivity.kt | 94 +++++++++++++++---- .../liveVideo/WarningVoiceContentActivity.kt | 71 ++++++++++++-- 3 files changed, 152 insertions(+), 41 deletions(-) diff --git a/app/src/main/java/com/example/defenseapplication/liveVideo/SettingsActivity.kt b/app/src/main/java/com/example/defenseapplication/liveVideo/SettingsActivity.kt index 97babea..f49f845 100644 --- a/app/src/main/java/com/example/defenseapplication/liveVideo/SettingsActivity.kt +++ b/app/src/main/java/com/example/defenseapplication/liveVideo/SettingsActivity.kt @@ -8,7 +8,6 @@ import com.example.defenseapplication.R import com.example.defenseapplication.base.BaseActivity import com.example.defenseapplication.databinding.SettingsActivityBinding import com.example.defenseapplication.utils.DeviceIdEvent -import com.example.defenseapplication.utils.DeviceUpdateEvent import com.example.defenseapplication.utils.LanguageUtil import com.example.defenseapplication.utils.RetrofitNetwork import com.example.defenseapplication.view.CustomDialogFragmentText @@ -20,12 +19,18 @@ import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch import kotlinx.coroutines.withContext //设置页面 -class SettingsActivity : BaseActivity(), DeviceUpdateEvent.DeviceUpdateListener { +class SettingsActivity : BaseActivity() { private lateinit var binding: SettingsActivityBinding private val SP_NAME = "DeviceSettings" private val KEY_RECOGNITION_MODE = "recognition_mode" + private var alertAudio: String? = null + private var audioContent: String? = null + override fun onResume() { + super.onResume() + fetchDeviceInfo() + } override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) binding = SettingsActivityBinding.inflate(layoutInflater) @@ -37,6 +42,8 @@ class SettingsActivity : BaseActivity(), DeviceUpdateEvent.DeviceUpdateListener .init() binding.itemVoiceSetting.setOnClickListener { val intent = Intent(this, VoiceSettingsActivity::class.java) + intent.putExtra("alertAudio", alertAudio ?: "1") + intent.putExtra("audioContent", audioContent ?: "") startActivity(intent) } binding.ivBack.setOnClickListener { @@ -95,17 +102,6 @@ class SettingsActivity : BaseActivity(), DeviceUpdateEvent.DeviceUpdateListener val intent = Intent(this, WiFiManagementActivity::class.java) startActivity(intent) } - fetchDeviceInfo() - DeviceUpdateEvent.addListener(this) - } - - override fun onDestroy() { - super.onDestroy() - DeviceUpdateEvent.removeListener(this) - } - - override fun onDeviceUpdated(deviceId: String) { - fetchDeviceInfo() } private fun fetchDeviceInfo() { @@ -138,6 +134,10 @@ class SettingsActivity : BaseActivity(), DeviceUpdateEvent.DeviceUpdateListener binding.tvDeviceName.text = device.deviceName ?: "未设置" binding.tvWifiName.text = device.wifiName ?: "未设置" + // 保存告警音频和内容数据,用于传递给 VoiceSettingsActivity + alertAudio = device.alertAudio + audioContent = device.audioContet + val serverMode = device.patternPerception val cacheMode = getCachedRecognitionMode() @@ -192,7 +192,6 @@ class SettingsActivity : BaseActivity(), DeviceUpdateEvent.DeviceUpdateListener if (response.code == 200) { binding.tvDeviceName.text = name Toast.makeText(this@SettingsActivity, "修改成功", Toast.LENGTH_SHORT).show() - DeviceUpdateEvent.notifyDeviceUpdated(deviceId) } else { Toast.makeText(this@SettingsActivity, response.msg, Toast.LENGTH_SHORT).show() } @@ -231,7 +230,6 @@ class SettingsActivity : BaseActivity(), DeviceUpdateEvent.DeviceUpdateListener binding.tvRecognitionMode.text = mode saveRecognitionMode(mode) Toast.makeText(this@SettingsActivity, "修改成功", Toast.LENGTH_SHORT).show() - DeviceUpdateEvent.notifyDeviceUpdated(deviceId) } else { Toast.makeText(this@SettingsActivity, response.msg, Toast.LENGTH_SHORT).show() } diff --git a/app/src/main/java/com/example/defenseapplication/liveVideo/VoiceSettingsActivity.kt b/app/src/main/java/com/example/defenseapplication/liveVideo/VoiceSettingsActivity.kt index e7d46b3..35ecc03 100644 --- a/app/src/main/java/com/example/defenseapplication/liveVideo/VoiceSettingsActivity.kt +++ b/app/src/main/java/com/example/defenseapplication/liveVideo/VoiceSettingsActivity.kt @@ -2,51 +2,107 @@ package com.example.defenseapplication.liveVideo import android.content.Intent import android.os.Bundle -import android.view.animation.AccelerateDecelerateInterpolator -import android.widget.ImageView +import android.util.Log import android.widget.Toast -import androidx.activity.enableEdgeToEdge import androidx.appcompat.app.AppCompatActivity -import androidx.core.view.ViewCompat -import androidx.core.view.WindowInsetsCompat -import com.example.defenseapplication.R -import com.example.defenseapplication.databinding.SettingsActivityBinding +import com.example.defenseapplication.bean.DeviceBean import com.example.defenseapplication.databinding.VoiceSettingsActivityBinding +import com.example.defenseapplication.utils.ApiService +import com.example.defenseapplication.utils.DeviceIdEvent +import com.example.defenseapplication.utils.RetrofitNetwork import com.gyf.immersionbar.ImmersionBar +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.launch +import kotlinx.coroutines.withContext //语音设置 class VoiceSettingsActivity : AppCompatActivity() { private lateinit var binding: VoiceSettingsActivityBinding + private lateinit var apiService: ApiService + private var deviceId: String? = null + private var originalAlertAudio: String? = null + private var originalAudioContent: String? = null + override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) binding = VoiceSettingsActivityBinding.inflate(layoutInflater) setContentView(binding.root) + apiService = RetrofitNetwork.getNetworkService() + // ImmersionBar核心调用,沉浸式 ImmersionBar.with(this) .statusBarDarkFont(true) .titleBar(binding.topBar) .init() - binding.swWarningVoice.setOnCheckedChangeListener { _, isChecked -> - when(isChecked) { - true -> { - // 打开开关业务逻辑 - } + // 获取设备ID + deviceId = DeviceIdEvent.getDeviceId() - false -> { - // 关闭开关业务逻辑 - } - } + // 从 Intent 获取设备数据 + originalAlertAudio = intent.getStringExtra("alertAudio") ?: "1" + originalAudioContent = intent.getStringExtra("audioContent") ?: "" + + // 设置Switch状态:0->false,1->true + binding.swWarningVoice.isChecked = originalAlertAudio == "1" + + binding.swWarningVoice.setOnCheckedChangeListener { _, isChecked -> + // 开关状态变化时不立即请求,仅记录状态 } + binding.rlWarningContent.setOnClickListener { - val intent= Intent(this, WarningVoiceContentActivity::class.java) - startActivity(intent) + val intent = Intent(this, WarningVoiceContentActivity::class.java) + // 传递设备数据给警告语音内容页面 + intent.putExtra("deviceId", deviceId) + intent.putExtra("audioContent", originalAudioContent) + startActivityForResult(intent, 1001) } + binding.ivBack.setOnClickListener { - finish() + // 点击返回时触发修改设备请求 + updateDeviceAlertAudio() + } + } + override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { + super.onActivityResult(requestCode, resultCode, data) + if (requestCode == 1001 && resultCode == RESULT_OK) { + // 获取从警告语音内容页面返回的音频内容 + val newAudioContent = data?.getStringExtra("result") + originalAudioContent = newAudioContent + Log.d("WarningVoiceContentActivity", "newAudioContent: $newAudioContent") + if (newAudioContent != null) {} } } + private fun updateDeviceAlertAudio() { + deviceId?.let { id -> + val newAlertAudio = if (binding.swWarningVoice.isChecked) "1" else "0" + // 只有状态发生变化时才请求 + if (newAlertAudio != originalAlertAudio) { + CoroutineScope(Dispatchers.IO).launch { + try { + val deviceBean = DeviceBean(id = id, alertAudio = newAlertAudio) + val response = apiService.updateDeviceInfo(deviceBean) + withContext(Dispatchers.Main) { + if (response.code == 200 && response.data != null) { + Toast.makeText(this@VoiceSettingsActivity, "修改成功", Toast.LENGTH_SHORT).show() + } else { + Toast.makeText(this@VoiceSettingsActivity, response.msg, Toast.LENGTH_SHORT).show() + } + finish() + } + } catch (e: Exception) { + withContext(Dispatchers.Main) { + Toast.makeText(this@VoiceSettingsActivity, "修改失败", Toast.LENGTH_SHORT).show() + finish() + } + } + } + } else { + finish() + } + } + } } \ No newline at end of file diff --git a/app/src/main/java/com/example/defenseapplication/liveVideo/WarningVoiceContentActivity.kt b/app/src/main/java/com/example/defenseapplication/liveVideo/WarningVoiceContentActivity.kt index dd1bb88..765be71 100644 --- a/app/src/main/java/com/example/defenseapplication/liveVideo/WarningVoiceContentActivity.kt +++ b/app/src/main/java/com/example/defenseapplication/liveVideo/WarningVoiceContentActivity.kt @@ -1,43 +1,100 @@ package com.example.defenseapplication.liveVideo +import android.content.Intent import android.graphics.Color import android.os.Bundle -import android.text.Editable -import androidx.activity.enableEdgeToEdge +import android.widget.Toast import androidx.appcompat.app.AppCompatActivity import androidx.core.widget.doAfterTextChanged +import com.example.defenseapplication.bean.DeviceBean import com.example.defenseapplication.databinding.WarningVoiceContentActivityBinding +import com.example.defenseapplication.utils.ApiService +import com.example.defenseapplication.utils.RetrofitNetwork import com.gyf.immersionbar.ImmersionBar +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.launch +import kotlinx.coroutines.withContext + //警告语音内容 class WarningVoiceContentActivity : AppCompatActivity() { private lateinit var binding: WarningVoiceContentActivityBinding + private lateinit var apiService: ApiService + private var deviceId: String? = null + private var originalAudioContent: String? = null + override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) binding = WarningVoiceContentActivityBinding.inflate(layoutInflater) setContentView(binding.root) + + apiService = RetrofitNetwork.getNetworkService() + // ImmersionBar核心调用,沉浸式 ImmersionBar.with(this) .statusBarDarkFont(true) .titleBar(binding.topBar) .init() - // 初始化计数显示 - val initialLength = binding.etWarningContent.text.length - updateWordCount(initialLength) + + // 从 Intent 获取设备数据(不再发送网络请求) + deviceId = intent.getStringExtra("deviceId") + originalAudioContent = intent.getStringExtra("audioContent") ?: "" + + // 设置告警内容 + binding.etWarningContent.setText(originalAudioContent) + // 更新字数统计 + updateWordCount(originalAudioContent?.length ?: 0) // 添加文本变化监听 binding.etWarningContent.doAfterTextChanged { text -> val length = text?.length ?: 0 updateWordCount(length) } + binding.btnBack.setOnClickListener { finish() } + binding.btnSave.setOnClickListener { - //保存的逻辑 - finish() + // 点击保存时触发修改设备请求 + updateDeviceAudioContent() } } + + private fun updateDeviceAudioContent() { + deviceId?.let { id -> + val newAudioContent = binding.etWarningContent.text.toString().trim() + // 只有内容发生变化时才请求 + if (newAudioContent != originalAudioContent) { + CoroutineScope(Dispatchers.IO).launch { + try { + val deviceBean = DeviceBean(id = id, audioContet = newAudioContent) + val response = apiService.updateDeviceInfo(deviceBean) + withContext(Dispatchers.Main) { + if (response.code == 200 && response.data != null) { + Toast.makeText(this@WarningVoiceContentActivity, "保存成功", Toast.LENGTH_SHORT).show() + } else { + Toast.makeText(this@WarningVoiceContentActivity, response.msg, Toast.LENGTH_SHORT).show() + } + val intent = Intent() + intent.putExtra("result",newAudioContent) + setResult(RESULT_OK, intent) + finish() + } + } catch (e: Exception) { + withContext(Dispatchers.Main) { + Toast.makeText(this@WarningVoiceContentActivity, "保存失败", Toast.LENGTH_SHORT).show() + finish() + } + } + } + } else { + finish() + } + } + } + private fun updateWordCount(current: Int) { binding.tvWordCount.text = "$current/100" //字数达到上限时改变颜色