From 2c5878ab90234a9db0faecfe5b1aaf27df046994 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BE=90=E5=8B=A4=E6=B0=91?= Date: Tue, 14 Apr 2026 14:28:54 +0800 Subject: [PATCH] =?UTF-8?q?refactor(offlineCmd):=20=E9=87=8D=E6=9E=84?= =?UTF-8?q?=E7=A6=BB=E7=BA=BF=E5=91=BD=E4=BB=A4=E6=9C=8D=E5=8A=A1=E7=9B=91?= =?UTF-8?q?=E5=90=AC=E5=99=A8=E7=AE=A1=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 将单个监听器改为监听器列表支持多实例注册 - 添加 addOnLineListener 和 removeOnLineListener 方法 - 在 TaskListActivity 中实现监听器的生命周期管理 - 移除无用的导入和变量声明 - 优化页面跳转和翻页逻辑的代码结构 - 在布局文件中添加必要的控件ID用于点击事件处理 --- .../glass/helper/OfflineCmdServiceHelper.kt | 16 ++-- .../nova/brain/glass/ui/TaskListActivity.kt | 95 ++++++++++++------- .../nova/brain/glass/ui/WelcomeActivity.kt | 39 +++++--- .../main/res/layout/activity_task_list.xml | 2 + app/src/main/res/layout/activity_welcome.xml | 1 + 5 files changed, 96 insertions(+), 57 deletions(-) diff --git a/app/src/main/java/com/nova/brain/glass/helper/OfflineCmdServiceHelper.kt b/app/src/main/java/com/nova/brain/glass/helper/OfflineCmdServiceHelper.kt index b1f0101..f9493f6 100644 --- a/app/src/main/java/com/nova/brain/glass/helper/OfflineCmdServiceHelper.kt +++ b/app/src/main/java/com/nova/brain/glass/helper/OfflineCmdServiceHelper.kt @@ -1,17 +1,14 @@ package com.nova.brain.glass.helper -import com.luck.picture.lib.config.PictureSelectionConfig.listener import com.rokid.security.glass3.open.sdk.GlassSdk import com.rokid.security.glass3.sdk.base.data.offlineCmd.bean.VoiceAction import com.rokid.security.glass3.sdk.base.data.offlineCmd.listener.IVoiceCallback import com.xuqm.base.common.LogHelper -import com.xuqm.base.common.ToolsHelper -import com.xuqm.sdhbwfu.core.extensions.isNull data class OfflineCmdBean(val text: String, val pinyin: String) object OfflineCmdServiceHelper { - private var listener: OfflineCmdListener? = null + private var listenerList = mutableListOf() private val list = mutableListOf().apply { add(OfflineCmdBean("任务列表", "ren wu lie biao")) @@ -37,13 +34,18 @@ object OfflineCmdServiceHelper { service.add(VoiceAction(bean.text, bean.pinyin, object : IVoiceCallback.Stub() { override fun onVoiceTriggered() { LogHelper.d("onOfflineCmd: ${bean.text}") - listener?.onOfflineCmd(bean.text) + for (l in listenerList) { + l.onOfflineCmd(bean.text) + } } })) } } - fun setOnLineListener(listener: OfflineCmdListener){ - this.listener = listener + fun addOnLineListener(listener: OfflineCmdListener){ + this.listenerList.add(listener) + } + fun removeOnLineListener(listener: OfflineCmdListener){ + this.listenerList.remove(listener) } diff --git a/app/src/main/java/com/nova/brain/glass/ui/TaskListActivity.kt b/app/src/main/java/com/nova/brain/glass/ui/TaskListActivity.kt index e98e658..006e4e2 100644 --- a/app/src/main/java/com/nova/brain/glass/ui/TaskListActivity.kt +++ b/app/src/main/java/com/nova/brain/glass/ui/TaskListActivity.kt @@ -1,6 +1,7 @@ package com.nova.brain.glass.ui -import android.content.Intent +import android.os.Bundle +import androidx.recyclerview.widget.LinearLayoutManager import com.nova.brain.glass.R import com.nova.brain.glass.databinding.ActivityTaskListBinding import com.nova.brain.glass.helper.OfflineCmdListener @@ -11,8 +12,6 @@ import com.xuqm.base.adapter.BasePagedAdapter import com.xuqm.base.adapter.CommonPagedAdapter import com.xuqm.base.adapter.ViewHolder import com.xuqm.base.common.ToolsHelper -import androidx.recyclerview.widget.LinearLayoutManager -import com.xuqm.base.common.LogHelper import com.xuqm.base.ui.BaseListFormLayoutActivity class TaskListActivity : @@ -20,41 +19,67 @@ class TaskListActivity : override fun getLayoutId(): Int = R.layout.activity_task_list override fun fullscreen(): Boolean = true - override fun initData() { - super.initData() - OfflineCmdServiceHelper.setOnLineListener(object : OfflineCmdListener { - override fun onOfflineCmd(cmd: String) { - when (cmd) { - "下一页", "翻页", "查看下一页", "继续翻页", "继续下一页" -> { - val layoutManager = binding.baseRecyclerView.layoutManager as? LinearLayoutManager - if (layoutManager != null) { - val lastVisible = layoutManager.findLastVisibleItemPosition() - val nextPosition = lastVisible + 1 - if (nextPosition < adapter.itemCount) { - layoutManager.scrollToPositionWithOffset(nextPosition, 0) - } else { - ToolsHelper.showMessage("没有下一页了") - } - } - } - "上一页", "查看上一页", "继续上一页" -> { - val layoutManager = binding.baseRecyclerView.layoutManager as? LinearLayoutManager - if (layoutManager != null) { - val firstVisible = layoutManager.findFirstVisibleItemPosition() - if (firstVisible > 0) { - val lastVisible = layoutManager.findLastVisibleItemPosition() - val pageSize = (lastVisible - firstVisible).coerceAtLeast(1) - val previousPosition = (firstVisible - pageSize).coerceAtLeast(0) - layoutManager.scrollToPositionWithOffset(previousPosition, 0) - } else { - ToolsHelper.showMessage("没有上一页了") - } - } - } + override fun initView(savedInstanceState: Bundle?) { + super.initView(savedInstanceState) + binding.xia.setOnClickListener { + toNext() + } + binding.shang.setOnClickListener { + toPre() + } + } + + private val offlineCmdListener = object : OfflineCmdListener { + override fun onOfflineCmd(cmd: String) { + when (cmd) { + "下一页", "翻页", "查看下一页", "继续翻页", "继续下一页" -> { + toNext() + } + "上一页", "查看上一页", "继续上一页" -> { + toPre() } } - }) + } + + } + + private fun toPre() { + val layoutManager = binding.baseRecyclerView.layoutManager as? LinearLayoutManager + if (layoutManager != null) { + val firstVisible = layoutManager.findFirstVisibleItemPosition() + if (firstVisible > 0) { + val lastVisible = layoutManager.findLastVisibleItemPosition() + val pageSize = (lastVisible - firstVisible).coerceAtLeast(1) + val previousPosition = (firstVisible - pageSize).coerceAtLeast(0) + layoutManager.scrollToPositionWithOffset(previousPosition, 0) + } else { + ToolsHelper.showMessage("没有上一页了") + } + } + } + private fun toNext() { + val layoutManager = binding.baseRecyclerView.layoutManager as? LinearLayoutManager + if (layoutManager != null) { + val lastVisible = layoutManager.findLastVisibleItemPosition() + if (lastVisible < adapter.itemCount) { + layoutManager.scrollToPositionWithOffset(lastVisible, 0) + } else { + ToolsHelper.showMessage("没有下一页了") + } + } + } + + override fun onResume() { + super.onResume() + OfflineCmdServiceHelper.addOnLineListener(offlineCmdListener) + } + + override fun onPause() { + super.onPause() + OfflineCmdServiceHelper.removeOnLineListener(offlineCmdListener) + } + private val adapter = object : CommonPagedAdapter(R.layout.item_task_list) { override fun convert(holder: ViewHolder, item: TaskItem, position: Int) { holder diff --git a/app/src/main/java/com/nova/brain/glass/ui/WelcomeActivity.kt b/app/src/main/java/com/nova/brain/glass/ui/WelcomeActivity.kt index 50df6af..0215777 100644 --- a/app/src/main/java/com/nova/brain/glass/ui/WelcomeActivity.kt +++ b/app/src/main/java/com/nova/brain/glass/ui/WelcomeActivity.kt @@ -2,14 +2,11 @@ package com.nova.brain.glass.ui import android.content.Intent import android.os.Bundle -import android.util.Log import com.nova.brain.glass.R import com.nova.brain.glass.databinding.ActivityWelcomeBinding import com.nova.brain.glass.helper.OfflineCmdListener import com.nova.brain.glass.helper.OfflineCmdServiceHelper -import com.rokid.security.glass3.open.sdk.GlassSdk -import com.rokid.security.glass3.sdk.base.data.offlineCmd.bean.VoiceAction -import com.rokid.security.glass3.sdk.base.data.offlineCmd.listener.IVoiceCallback +import com.xuqm.base.common.LogHelper import com.xuqm.base.ui.BaseActivity import java.util.Timer import kotlin.concurrent.schedule @@ -21,20 +18,32 @@ class WelcomeActivity : BaseActivity() { override fun initView(savedInstanceState: Bundle?) { super.initView(savedInstanceState) - OfflineCmdServiceHelper.setOnLineListener(object : OfflineCmdListener { - override fun onOfflineCmd(cmd: String) { - when (cmd) { - "任务列表", "查看任务", "查看任务列表" -> { - startActivity(Intent(this@WelcomeActivity, TaskListActivity::class.java)) - } - } - } - }) - Timer().schedule(3000) { - startActivity(Intent(this@WelcomeActivity, MainActivity::class.java)) + binding.tv.setOnClickListener { + startActivity(Intent(this@WelcomeActivity, TaskListActivity::class.java)) } } + private val offlineCmdListener = object : OfflineCmdListener { + override fun onOfflineCmd(cmd: String) { + when (cmd) { + "任务列表", "查看任务", "查看任务列表" -> { + startActivity(Intent(this@WelcomeActivity, TaskListActivity::class.java)) + } + } + } + } + + override fun onResume() { + super.onResume() + LogHelper.d(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>") + OfflineCmdServiceHelper.addOnLineListener(offlineCmdListener) + } + + override fun onPause() { + super.onPause() + LogHelper.d("---------------------------") + OfflineCmdServiceHelper.removeOnLineListener(offlineCmdListener) + } } \ No newline at end of file diff --git a/app/src/main/res/layout/activity_task_list.xml b/app/src/main/res/layout/activity_task_list.xml index e26c4b9..b727de0 100644 --- a/app/src/main/res/layout/activity_task_list.xml +++ b/app/src/main/res/layout/activity_task_list.xml @@ -42,6 +42,7 @@