diff --git a/app/src/main/java/com/example/lzwcai_terminal_temi/MainActivity.kt b/app/src/main/java/com/example/lzwcai_terminal_temi/MainActivity.kt index 983b3ce..aecb7cb 100644 --- a/app/src/main/java/com/example/lzwcai_terminal_temi/MainActivity.kt +++ b/app/src/main/java/com/example/lzwcai_terminal_temi/MainActivity.kt @@ -55,6 +55,12 @@ class MainActivity : AppCompatActivity(), OnRobotReadyListener, TtsListener, OnG OnDetectionStateChangedListener, OnReposeStatusChangedListener, SharedPreferences.OnSharedPreferenceChangeListener, OnRequestPermissionResultListener, OnBatteryStatusChangedListener, OnMovementStatusChangedListener, OnCurrentPositionChangedListener { + private data class BehaviorDecision( + val skipArrivalAnnouncement: Boolean, + val allowAutoRecharge: Boolean, + val allowDoorWorkflow: Boolean, + val allowIdleGreeting: Boolean + ) private lateinit var robot: Robot private lateinit var binding: ActivityMainBinding @@ -431,15 +437,21 @@ class MainActivity : AppCompatActivity(), OnRobotReadyListener, TtsListener, OnG if (taskController.handleNotificationArrival(location)) { return } - if (isSpecialStateEnabled() && taskController.currentTask.isEmpty()) { + val behavior = resolveBehaviorDecision() + if (behavior.skipArrivalAnnouncement) { Log.i("MainActivity", "Special state: arrival announcement skipped at $location.") + if (behavior.allowAutoRecharge) { + scheduleAutoRechargeAfterIdleArrival() + } return } val text = "已到达$location" val ttsRequest = TtsRequest.create(text, false, language = TtsRequest.Language.ZH_CN) robot.speak(ttsRequest) Log.i("MainActivity", "Arrived at $location, announcement sent.") - scheduleAutoRechargeAfterIdleArrival() + if (behavior.allowAutoRecharge) { + scheduleAutoRechargeAfterIdleArrival() + } } override fun onDetectionStateChanged(state: Int) { @@ -490,10 +502,9 @@ class MainActivity : AppCompatActivity(), OnRobotReadyListener, TtsListener, OnG Log.i("MainActivity", "Detection event handled by task controller.") return } - val isSpecialState = isSpecialStateEnabled() - val isIdleTask = taskController.currentTask.isEmpty() || taskController.currentTask == "speech" + val behavior = resolveBehaviorDecision() val atHomeBase = robotEventHandler.normalizeLocation(lastArrivalLocation) == "homebase" - val canHandleDoor = isIdleTask && atHomeBase && !taskController.isLeavingHomeBase && !isSpecialState + val canHandleDoor = behavior.allowDoorWorkflow && atHomeBase && !taskController.isLeavingHomeBase if (canHandleDoor) { when (state) { DETECTED -> { @@ -522,7 +533,7 @@ class MainActivity : AppCompatActivity(), OnRobotReadyListener, TtsListener, OnG } } } - if (isIdleTask && !atHomeBase && state == DETECTED && !isSpecialState && !isTtsSpeaking) { + if (behavior.allowIdleGreeting && !atHomeBase && state == DETECTED && !isTtsSpeaking) { val hour = java.util.Calendar.getInstance().get(java.util.Calendar.HOUR_OF_DAY) val greeting = when (hour) { in 6..11 -> "早上好" @@ -586,6 +597,9 @@ class MainActivity : AppCompatActivity(), OnRobotReadyListener, TtsListener, OnG if (key == specialStateKey) { val isSpecial = isSpecialStateEnabled() Log.i("MainActivity", "Special state pref changed: $isSpecial, currentTask: ${taskController.currentTask}") + if (isSpecial) { + cancelAutoRecharge("special_state_enabled") + } } if (key == LiveKitManager.PREF_KEY_URL || key == LiveKitManager.PREF_KEY_ROOM || @@ -749,7 +763,7 @@ class MainActivity : AppCompatActivity(), OnRobotReadyListener, TtsListener, OnG } private fun scheduleAutoRechargeAfterIdleArrival() { - if (!isAutoRechargeAllowedTask()) { + if (!shouldAutoRechargeAfterIdleArrival()) { return } if (robotEventHandler.normalizeLocation(lastArrivalLocation) == "homebase") { @@ -758,7 +772,7 @@ class MainActivity : AppCompatActivity(), OnRobotReadyListener, TtsListener, OnG autoRechargeJob?.cancel() autoRechargeJob = mainScope.launch { delay(10_000L) - if (!isAutoRechargeAllowedTask()) { + if (!shouldAutoRechargeAfterIdleArrival()) { return@launch } if (robotEventHandler.normalizeLocation(lastArrivalLocation) == "homebase") { @@ -769,11 +783,26 @@ class MainActivity : AppCompatActivity(), OnRobotReadyListener, TtsListener, OnG } } - private fun isAutoRechargeAllowedTask(): Boolean { + private fun shouldAutoRechargeAfterIdleArrival(): Boolean { + if (isSpecialStateEnabled()) { + return false + } val task = taskController.currentTask.trim().lowercase() return task.isEmpty() || task == "speech" } + private fun resolveBehaviorDecision(): BehaviorDecision { + val task = taskController.currentTask.trim().lowercase() + val isSpecialState = isSpecialStateEnabled() + val isIdleTask = task.isEmpty() || task == "speech" + return BehaviorDecision( + skipArrivalAnnouncement = isSpecialState && task.isEmpty(), + allowAutoRecharge = !isSpecialState && isIdleTask, + allowDoorWorkflow = !isSpecialState && isIdleTask, + allowIdleGreeting = !isSpecialState && isIdleTask + ) + } + private fun cancelAutoRecharge(reason: String) { if (autoRechargeJob?.isActive == true) { Log.i("MainActivity", "Auto recharge canceled: $reason")