feat: 添加清除当前任务功能

在设置页面添加清除任务按钮,点击后可清空当前任务状态。同时,在 MQTT 收到任何指令时也自动清空任务,确保开门等基础行为不受任务状态影响。新增相关字符串资源并处理界面回调。
This commit is contained in:
2026-03-28 10:07:53 +08:00
parent fea2ba7591
commit 4983c4c1ad
6 changed files with 52 additions and 1 deletions

View File

@@ -62,6 +62,21 @@ class MainActivity : AppCompatActivity(), OnRobotReadyListener, TtsListener, OnG
private lateinit var permissionManager: PermissionManager private lateinit var permissionManager: PermissionManager
private var liveKitManager: LiveKitManager? = null private var liveKitManager: LiveKitManager? = null
private var isLiveKitConnected = false private var isLiveKitConnected = false
companion object {
private const val REQUEST_CLEAR_TASK = 1001
}
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
if (requestCode == REQUEST_CLEAR_TASK && resultCode == RESULT_OK) {
data?.getBooleanExtra("clear_task", false)?.let { clearTask ->
if (clearTask) {
setCurrentTask("")
}
}
}
}
private var isMqttConnected = false private var isMqttConnected = false
private var lastArrivalLocation: String? = null private var lastArrivalLocation: String? = null
@@ -144,7 +159,7 @@ class MainActivity : AppCompatActivity(), OnRobotReadyListener, TtsListener, OnG
lastArrivalLocation = prefs.getString("current_location", null) lastArrivalLocation = prefs.getString("current_location", null)
} }
binding.btnSettings.setOnClickListener { binding.btnSettings.setOnClickListener {
startActivity(Intent(this, SettingsActivity::class.java)) startActivityForResult(Intent(this, SettingsActivity::class.java), REQUEST_CLEAR_TASK)
} }
taskController = TaskController( taskController = TaskController(

View File

@@ -268,6 +268,10 @@ class MqttManager(
} }
private fun handleJsonCommand(obj: JSONObject) { private fun handleJsonCommand(obj: JSONObject) {
// 收到任何 MQTT 指令时清空当前任务,确保开门等基础行为不受影响
scope.launch(Dispatchers.Main) {
(context as? MainActivity)?.setCurrentTask("")
}
val action = obj.optString("action", obj.optString("cmd", obj.optString("type", ""))).lowercase() val action = obj.optString("action", obj.optString("cmd", obj.optString("type", ""))).lowercase()
when (action) { when (action) {
"recharge" -> { "recharge" -> {

View File

@@ -110,6 +110,7 @@ class SettingsActivity : AppCompatActivity() {
setupRestartButton() setupRestartButton()
setupSpecialStateSwitch() setupSpecialStateSwitch()
setupLocationSelector() setupLocationSelector()
setupClearTaskButton()
} }
override fun onResume() { override fun onResume() {
@@ -159,6 +160,17 @@ class SettingsActivity : AppCompatActivity() {
} }
} }
private fun setupClearTaskButton() {
binding.btnClearTask.setOnClickListener {
val resultIntent = Intent().apply {
putExtra("clear_task", true)
}
setResult(RESULT_OK, resultIntent)
Toast.makeText(this, getString(R.string.msg_task_cleared), Toast.LENGTH_SHORT).show()
finish()
}
}
private fun startRestartAnimation() { private fun startRestartAnimation() {
binding.restartProgressBar.visibility = View.VISIBLE binding.restartProgressBar.visibility = View.VISIBLE
restartAnimator = ValueAnimator.ofInt(0, 100).apply { restartAnimator = ValueAnimator.ofInt(0, 100).apply {

View File

@@ -378,6 +378,15 @@
android:visibility="invisible" /> android:visibility="invisible" />
</FrameLayout> </FrameLayout>
<Button
android:id="@+id/btnClearTask"
style="@style/Widget.App.Button"
android:layout_width="match_parent"
android:layout_height="72dp"
android:layout_marginTop="16dp"
android:textSize="20sp"
android:text="@string/btn_clear_task" />
<TextView <TextView
android:id="@+id/tvVersion" android:id="@+id/tvVersion"
android:layout_width="wrap_content" android:layout_width="wrap_content"

View File

@@ -362,6 +362,15 @@
android:visibility="invisible" /> android:visibility="invisible" />
</FrameLayout> </FrameLayout>
<Button
android:id="@+id/btnClearTask"
style="@style/Widget.App.Button"
android:layout_width="match_parent"
android:layout_height="72dp"
android:layout_marginTop="16dp"
android:textSize="20sp"
android:text="@string/btn_clear_task" />
<TextView <TextView
android:id="@+id/tvVersion" android:id="@+id/tvVersion"
android:layout_width="wrap_content" android:layout_width="wrap_content"

View File

@@ -35,4 +35,6 @@
<string name="livekit_status_disconnected">LiveKit 已断开</string> <string name="livekit_status_disconnected">LiveKit 已断开</string>
<string name="livekit_status_failed">LiveKit 连接失败</string> <string name="livekit_status_failed">LiveKit 连接失败</string>
<string name="livekit_status_permission">需要麦克风/摄像头权限</string> <string name="livekit_status_permission">需要麦克风/摄像头权限</string>
<string name="btn_clear_task">清除当前任务</string>
<string name="msg_task_cleared">当前任务已清除</string>
</resources> </resources>