feat(task): 添加语音指令快速访问可见任务功能

- 实现通过语音命令直接跳转到指定位置的任务
- 支持前10条任务的语音快捷操作(查看、打开、处理)
- 添加openVisibleTask方法用于计算当前可视区域内目标任务位置
- 添加openTask方法统一处理不同任务类型的页面跳转逻辑
- 重构适配器点击事件,复用openTask方法减少代码重复
- 完善边界检查避免超出可视区域或任务列表范围的错误访问
这个提交包含在:
徐勤民 2026-04-14 16:57:37 +08:00
父节点 2c891e177f
当前提交 ac8f236668

查看文件

@ -58,7 +58,34 @@ class TaskListActivity :
toPre() toPre()
} }
"查看第一条任务", "查看第一项任务", "打开第一条任务","打开第一项任务", "处理第一条任务", "处理第一项任务" -> { "查看第一条任务", "查看第一项任务", "打开第一条任务","打开第一项任务", "处理第一条任务", "处理第一项任务" -> {
toPre() openVisibleTask(0)
}
"查看第二条任务", "查看第二项任务", "打开第二条任务", "打开第二项任务", "处理第二条任务", "处理第二项任务" -> {
openVisibleTask(1)
}
"查看第三条任务", "查看第三项任务", "打开第三条任务", "打开第三项任务", "处理第三条任务", "处理第三项任务" -> {
openVisibleTask(2)
}
"查看第四条任务", "查看第四项任务", "打开第四条任务", "打开第四项任务", "处理第四条任务", "处理第四项任务" -> {
openVisibleTask(3)
}
"查看第五条任务", "查看第五项任务", "打开第五条任务", "打开第五项任务", "处理第五条任务", "处理第五项任务" -> {
openVisibleTask(4)
}
"查看第六条任务", "查看第六项任务", "打开第六条任务", "打开第六项任务", "处理第六条任务", "处理第六项任务" -> {
openVisibleTask(5)
}
"查看第七条任务", "查看第七项任务", "打开第七条任务", "打开第七项任务", "处理第七条任务", "处理第七项任务" -> {
openVisibleTask(6)
}
"查看第八条任务", "查看第八项任务", "打开第八条任务", "打开第八项任务", "处理第八条任务", "处理第八项任务" -> {
openVisibleTask(7)
}
"查看第九条任务", "查看第九项任务", "打开第九条任务", "打开第九项任务", "处理第九条任务", "处理第九项任务" -> {
openVisibleTask(8)
}
"查看第十条任务", "查看第十项任务", "打开第十条任务", "打开第十项任务", "处理第十条任务", "处理第十项任务" -> {
openVisibleTask(9)
} }
} }
} }
@ -105,6 +132,29 @@ class TaskListActivity :
adapter.notifyDataSetChanged() adapter.notifyDataSetChanged()
} }
private fun openVisibleTask(offset: Int) {
val layoutManager = binding.baseRecyclerView.layoutManager as? LinearLayoutManager ?: return
val firstVisible = layoutManager.findFirstVisibleItemPosition()
if (firstVisible == RecyclerView.NO_POSITION) {
return
}
val targetPosition = firstVisible + offset
val lastVisible = layoutManager.findLastVisibleItemPosition()
if (targetPosition > lastVisible || targetPosition >= adapter.itemCount) {
return
}
openTask(targetPosition)
}
private fun openTask(position: Int) {
when (position % 4) {
0 -> startActivity(Intent(this@TaskListActivity, FoActivity::class.java))
1 -> startActivity(Intent(this@TaskListActivity, ReviewActivity::class.java))
2 -> startActivity(Intent(this@TaskListActivity, ReviewActivity::class.java))
3 -> startActivity(Intent(this@TaskListActivity, ReviewActivity::class.java))
}
}
override fun onResume() { override fun onResume() {
super.onResume() super.onResume()
OfflineCmdServiceHelper.addOnLineListener(offlineCmdListener) OfflineCmdServiceHelper.addOnLineListener(offlineCmdListener)
@ -122,20 +172,7 @@ class TaskListActivity :
.setText(R.id.tv_title, "${displayPosition}.张三提交的出差预算申请审核任务,从上海到北京,3月23开始3月24结束,预算金额¥1800元。【已逾期】") .setText(R.id.tv_title, "${displayPosition}.张三提交的出差预算申请审核任务,从上海到北京,3月23开始3月24结束,预算金额¥1800元。【已逾期】")
.setClickListener(R.id.tv_title .setClickListener(R.id.tv_title
) { ) {
when(position%4){ openTask(position)
0 -> {
startActivity(Intent(this@TaskListActivity, FoActivity::class.java))
}
1 -> {
startActivity(Intent(this@TaskListActivity, ReviewActivity::class.java))
}
2 -> {
startActivity(Intent(this@TaskListActivity, ReviewActivity::class.java))
}
3 -> {
startActivity(Intent(this@TaskListActivity, ReviewActivity::class.java))
}
}
} }
} }
} }