fix(asr): 修复语音识别任务详情打开和过滤功能

- 修正了 goToTaskCenter 和 openTaskDetail 的 action 映射关系
- 添加了 IntentRecognizeHelper 中的请求日志记录
- 实现了 openTaskDetailWithFilter 动作的任务过滤功能
- 添加了 applyFilterAndRefresh 方法处理任务列表过滤
- 修复了空集合判断逻辑,使用 ifEmpty 替代 isEmpty 检查
- 更新了任务列表搜索参数传递机制
这个提交包含在:
徐勤民 2026-04-18 17:54:19 +08:00
父节点 2ef12e3b16
当前提交 5fec9c46ca
共有 4 个文件被更改,包括 35 次插入13 次删除

查看文件

@ -210,8 +210,8 @@ object AsrHelper : OfflineCmdListener {
onSuccess = { action -> onSuccess = { action ->
when (action.name) { when (action.name) {
"goToDecisionCenter" -> onGoToDecisionCenter?.invoke(action) "goToDecisionCenter" -> onGoToDecisionCenter?.invoke(action)
"goToTaskCenter","openTaskDetailWithFilter" -> onGoToTaskCenter?.invoke(action) "goToTaskCenter" -> onGoToTaskCenter?.invoke(action)
"openTaskDetail" -> onOpenTaskDetail?.invoke(action) "openTaskDetail", "openTaskDetailWithFilter" -> onOpenTaskDetail?.invoke(action)
else -> Log.d(TAG, "unhandled action: $action") else -> Log.d(TAG, "unhandled action: $action")
} }
}, },

查看文件

@ -6,6 +6,7 @@ import com.nova.brain.glass.helper.IntentRecognizeHelper.recognize
import com.nova.brain.glass.model.RecognizeAction import com.nova.brain.glass.model.RecognizeAction
import com.nova.brain.glass.model.data.RecognizeData import com.nova.brain.glass.model.data.RecognizeData
import com.nova.brain.glass.repository.Service import com.nova.brain.glass.repository.Service
import com.xuqm.base.common.LogHelper
import com.xuqm.base.di.manager.HttpManager import com.xuqm.base.di.manager.HttpManager
import com.xuqm.base.extensions.showMessage import com.xuqm.base.extensions.showMessage
import io.reactivex.android.schedulers.AndroidSchedulers import io.reactivex.android.schedulers.AndroidSchedulers
@ -40,8 +41,10 @@ object IntentRecognizeHelper {
onComplete: () -> Unit = {} onComplete: () -> Unit = {}
) { ) {
disposable?.dispose() disposable?.dispose()
val request = RecognizeData(text = text, scence = scence, extra = extra, actions = actions)
LogHelper.d("IntentRecognize request: $request")
disposable = HttpManager.getApi(MyApplication.appComponent1, Service::class.java) disposable = HttpManager.getApi(MyApplication.appComponent1, Service::class.java)
.recognize(RecognizeData(text = text, scence = scence, extra = extra, actions = actions)) .recognize(request)
.subscribeOn(Schedulers.io()) .subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread()) .observeOn(AndroidSchedulers.mainThread())
.subscribe({ model -> .subscribe({ model ->

查看文件

@ -10,6 +10,7 @@ import com.nova.brain.glass.databinding.ActivityTaskListBinding
import com.nova.brain.glass.helper.AsrHelper import com.nova.brain.glass.helper.AsrHelper
import com.nova.brain.glass.helper.OfflineCmdListener import com.nova.brain.glass.helper.OfflineCmdListener
import com.nova.brain.glass.helper.OfflineCmdServiceHelper import com.nova.brain.glass.helper.OfflineCmdServiceHelper
import com.nova.brain.glass.model.RecognizeAction
import com.nova.brain.glass.model.TaskItem import com.nova.brain.glass.model.TaskItem
import com.nova.brain.glass.model.data.TaskExtraItem import com.nova.brain.glass.model.data.TaskExtraItem
import com.nova.brain.glass.model.data.TaskListData import com.nova.brain.glass.model.data.TaskListData
@ -164,19 +165,23 @@ class TaskListActivity :
OfflineCmdServiceHelper.addOnLineListener(offlineCmdListener) OfflineCmdServiceHelper.addOnLineListener(offlineCmdListener)
AsrHelper.scene = "list" AsrHelper.scene = "list"
AsrHelper.extraProvider = { AsrHelper.extraProvider = {
if (visibleTaskExtras.isNotEmpty()) visibleTaskExtras else buildTaskExtra(viewModel.currentItems) visibleTaskExtras.ifEmpty { buildTaskExtra(viewModel.currentItems) }
} }
AsrHelper.onGoToDecisionCenter = { action -> AsrHelper.onGoToDecisionCenter = { action ->
Log.d("TaskListActivity", "recognize result: $action") Log.d("TaskListActivity", "recognize result: $action")
} }
AsrHelper.onOpenTaskDetail = { action -> AsrHelper.onOpenTaskDetail = { action ->
val taskId = action.params.taskId if (action.name == "openTaskDetailWithFilter") {
val item = if (taskId.isNullOrEmpty()) { applyFilterAndRefresh(action)
viewModel.currentItems.firstOrNull()
} else { } else {
viewModel.currentItems.firstOrNull { it.id == taskId } val taskId = action.params.taskId
val item = if (taskId.isNullOrEmpty()) {
viewModel.currentItems.firstOrNull()
} else {
viewModel.currentItems.firstOrNull { it.id == taskId }
}
item?.let { routeToTask(it) }
} }
item?.let { routeToTask(it) }
} }
} }
@ -226,6 +231,21 @@ class TaskListActivity :
private fun Map<String, String>.firstNotBlank(vararg keys: String): String = private fun Map<String, String>.firstNotBlank(vararg keys: String): String =
keys.firstNotNullOfOrNull { key -> this[key]?.takeIf { it.isNotBlank() } }.orEmpty() keys.firstNotNullOfOrNull { key -> this[key]?.takeIf { it.isNotBlank() } }.orEmpty()
private fun applyFilterAndRefresh(action: RecognizeAction) {
viewModel.searchParams = TaskListData(
taskType = action.params.taskType ?: "",
keyword = action.params.keyword ?: "",
dateRange = action.params.dateRange,
dateType = action.params.dateTpye ?: 0,
isOverdue = action.params.isOverdue ?: 2,
tenantId = action.params.tenantId ?: 1,
userId = action.params.userId ?: ""
)
pageStartPosition = 0
binding.baseRecyclerView.scrollToPosition(0)
viewModel.invalidate()
}
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) val displayPosition = (position - pageStartPosition + 1).coerceAtLeast(1)

查看文件

@ -24,8 +24,7 @@ class TaskListVM : BaseListViewModel<TaskItem>() {
override fun loadData(page: Int, onResponse: Response<TaskItem>) { override fun loadData(page: Int, onResponse: Response<TaskItem>) {
add( add(
HttpManager.getApi(Service::class.java) HttpManager.getApi(Service::class.java)
.glassesTaskSearch(TaskListData(taskType = "", keyword = "", dateRange = 15, dateType = 0, isOverdue = 2, userId = "rokid", tenantId = 1)) .glassesTaskSearch(searchParams)
// .glassesTaskSearch(searchParams)
.subscribeOn(Schedulers.io()) .subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread()) .observeOn(AndroidSchedulers.mainThread())
.subscribe({ response -> .subscribe({ response ->