package com.nova.brain.glass.ui import android.content.Intent import android.os.Bundle import android.os.Handler import android.os.Looper import androidx.lifecycle.ViewModelProvider import com.nova.brain.glass.R import com.nova.brain.glass.databinding.ActivityWelcomeBinding import com.nova.brain.glass.helper.IntentRecognizeHelper import com.nova.brain.glass.helper.OfflineCmdListener import com.nova.brain.glass.helper.OfflineCmdServiceHelper import com.nova.brain.glass.viewmodel.WelcomeVM import com.xuqm.base.ui.BaseActivity class WelcomeActivity : BaseActivity() { override fun getLayoutId(): Int = R.layout.activity_welcome override fun fullscreen(): Boolean = true private lateinit var vm: WelcomeVM // 点动画 private val tvOriginalText = "您可以说:Nova,我的任务有哪些?" private val dotsHandler = Handler(Looper.getMainLooper()) private var dotCount = 0 private val dotsRunnable = object : Runnable { override fun run() { dotCount = (dotCount % 3) + 1 binding.tv.text = "正在识别中${"·".repeat(dotCount)}" dotsHandler.postDelayed(this, 500) } } private fun startDotsAnim() { dotCount = 0 dotsHandler.removeCallbacks(dotsRunnable) dotsHandler.post(dotsRunnable) } private fun stopDotsAnim() { dotsHandler.removeCallbacks(dotsRunnable) binding.tv.text = tvOriginalText } override fun initView(savedInstanceState: Bundle?) { super.initView(savedInstanceState) vm = ViewModelProvider(this)[WelcomeVM::class.java] window.addFlags(android.view.WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON) binding.tv.setOnClickListener { triggerRecognize() } } override fun initData() { super.initData() } private fun triggerRecognize() { startDotsAnim() IntentRecognizeHelper.recognize( context = this, text = "当前阶段,最紧急的任务是什么?", onSuccess = { action -> if (action.name == "goToDecisionCenter") { startActivity( Intent(this, ChatActivity::class.java) .putExtra("question", action.params.question) ) } }, onComplete = { stopDotsAnim() } ) } private val offlineCmdListener = object : OfflineCmdListener { override fun onOfflineCmd(cmd: String) { runOnUiThread { when (cmd) { "任务列表", "查看任务", "查看任务列表" -> { startActivity(Intent(this@WelcomeActivity, TaskListActivity::class.java)) } "决策中心", "紧急任务", "当前任务" -> { triggerRecognize() } } } } } override fun onResume() { super.onResume() OfflineCmdServiceHelper.addOnLineListener(offlineCmdListener) OfflineCmdServiceHelper.addListenerWelcome() stopDotsAnim() // 从 ChatActivity 返回时恢复原文 } override fun onPause() { super.onPause() OfflineCmdServiceHelper.removeOnLineListener(offlineCmdListener) OfflineCmdServiceHelper.removeListenerWelcome() dotsHandler.removeCallbacks(dotsRunnable) } override fun onDestroy() { super.onDestroy() window.clearFlags(android.view.WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON) } }