From 157ac8be13a78417d287a79bc52448de001e3a4d Mon Sep 17 00:00:00 2001 From: maxinyu Date: Tue, 19 May 2026 16:15:14 +0800 Subject: [PATCH] =?UTF-8?q?=E8=87=AA=E5=8A=A8=E6=A8=A1=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../defenseapplication/home/HomeActivity.kt | 1 + .../liveVideo/AutoModeActivity.kt | 134 +++++------------- .../liveVideo/SettingsActivity.kt | 20 ++- .../main/res/layout/auto_mode_activity.xml | 6 +- 4 files changed, 61 insertions(+), 100 deletions(-) diff --git a/app/src/main/java/com/example/defenseapplication/home/HomeActivity.kt b/app/src/main/java/com/example/defenseapplication/home/HomeActivity.kt index 0da9361..db2426d 100644 --- a/app/src/main/java/com/example/defenseapplication/home/HomeActivity.kt +++ b/app/src/main/java/com/example/defenseapplication/home/HomeActivity.kt @@ -1,6 +1,7 @@ package com.example.defenseapplication.home import android.os.Bundle +import android.util.Log import androidx.activity.enableEdgeToEdge import androidx.appcompat.app.AppCompatActivity import androidx.core.view.ViewCompat diff --git a/app/src/main/java/com/example/defenseapplication/liveVideo/AutoModeActivity.kt b/app/src/main/java/com/example/defenseapplication/liveVideo/AutoModeActivity.kt index 5bd7cf5..31ca28d 100644 --- a/app/src/main/java/com/example/defenseapplication/liveVideo/AutoModeActivity.kt +++ b/app/src/main/java/com/example/defenseapplication/liveVideo/AutoModeActivity.kt @@ -1,6 +1,6 @@ package com.example.defenseapplication.liveVideo -import TimePickerFragment +import android.app.TimePickerDialog import android.content.Intent import android.os.Bundle import android.widget.Toast @@ -16,18 +16,14 @@ import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch import kotlinx.coroutines.withContext -import java.util.Calendar +import java.text.SimpleDateFormat +import java.util.Locale + //自动模式 class AutoModeActivity : AppCompatActivity() { private lateinit var binding: AutoModeActivityBinding - private lateinit var calendar: Calendar private var selectedMode = "0" - private var selectedYear = 0 - private var selectedMonth = 0 - private var selectedDay = 0 - private var selectedHour = 0 - private var selectedMinute = 0 private var selectedStartHour = 21 private var selectedStartMinute = 30 private var selectedEndHour = 8 @@ -43,28 +39,21 @@ class AutoModeActivity : AppCompatActivity() { .titleBar(binding.topBar) .init() - calendar = Calendar.getInstance() - selectedYear = calendar.get(Calendar.YEAR) - selectedMonth = calendar.get(Calendar.MONTH) - selectedDay = calendar.get(Calendar.DAY_OF_MONTH) - initListener() loadCurrentSettings() - - showAutoModeNoticeDialog() } private fun initListener() { binding.ivBack.setOnClickListener { - finish() + saveAutoModeSettings() } binding.rbAutoMode.setOnCheckedChangeListener { _, isChecked -> if (isChecked) { selectedMode = "0" - showAutoModeNoticeDialog() binding.time.visibility = android.view.View.VISIBLE + showAutoModeNoticeDialog() } } @@ -76,19 +65,19 @@ class AutoModeActivity : AppCompatActivity() { } binding.itemStartTime.setOnClickListener { - showDateTimePicker { year, month, day, hour, minute -> + showTimePicker(true) { hour, minute -> selectedStartHour = hour selectedStartMinute = minute - val startTimeStr = String.format("%04d-%02d-%02d %02d:%02d", year, month + 1, day, hour, minute) + val startTimeStr = String.format("%02d:%02d", hour, minute) binding.tvStartTime.text = startTimeStr } } binding.itemEndTime.setOnClickListener { - showDateTimePicker { year, month, day, hour, minute -> + showTimePicker(false) { hour, minute -> selectedEndHour = hour selectedEndMinute = minute - val endTimeStr = String.format("%04d-%02d-%02d %02d:%02d", year, month + 1, day, hour, minute) + val endTimeStr = String.format("%02d:%02d", hour, minute) binding.tvEndTime.text = endTimeStr } } @@ -117,30 +106,8 @@ class AutoModeActivity : AppCompatActivity() { binding.time.visibility = android.view.View.GONE } } - response.data.startTime?.let { startTime -> - binding.tvStartTime.text = if (startTime.length >= 5) { - if (startTime.contains("-")) { - startTime - } else { - String.format("%04d-%02d-%02d %s", selectedYear, selectedMonth + 1, selectedDay, startTime) - } - } else { - String.format("%04d-%02d-%02d %02d:%02d", selectedYear, selectedMonth + 1, selectedDay, 21, 30) - } - parseDateTime(startTime, true) - } - response.data.endTime?.let { endTime -> - binding.tvEndTime.text = if (endTime.length >= 5) { - if (endTime.contains("-")) { - endTime - } else { - String.format("%04d-%02d-%02d %s", selectedYear, selectedMonth + 1, selectedDay, endTime) - } - } else { - String.format("%04d-%02d-%02d %02d:%02d", selectedYear, selectedMonth + 1, selectedDay, 8, 30) - } - parseDateTime(endTime, false) - } + binding.tvStartTime.text = response.data.startTime?.formatToHourMinute() + binding.tvEndTime.text=response.data.endTime?.formatToHourMinute() } } } catch (e: Exception) { @@ -148,60 +115,34 @@ class AutoModeActivity : AppCompatActivity() { } } } - - private fun showTimePicker(onTimeSelected: (hour: Int, minute: Int) -> Unit) { - val timePickerFragment = TimePickerFragment { hour, minute -> - onTimeSelected(hour, minute) + private fun String.formatToHourMinute(): String { + return try { + val inputFormat = SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.getDefault()) + val outputFormat = SimpleDateFormat("HH:mm", Locale.getDefault()) + val date = inputFormat.parse(this) + outputFormat.format(date) + } catch (e: Exception) { + this // 解析失败返回原字符串 } - timePickerFragment.show(supportFragmentManager, "timePicker") } - private fun showDateTimePicker(onDateTimeSelected: (year: Int, month: Int, day: Int, hour: Int, minute: Int) -> Unit) { + private fun showTimePicker(isStartTime: Boolean, onTimeSelected: (hour: Int, minute: Int) -> Unit) { + val currentHour = if (isStartTime) selectedStartHour else selectedEndHour + val currentMinute = if (isStartTime) selectedStartMinute else selectedEndMinute - } - - private fun parseDateTime(dateTimeStr: String, isStartTime: Boolean) { - if (dateTimeStr.contains("-") && dateTimeStr.contains(" ")) { - val dateTimeParts = dateTimeStr.split(" ") - if (dateTimeParts.size == 2) { - val dateParts = dateTimeParts[0].split("-") - val timeParts = dateTimeParts[1].split(":") - if (dateParts.size == 3 && timeParts.size == 2) { - if (isStartTime) { - selectedStartHour = timeParts[0].toIntOrNull() ?: 21 - selectedStartMinute = timeParts[1].toIntOrNull() ?: 30 - } else { - selectedEndHour = timeParts[0].toIntOrNull() ?: 8 - selectedEndMinute = timeParts[1].toIntOrNull() ?: 30 - } - return - } - } - } - if (dateTimeStr.contains(":")) { - val timeParts = dateTimeStr.split(":") - if (timeParts.size == 2) { - if (isStartTime) { - selectedStartHour = timeParts[0].toIntOrNull() ?: 21 - selectedStartMinute = timeParts[1].toIntOrNull() ?: 30 - } else { - selectedEndHour = timeParts[0].toIntOrNull() ?: 8 - selectedEndMinute = timeParts[1].toIntOrNull() ?: 30 - } - } - } + TimePickerDialog( + this, + { _, hour, minute -> + onTimeSelected(hour, minute) + }, + currentHour, + currentMinute, + true + ).show() } private fun showAutoModeNoticeDialog() { val dialog = AutoModeNoticeDialog(this) - dialog.setOnConfirmListener { year, month, day, hour, minute -> - selectedYear = year - selectedMonth = month - selectedDay = day - selectedHour = hour - selectedMinute = minute - saveAutoModeSettings() - } dialog.show() } @@ -209,12 +150,12 @@ class AutoModeActivity : AppCompatActivity() { val deviceId = DeviceIdEvent.getDeviceId() if (deviceId.isNullOrEmpty()) { Toast.makeText(this, "设备ID为空", Toast.LENGTH_SHORT).show() + finish() return } - val startTime = String.format("%04d-%02d-%02d %02d:%02d", selectedYear, selectedMonth + 1, selectedDay, selectedStartHour, selectedStartMinute) - val endTime = String.format("%04d-%02d-%02d %02d:%02d", selectedYear, selectedMonth + 1, selectedDay, selectedEndHour, selectedEndMinute) - val effectiveTime = String.format("%04d-%02d-%02d %02d:%02d", selectedYear, selectedMonth + 1, selectedDay, selectedHour, selectedMinute) + val startTime = binding.tvStartTime.text.toString() + val endTime = binding.tvEndTime.text.toString() CoroutineScope(Dispatchers.IO).launch { try { @@ -235,18 +176,19 @@ class AutoModeActivity : AppCompatActivity() { val resultIntent = Intent() resultIntent.putExtra("auto_mode", modeText) resultIntent.putExtra("auto_mode_value", selectedMode) - resultIntent.putExtra("effective_time", effectiveTime) setResult(RESULT_OK, resultIntent) - Toast.makeText(this@AutoModeActivity, "修改成功,生效时间:$effectiveTime", Toast.LENGTH_SHORT).show() + Toast.makeText(this@AutoModeActivity, "修改成功", Toast.LENGTH_SHORT).show() DeviceUpdateEvent.notifyDeviceUpdated(deviceId) } else { Toast.makeText(this@AutoModeActivity, response.msg, Toast.LENGTH_SHORT).show() } + finish() } } catch (e: Exception) { e.printStackTrace() withContext(Dispatchers.Main) { Toast.makeText(this@AutoModeActivity, "网络请求失败", Toast.LENGTH_SHORT).show() + finish() } } } 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 074369e..97babea 100644 --- a/app/src/main/java/com/example/defenseapplication/liveVideo/SettingsActivity.kt +++ b/app/src/main/java/com/example/defenseapplication/liveVideo/SettingsActivity.kt @@ -20,7 +20,7 @@ import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch import kotlinx.coroutines.withContext //设置页面 -class SettingsActivity : BaseActivity() { +class SettingsActivity : BaseActivity(), DeviceUpdateEvent.DeviceUpdateListener { private lateinit var binding: SettingsActivityBinding private val SP_NAME = "DeviceSettings" @@ -96,6 +96,16 @@ class SettingsActivity : BaseActivity() { startActivity(intent) } fetchDeviceInfo() + DeviceUpdateEvent.addListener(this) + } + + override fun onDestroy() { + super.onDestroy() + DeviceUpdateEvent.removeListener(this) + } + + override fun onDeviceUpdated(deviceId: String) { + fetchDeviceInfo() } private fun fetchDeviceInfo() { @@ -144,6 +154,14 @@ class SettingsActivity : BaseActivity() { !cacheMode.isNullOrEmpty() -> cacheMode else -> getString(R.string.bluetooth_recognition) } + + device.workMode?.let { workMode -> + binding.tvAutoMode.text = when (workMode) { + "0" -> getString(R.string.full_auto_mode) + "1" -> getString(R.string.semi_auto_mode) + else -> getString(R.string.full_auto_mode) + } + } } private fun getCachedRecognitionMode(): String? { diff --git a/app/src/main/res/layout/auto_mode_activity.xml b/app/src/main/res/layout/auto_mode_activity.xml index 09b75db..2c6b232 100644 --- a/app/src/main/res/layout/auto_mode_activity.xml +++ b/app/src/main/res/layout/auto_mode_activity.xml @@ -71,10 +71,11 @@ android:background="@drawable/bg_bottom_sheet_rounded" android:button="@drawable/radio_button_selector" android:checked="true" - android:layout_marginStart="4dp" + android:layout_marginStart="8dp" android:gravity="center" android:text="@string/full_auto_mode" android:textColor="@color/black" + android:paddingVertical="16dp" android:textSize="14sp" /> @@ -130,7 +132,6 @@ android:id="@+id/tvStartTime" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:text="21:30" android:textColor="@color/gray" android:textSize="14sp" /> @@ -175,7 +176,6 @@ android:id="@+id/tvEndTime" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:text="08:30" android:textColor="@color/gray" android:textSize="14sp" />