diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/MoGoHmiProvider.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/MoGoHmiProvider.kt index 6324592174..8d5ad1002c 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/MoGoHmiProvider.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/MoGoHmiProvider.kt @@ -2,6 +2,7 @@ package com.mogo.eagle.core.function.hmi.ui import android.content.Context import android.text.TextUtils +import android.util.* import android.view.ViewGroup import androidx.lifecycle.ProcessLifecycleOwner import androidx.lifecycle.lifecycleScope @@ -42,6 +43,7 @@ import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_ import com.mogo.eagle.core.utilcode.util.ThreadUtils import com.zhjt.service_biz.BizConfig import kotlinx.coroutines.* +import kotlinx.coroutines.selects.* import java.util.concurrent.atomic.AtomicReference /** @@ -60,6 +62,8 @@ class MoGoHmiProvider : IMoGoHmiProvider { private var lastShowV2XJob: Job? = null private var context: Context? = null + private val scope by lazy { CoroutineScope(Dispatchers.Default + SupervisorJob()) } + override fun init(context: Context?) { this.context = context } @@ -137,13 +141,37 @@ class MoGoHmiProvider : IMoGoHmiProvider { CallerV2XWarningListenerManager.dismiss() } + Log.d("CODE", "---- 00 ------ tts_content: $ttsContent") if (ttsContent != null && !TextUtils.isEmpty(ttsContent) && playTTS) { val last = lastSpeakJob.get() - if (last != null && !last.isCompleted) { + Log.d("CODE", "---- 0 ------: last: $last") + if (last != null && !last.isCompleted) { + Log.d("CODE", "---- 1 ------") return } - ProcessLifecycleOwner.get().lifecycleScope.launch(Dispatchers.Main) { - speak(it, ttsContent) + scope.launch { + Log.d("CODE", "---- 2 ------") + val d1 = async { + Log.d("CODE", "---- 2_1 start ------") + speak(it, ttsContent) + Log.d("CODE", "---- 2_1 end ------") + } + val d2 = async { + Log.d("CODE", "---- 2_2 start ------") + delay((305.75 * ttsContent.length).toLong()) + Log.d("CODE", "---- 2_2 end ------") + } + val ret = select { + d1.onAwait { 1 } + d2.onAwait { 2 } + } + if (ret == 1) { + d2.cancel() + Log.d("CODE", "---- 3 ------") + } else { + d1.cancel() + Log.d("CODE", "---- 4 ------") + } }.also { itx -> lastSpeakJob.set(itx) }