| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 |
- package com.nova.brain.glass.helper
- import android.content.Context
- import android.widget.Toast
- import com.nova.brain.glass.helper.IntentRecognizeHelper.dispose
- import com.nova.brain.glass.helper.IntentRecognizeHelper.recognize
- import com.nova.brain.glass.model.RecognizeAction
- import com.nova.brain.glass.model.data.RecognizeData
- import com.nova.brain.glass.repository.HeaderInterceptor
- import com.nova.brain.glass.repository.Service
- import com.rokid.utils.ContextUtil.getApplicationContext
- import com.xuqm.base.di.manager.HttpManager
- import io.reactivex.android.schedulers.AndroidSchedulers
- import io.reactivex.disposables.Disposable
- import io.reactivex.schedulers.Schedulers
- /**
- * 意图识别全局工具。
- *
- * - [recognize] 发起识别请求;自动轮换内置问题作为 text(非 Welcome 页调用)。
- * - [dispose] 在页面销毁时调用,取消进行中的请求。
- */
- object IntentRecognizeHelper {
- private val builtInQuestions = listOf(
- "C大脑V2.24版本进行到什么阶段了",
- "我的任务有哪些",
- "个人任务系统功能的需求来自哪个项目",
- "浙江华瑞项目有哪些进行中的采购流程"
- )
- private var questionIndex = 0
- private var disposable: Disposable? = null
- private val baseUrl: String = "https://22v1322u01.vicp.fun"
- /**
- * @param context 用于显示 Toast
- * @param text 指定问题文本;为 null 时自动轮换内置问题
- * @param scence 场景标识,默认 "home"
- * @param onSuccess 识别成功且 code=="0" 时回调,参数为 [RecognizeAction]
- */
- fun recognize(
- context: Context,
- text: String? = null,
- scence: String = "home",
- onSuccess: (action: RecognizeAction) -> Unit
- ) {
- disposable?.dispose()
- val question = text ?: nextQuestion()
- disposable = HttpManager.getApi(
- HttpManager.getAppComponent(
- baseUrl,
- HeaderInterceptor(getApplicationContext())
- ), Service::class.java)
- .recognize(RecognizeData(text = question, scence = scence))
- .subscribeOn(Schedulers.io())
- .observeOn(AndroidSchedulers.mainThread())
- .subscribe({ model ->
- if (model.code == "0") {
- onSuccess(model.data.action)
- } else {
- Toast.makeText(context, model.data.error, Toast.LENGTH_SHORT).show()
- }
- }, { e ->
- Toast.makeText(context, "请求失败: ${e.message}", Toast.LENGTH_SHORT).show()
- })
- }
- fun dispose() {
- disposable?.dispose()
- disposable = null
- }
- private fun nextQuestion(): String {
- val q = builtInQuestions[questionIndex % builtInQuestions.size]
- questionIndex++
- return q
- }
- }
|