diff --git a/app/src/main/java/com/nova/brain/glass/helper/AsrHelper.kt b/app/src/main/java/com/nova/brain/glass/helper/AsrHelper.kt index 34687a4..1c7271c 100644 --- a/app/src/main/java/com/nova/brain/glass/helper/AsrHelper.kt +++ b/app/src/main/java/com/nova/brain/glass/helper/AsrHelper.kt @@ -62,6 +62,9 @@ object AsrHelper : OfflineCmdListener { /** goToDecisionCenter 命中时的回调,由各 Activity 在 onResume/onPause 中注册/清空 */ var onGoToDecisionCenter: ((action: RecognizeAction) -> Unit)? = null + /** goToTaskCenter 命中时的回调,由各 Activity 在 onResume/onPause 中注册/清空 */ + var onGoToTaskCenter: ((action: RecognizeAction) -> Unit)? = null + /** scene == "decision" 时直接用 ASR 文本发起对话,由 ChatActivity 注册 */ var onDirectChat: ((text: String) -> Unit)? = null @@ -193,10 +196,10 @@ object AsrHelper : OfflineCmdListener { text = text, scence = scene, onSuccess = { action -> - if (action.name == "goToDecisionCenter") { - onGoToDecisionCenter?.invoke(action) - } else { - "需要跳转任务列表".showMessage() + when (action.name) { + "goToDecisionCenter" -> onGoToDecisionCenter?.invoke(action) + "goToTaskCenter" -> onGoToTaskCenter?.invoke(action) + else -> Log.d(TAG, "unhandled action: $action") } } ) diff --git a/app/src/main/java/com/nova/brain/glass/model/RecognizeModel.kt b/app/src/main/java/com/nova/brain/glass/model/RecognizeModel.kt index 008f553..ebb92c5 100644 --- a/app/src/main/java/com/nova/brain/glass/model/RecognizeModel.kt +++ b/app/src/main/java/com/nova/brain/glass/model/RecognizeModel.kt @@ -44,5 +44,13 @@ data class RecognizeAction( ) data class RecognizeParams( - val question: String, + val question: String? = null, + // goToTaskCenter params + val dateRange: Int? = null, + val dateTpye: Int? = null, + val isOverdue: Int? = null, + val keyword: String? = null, + val taskType: String? = null, + val tenantId: Int? = null, + val userId: String? = null, ) \ No newline at end of file diff --git a/app/src/main/java/com/nova/brain/glass/model/TaskItem.kt b/app/src/main/java/com/nova/brain/glass/model/TaskItem.kt index f2df5ca..d49079a 100644 --- a/app/src/main/java/com/nova/brain/glass/model/TaskItem.kt +++ b/app/src/main/java/com/nova/brain/glass/model/TaskItem.kt @@ -2,6 +2,12 @@ package com.nova.brain.glass.model import com.xuqm.base.adapter.BaseItem -data class TaskItem(val id: String): BaseItem() { +data class TaskItem( + val id: String, + val taskType: String = "", + val params: Map = emptyMap(), + val processStatus: String = "", + val aiDescription: String = "" +) : BaseItem() { var selected: Boolean = false } diff --git a/app/src/main/java/com/nova/brain/glass/repository/Service.kt b/app/src/main/java/com/nova/brain/glass/repository/Service.kt index 3014a65..5d98ff9 100644 --- a/app/src/main/java/com/nova/brain/glass/repository/Service.kt +++ b/app/src/main/java/com/nova/brain/glass/repository/Service.kt @@ -4,6 +4,7 @@ import com.nova.brain.glass.model.RecognizeModel import com.nova.brain.glass.model.data.ChatData import com.nova.brain.glass.model.data.RecognizeData import com.nova.brain.glass.model.data.TaskListData +import com.nova.brain.glass.model.TaskSearchResponse import com.nova.brain.glass.model.data.TopicData import com.nova.brain.glass.model.data.TopicModel import io.reactivex.Observable @@ -33,6 +34,6 @@ interface Service { fun tbtopic(@Body body: TopicData): Observable @POST("/cbrain-gateway/cbrain-task-server/cbrain-task/task/glassesTaskSearch") - fun glassesTaskSearch(@Body body: TaskListData): Observable + fun glassesTaskSearch(@Body body: TaskListData): Observable } \ No newline at end of file diff --git a/app/src/main/java/com/nova/brain/glass/ui/ChatActivity.kt b/app/src/main/java/com/nova/brain/glass/ui/ChatActivity.kt index 4646ae7..ed711ac 100644 --- a/app/src/main/java/com/nova/brain/glass/ui/ChatActivity.kt +++ b/app/src/main/java/com/nova/brain/glass/ui/ChatActivity.kt @@ -108,7 +108,7 @@ class ChatActivity : BaseListFormLayoutNormalActivity - viewModel.demoPostSse(action.params.question) + viewModel.demoPostSse(action.params.question!!) } AsrHelper.onDirectChat = { text -> viewModel.demoPostSse(text) 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 b2549f3..53b432d 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 @@ -9,6 +9,7 @@ import com.nova.brain.glass.databinding.ActivityTaskListBinding import com.nova.brain.glass.helper.OfflineCmdListener import com.nova.brain.glass.helper.OfflineCmdServiceHelper import com.nova.brain.glass.model.TaskItem +import com.nova.brain.glass.model.data.TaskListData import com.nova.brain.glass.viewmodel.TaskListVM import com.xuqm.base.adapter.BasePagedAdapter import com.xuqm.base.adapter.CommonPagedAdapter @@ -73,6 +74,19 @@ class TaskListActivity : } } + override fun initData() { + viewModel.searchParams = TaskListData( + taskType = intent.getStringExtra("taskType") ?: "", + keyword = intent.getStringExtra("keyword") ?: "", + dateRange = intent.getIntExtra("dateRange", 0), + dateType = intent.getIntExtra("dateType", 0), + isOverdue = intent.getIntExtra("isOverdue", 2), + tenantId = intent.getIntExtra("tenantId", 1), + userId = intent.getStringExtra("userId") ?: "" + ) + super.initData() + } + private val offlineCmdListener = object : OfflineCmdListener { override fun onOfflineCmd(cmd: String) { runOnUiThread { dispatchVoiceCmd(cmd) } @@ -182,10 +196,10 @@ class TaskListActivity : private val adapter = object : CommonPagedAdapter(R.layout.item_task_list) { override fun convert(holder: ViewHolder, item: TaskItem, position: Int) { val displayPosition = (position - pageStartPosition + 1).coerceAtLeast(1) + val title = "${displayPosition}. ${item.aiDescription}【${item.processStatus}】" holder - .setText(R.id.tv_title, "${displayPosition}.[$position]张三提交的出差预算申请审核任务,从上海到北京,3月23开始3月24结束,预算金额¥1800元。【已逾期】") - .setClickListener(R.id.tv_title - ) { + .setText(R.id.tv_title, title) + .setClickListener(R.id.tv_title) { openTask(position) } } 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 550ac33..22d906e 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 @@ -12,6 +12,7 @@ import com.nova.brain.glass.helper.AsrHelper import com.nova.brain.glass.helper.IntentRecognizeHelper import com.nova.brain.glass.helper.OfflineCmdListener import com.nova.brain.glass.helper.OfflineCmdServiceHelper +import com.nova.brain.glass.model.RecognizeParams import com.nova.brain.glass.viewmodel.WelcomeVM import com.xuqm.base.ui.BaseActivity @@ -59,13 +60,15 @@ class WelcomeActivity : BaseActivity() { IntentRecognizeHelper.recognize( text = "查看我的任务列表?", onSuccess = { action -> - if (action.name == "goToDecisionCenter") { - startActivity( + when (action.name) { + "goToDecisionCenter" -> startActivity( Intent(this, ChatActivity::class.java) .putExtra("question", action.params.question) ) - } else { - Log.d("WelcomeActivity", "triggerRecognize onSuccess: $action") + "goToTaskCenter" -> startActivity( + intentForTaskList(action.params) + ) + else -> Log.d("WelcomeActivity", "triggerRecognize onSuccess: $action") } }, onComplete = { @@ -101,14 +104,29 @@ class WelcomeActivity : BaseActivity() { .putExtra("question", action.params.question) ) } + AsrHelper.onGoToTaskCenter = { action -> + startActivity(intentForTaskList(action.params)) + } } + private fun intentForTaskList(params: RecognizeParams) = + Intent(this, TaskListActivity::class.java).apply { + putExtra("taskType", params.taskType ?: "") + putExtra("keyword", params.keyword ?: "") + putExtra("dateRange", params.dateRange ?: 0) + putExtra("dateType", params.dateTpye ?: 0) + putExtra("isOverdue", params.isOverdue ?: 2) + putExtra("tenantId", params.tenantId ?: 1) + putExtra("userId", params.userId ?: "") + } + override fun onPause() { super.onPause() OfflineCmdServiceHelper.removeOnLineListener(offlineCmdListener) OfflineCmdServiceHelper.removeListenerWelcome() dotsHandler.removeCallbacks(dotsRunnable) AsrHelper.onGoToDecisionCenter = null + AsrHelper.onGoToTaskCenter = null } override fun onDestroy() { diff --git a/app/src/main/java/com/nova/brain/glass/viewmodel/TaskListVM.kt b/app/src/main/java/com/nova/brain/glass/viewmodel/TaskListVM.kt index 936a386..69a84ea 100644 --- a/app/src/main/java/com/nova/brain/glass/viewmodel/TaskListVM.kt +++ b/app/src/main/java/com/nova/brain/glass/viewmodel/TaskListVM.kt @@ -1,18 +1,40 @@ package com.nova.brain.glass.viewmodel +import com.nova.brain.glass.MyApplication import com.nova.brain.glass.model.TaskItem +import com.nova.brain.glass.model.data.TaskListData +import com.nova.brain.glass.repository.Service +import com.xuqm.base.di.manager.HttpManager import com.xuqm.base.viewmodel.BaseListViewModel import com.xuqm.base.viewmodel.callback.Response +import io.reactivex.android.schedulers.AndroidSchedulers +import io.reactivex.schedulers.Schedulers -class TaskListVM: BaseListViewModel() { - override fun loadData( - page: Int, - onResponse: Response - ) { - onResponse.onResponse(arrayListOf().apply { - for (i in 0..10) { - add(TaskItem(i.toString())) - } - }) +class TaskListVM : BaseListViewModel() { + + var searchParams: TaskListData = + TaskListData(taskType = "", keyword = "", dateRange = 0, dateType = 0) + + override fun loadData(page: Int, onResponse: Response) { + add( + HttpManager.getApi(MyApplication.appComponent1, Service::class.java) + .glassesTaskSearch(searchParams) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe({ response -> + val items = response.data?.list?.map { + TaskItem( + id = it.id, + taskType = it.taskType, + params = it.params, + processStatus = it.processStatus, + aiDescription = it.aiDescription + ) + } ?: emptyList() + onResponse.onResponse(ArrayList(items)) + }, { + onResponse.onResponse(arrayListOf()) + }) + ) } } \ No newline at end of file