feat(glass): 添加离线语音命令支持和任务列表页面功能
- 在离线命令服务中添加首页和任务列表分类注释 - 增加1-10条/项任务的查看、打开、处理命令支持 - 添加RecyclerView滚动监听以支持页面位置跟踪 - 实现可见项目顺序刷新功能 - 添加页面起始位置管理逻辑 - 在适配器中显示基于页面的序号而非全局序号 - 为第一条任务相关命令添加向上一页跳转功能 - 优化页面切换时的UI刷新机制
这个提交包含在:
父节点
b618515d96
当前提交
2c891e177f
@ -11,9 +11,11 @@ object OfflineCmdServiceHelper {
|
|||||||
private var listenerList = mutableListOf<OfflineCmdListener>()
|
private var listenerList = mutableListOf<OfflineCmdListener>()
|
||||||
|
|
||||||
private val list = mutableListOf<OfflineCmdBean>().apply {
|
private val list = mutableListOf<OfflineCmdBean>().apply {
|
||||||
|
// 首页
|
||||||
add(OfflineCmdBean("任务列表", "ren wu lie biao"))
|
add(OfflineCmdBean("任务列表", "ren wu lie biao"))
|
||||||
add(OfflineCmdBean("查看任务", "cha kan ren wu"))
|
add(OfflineCmdBean("查看任务", "cha kan ren wu"))
|
||||||
add(OfflineCmdBean("查看任务列表", "cha kan ren wu lie biao"))
|
add(OfflineCmdBean("查看任务列表", "cha kan ren wu lie biao"))
|
||||||
|
// 任务列表
|
||||||
add(OfflineCmdBean("下一页", "xia yi ye"))
|
add(OfflineCmdBean("下一页", "xia yi ye"))
|
||||||
add(OfflineCmdBean("翻页", "fan ye"))
|
add(OfflineCmdBean("翻页", "fan ye"))
|
||||||
add(OfflineCmdBean("查看下一页", "cha kan xia yi ye"))
|
add(OfflineCmdBean("查看下一页", "cha kan xia yi ye"))
|
||||||
@ -22,14 +24,85 @@ object OfflineCmdServiceHelper {
|
|||||||
add(OfflineCmdBean("上一页", "shang yi ye"))
|
add(OfflineCmdBean("上一页", "shang yi ye"))
|
||||||
add(OfflineCmdBean("查看上一页", "cha kan shang yi ye"))
|
add(OfflineCmdBean("查看上一页", "cha kan shang yi ye"))
|
||||||
add(OfflineCmdBean("继续上一页", "ji xu shang yi ye"))
|
add(OfflineCmdBean("继续上一页", "ji xu shang yi ye"))
|
||||||
|
|
||||||
add(OfflineCmdBean("退出", "tui chu"))
|
add(OfflineCmdBean("退出", "tui chu"))
|
||||||
add(OfflineCmdBean("返回", "fan hui"))
|
add(OfflineCmdBean("返回", "fan hui"))
|
||||||
add(OfflineCmdBean("退回", "tui hui"))
|
add(OfflineCmdBean("退回", "tui hui"))
|
||||||
|
|
||||||
add(OfflineCmdBean("同意", "tong yi"))
|
add(OfflineCmdBean("同意", "tong yi"))
|
||||||
add(OfflineCmdBean("驳回", "bo hui"))
|
add(OfflineCmdBean("驳回", "bo hui"))
|
||||||
add(OfflineCmdBean("不同意", "bu tong yi"))
|
add(OfflineCmdBean("不同意", "bu tong yi"))
|
||||||
add(OfflineCmdBean("拒绝", "ju jue"))
|
add(OfflineCmdBean("拒绝", "ju jue"))
|
||||||
add(OfflineCmdBean("通过", "tong guo"))
|
add(OfflineCmdBean("通过", "tong guo"))
|
||||||
|
|
||||||
|
add(OfflineCmdBean("查看第一条任务", "cha kan di yi tiao ren wu"))
|
||||||
|
add(OfflineCmdBean("查看第一项任务", "cha kan di yi xiang ren wu"))
|
||||||
|
add(OfflineCmdBean("打开第一条任务", "da kai di yi tiao ren wu"))
|
||||||
|
add(OfflineCmdBean("打开第一项任务", "da kai di yi xiang ren wu"))
|
||||||
|
add(OfflineCmdBean("处理第一条任务", "chu li di yi tiao ren wu"))
|
||||||
|
add(OfflineCmdBean("处理第一项任务", "chu li di yi xiang ren wu"))
|
||||||
|
add(OfflineCmdBean("查看第二条任务", "cha kan di er tiao ren wu"))
|
||||||
|
add(OfflineCmdBean("查看第二项任务", "cha kan di er xiang ren wu"))
|
||||||
|
add(OfflineCmdBean("打开第二条任务", "da kai di er tiao ren wu"))
|
||||||
|
add(OfflineCmdBean("打开第二项任务", "da kai di er xiang ren wu"))
|
||||||
|
add(OfflineCmdBean("处理第二条任务", "chu li di er tiao ren wu"))
|
||||||
|
add(OfflineCmdBean("处理第二项任务", "chu li di er xiang ren wu"))
|
||||||
|
|
||||||
|
add(OfflineCmdBean("查看第三条任务", "cha kan di san tiao ren wu"))
|
||||||
|
add(OfflineCmdBean("查看第三项任务", "cha kan di san xiang ren wu"))
|
||||||
|
add(OfflineCmdBean("打开第三条任务", "da kai di san tiao ren wu"))
|
||||||
|
add(OfflineCmdBean("打开第三项任务", "da kai di san xiang ren wu"))
|
||||||
|
add(OfflineCmdBean("处理第三条任务", "chu li di san tiao ren wu"))
|
||||||
|
add(OfflineCmdBean("处理第三项任务", "chu li di san xiang ren wu"))
|
||||||
|
|
||||||
|
add(OfflineCmdBean("查看第四条任务", "cha kan di si tiao ren wu"))
|
||||||
|
add(OfflineCmdBean("查看第四项任务", "cha kan di si xiang ren wu"))
|
||||||
|
add(OfflineCmdBean("打开第四条任务", "da kai di si tiao ren wu"))
|
||||||
|
add(OfflineCmdBean("打开第四项任务", "da kai di si xiang ren wu"))
|
||||||
|
add(OfflineCmdBean("处理第四条任务", "chu li di si tiao ren wu"))
|
||||||
|
add(OfflineCmdBean("处理第四项任务", "chu li di si xiang ren wu"))
|
||||||
|
|
||||||
|
add(OfflineCmdBean("查看第五条任务", "cha kan di wu tiao ren wu"))
|
||||||
|
add(OfflineCmdBean("查看第五项任务", "cha kan di wu xiang ren wu"))
|
||||||
|
add(OfflineCmdBean("打开第五条任务", "da kai di wu tiao ren wu"))
|
||||||
|
add(OfflineCmdBean("打开第五项任务", "da kai di wu xiang ren wu"))
|
||||||
|
add(OfflineCmdBean("处理第五条任务", "chu li di wu tiao ren wu"))
|
||||||
|
add(OfflineCmdBean("处理第五项任务", "chu li di wu xiang ren wu"))
|
||||||
|
|
||||||
|
add(OfflineCmdBean("查看第六条任务", "cha kan di liu tiao ren wu"))
|
||||||
|
add(OfflineCmdBean("查看第六项任务", "cha kan di liu xiang ren wu"))
|
||||||
|
add(OfflineCmdBean("打开第六条任务", "da kai di liu tiao ren wu"))
|
||||||
|
add(OfflineCmdBean("打开第六项任务", "da kai di liu xiang ren wu"))
|
||||||
|
add(OfflineCmdBean("处理第六条任务", "chu li di liu tiao ren wu"))
|
||||||
|
add(OfflineCmdBean("处理第六项任务", "chu li di liu xiang ren wu"))
|
||||||
|
|
||||||
|
add(OfflineCmdBean("查看第七条任务", "cha kan di qi tiao ren wu"))
|
||||||
|
add(OfflineCmdBean("查看第七项任务", "cha kan di qi xiang ren wu"))
|
||||||
|
add(OfflineCmdBean("打开第七条任务", "da kai di qi tiao ren wu"))
|
||||||
|
add(OfflineCmdBean("打开第七项任务", "da kai di qi xiang ren wu"))
|
||||||
|
add(OfflineCmdBean("处理第七条任务", "chu li di qi tiao ren wu"))
|
||||||
|
add(OfflineCmdBean("处理第七项任务", "chu li di qi xiang ren wu"))
|
||||||
|
|
||||||
|
add(OfflineCmdBean("查看第八条任务", "cha kan di ba tiao ren wu"))
|
||||||
|
add(OfflineCmdBean("查看第八项任务", "cha kan di ba xiang ren wu"))
|
||||||
|
add(OfflineCmdBean("打开第八条任务", "da kai di ba tiao ren wu"))
|
||||||
|
add(OfflineCmdBean("打开第八项任务", "da kai di ba xiang ren wu"))
|
||||||
|
add(OfflineCmdBean("处理第八条任务", "chu li di ba tiao ren wu"))
|
||||||
|
add(OfflineCmdBean("处理第八项任务", "chu li di ba xiang ren wu"))
|
||||||
|
|
||||||
|
add(OfflineCmdBean("查看第九条任务", "cha kan di jiu tiao ren wu"))
|
||||||
|
add(OfflineCmdBean("查看第九项任务", "cha kan di jiu xiang ren wu"))
|
||||||
|
add(OfflineCmdBean("打开第九条任务", "da kai di jiu tiao ren wu"))
|
||||||
|
add(OfflineCmdBean("打开第九项任务", "da kai di jiu xiang ren wu"))
|
||||||
|
add(OfflineCmdBean("处理第九条任务", "chu li di jiu tiao ren wu"))
|
||||||
|
add(OfflineCmdBean("处理第九项任务", "chu li di jiu xiang ren wu"))
|
||||||
|
|
||||||
|
add(OfflineCmdBean("查看第十条任务", "cha kan di shi tiao ren wu"))
|
||||||
|
add(OfflineCmdBean("查看第十项任务", "cha kan di shi xiang ren wu"))
|
||||||
|
add(OfflineCmdBean("打开第十条任务", "da kai di shi tiao ren wu"))
|
||||||
|
add(OfflineCmdBean("打开第十项任务", "da kai di shi xiang ren wu"))
|
||||||
|
add(OfflineCmdBean("处理第十条任务", "chu li di shi tiao ren wu"))
|
||||||
|
add(OfflineCmdBean("处理第十项任务", "chu li di shi xiang ren wu"))
|
||||||
}
|
}
|
||||||
fun init(){
|
fun init(){
|
||||||
val service = GlassSdk.getGlassOfflineCmdService()
|
val service = GlassSdk.getGlassOfflineCmdService()
|
||||||
|
|||||||
@ -2,6 +2,7 @@ package com.nova.brain.glass.ui
|
|||||||
|
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
|
import androidx.recyclerview.widget.RecyclerView
|
||||||
import androidx.recyclerview.widget.LinearLayoutManager
|
import androidx.recyclerview.widget.LinearLayoutManager
|
||||||
import com.nova.brain.glass.R
|
import com.nova.brain.glass.R
|
||||||
import com.nova.brain.glass.databinding.ActivityTaskListBinding
|
import com.nova.brain.glass.databinding.ActivityTaskListBinding
|
||||||
@ -21,10 +22,21 @@ class TaskListActivity :
|
|||||||
BaseListFormLayoutActivity<TaskItem, TaskListVM, ActivityTaskListBinding>() {
|
BaseListFormLayoutActivity<TaskItem, TaskListVM, ActivityTaskListBinding>() {
|
||||||
override fun getLayoutId(): Int = R.layout.activity_task_list
|
override fun getLayoutId(): Int = R.layout.activity_task_list
|
||||||
override fun fullscreen(): Boolean = true
|
override fun fullscreen(): Boolean = true
|
||||||
|
private var pageStartPosition = 0
|
||||||
|
|
||||||
override fun initView(savedInstanceState: Bundle?) {
|
override fun initView(savedInstanceState: Bundle?) {
|
||||||
super.initView(savedInstanceState)
|
super.initView(savedInstanceState)
|
||||||
window.addFlags(android.view.WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)
|
window.addFlags(android.view.WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)
|
||||||
|
binding.baseRecyclerView.addOnScrollListener(object : RecyclerView.OnScrollListener() {
|
||||||
|
override fun onScrollStateChanged(recyclerView: RecyclerView, newState: Int) {
|
||||||
|
if (newState == RecyclerView.SCROLL_STATE_IDLE) {
|
||||||
|
refreshVisibleOrder()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
binding.baseRecyclerView.post {
|
||||||
|
refreshVisibleOrder()
|
||||||
|
}
|
||||||
|
|
||||||
binding.xia.setOnClickListener {
|
binding.xia.setOnClickListener {
|
||||||
toNext()
|
toNext()
|
||||||
@ -45,6 +57,9 @@ class TaskListActivity :
|
|||||||
"上一页", "查看上一页", "继续上一页" -> {
|
"上一页", "查看上一页", "继续上一页" -> {
|
||||||
toPre()
|
toPre()
|
||||||
}
|
}
|
||||||
|
"查看第一条任务", "查看第一项任务", "打开第一条任务","打开第一项任务", "处理第一条任务", "处理第一项任务" -> {
|
||||||
|
toPre()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -59,6 +74,7 @@ class TaskListActivity :
|
|||||||
val pageSize = (lastVisible - firstVisible).coerceAtLeast(1)
|
val pageSize = (lastVisible - firstVisible).coerceAtLeast(1)
|
||||||
val previousPosition = (firstVisible - pageSize).coerceAtLeast(0)
|
val previousPosition = (firstVisible - pageSize).coerceAtLeast(0)
|
||||||
layoutManager.scrollToPositionWithOffset(previousPosition, 0)
|
layoutManager.scrollToPositionWithOffset(previousPosition, 0)
|
||||||
|
binding.baseRecyclerView.post { refreshVisibleOrder() }
|
||||||
} else {
|
} else {
|
||||||
ToolsHelper.showMessage("没有上一页了")
|
ToolsHelper.showMessage("没有上一页了")
|
||||||
}
|
}
|
||||||
@ -72,12 +88,23 @@ class TaskListActivity :
|
|||||||
val nextPosition = lastVisible + 1
|
val nextPosition = lastVisible + 1
|
||||||
if (nextPosition < adapter.itemCount) {
|
if (nextPosition < adapter.itemCount) {
|
||||||
layoutManager.scrollToPositionWithOffset(nextPosition, 0)
|
layoutManager.scrollToPositionWithOffset(nextPosition, 0)
|
||||||
|
binding.baseRecyclerView.post { refreshVisibleOrder() }
|
||||||
} else {
|
} else {
|
||||||
ToolsHelper.showMessage("没有下一页了")
|
ToolsHelper.showMessage("没有下一页了")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun refreshVisibleOrder() {
|
||||||
|
val layoutManager = binding.baseRecyclerView.layoutManager as? LinearLayoutManager ?: return
|
||||||
|
val firstVisible = layoutManager.findFirstVisibleItemPosition()
|
||||||
|
if (firstVisible == RecyclerView.NO_POSITION || firstVisible == pageStartPosition) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
pageStartPosition = firstVisible
|
||||||
|
adapter.notifyDataSetChanged()
|
||||||
|
}
|
||||||
|
|
||||||
override fun onResume() {
|
override fun onResume() {
|
||||||
super.onResume()
|
super.onResume()
|
||||||
OfflineCmdServiceHelper.addOnLineListener(offlineCmdListener)
|
OfflineCmdServiceHelper.addOnLineListener(offlineCmdListener)
|
||||||
@ -90,8 +117,9 @@ class TaskListActivity :
|
|||||||
|
|
||||||
private val adapter = object : CommonPagedAdapter<TaskItem>(R.layout.item_task_list) {
|
private val adapter = object : CommonPagedAdapter<TaskItem>(R.layout.item_task_list) {
|
||||||
override fun convert(holder: ViewHolder, item: TaskItem, position: Int) {
|
override fun convert(holder: ViewHolder, item: TaskItem, position: Int) {
|
||||||
|
val displayPosition = (position - pageStartPosition + 1).coerceAtLeast(1)
|
||||||
holder
|
holder
|
||||||
.setText(R.id.tv_title, "${position}.张三提交的出差预算申请审核任务,从上海到北京,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){
|
when(position%4){
|
||||||
|
|||||||
正在加载...
在新工单中引用
屏蔽一个用户