refactor(offlineCmd): 重构离线命令服务监听器管理

- 将单个监听器改为监听器列表支持多实例注册
- 添加 addOnLineListener 和 removeOnLineListener 方法
- 在 TaskListActivity 中实现监听器的生命周期管理
- 移除无用的导入和变量声明
- 优化页面跳转和翻页逻辑的代码结构
- 在布局文件中添加必要的控件ID用于点击事件处理
这个提交包含在:
徐勤民 2026-04-14 14:28:54 +08:00
父节点 a574d23f07
当前提交 2c5878ab90
共有 5 个文件被更改,包括 96 次插入57 次删除

查看文件

@ -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<OfflineCmdListener>()
private val list = mutableListOf<OfflineCmdBean>().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)
}

查看文件

@ -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<TaskItem>(R.layout.item_task_list) {
override fun convert(holder: ViewHolder, item: TaskItem, position: Int) {
holder

查看文件

@ -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<ActivityWelcomeBinding>() {
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)
}
}

查看文件

@ -42,6 +42,7 @@
</androidx.swiperefreshlayout.widget.SwipeRefreshLayout>
<TextView
android:id="@+id/shang"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
@ -54,6 +55,7 @@
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/baseRefreshLayout" />
<TextView
android:id="@+id/xia"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"

查看文件

@ -5,6 +5,7 @@
android:background="@color/app_color_black"
android:layout_height="match_parent">
<TextView
android:id="@+id/tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@color/app_color_black"