[dev_arch_opt_3.0] 修正语音偶现不播报问题

This commit is contained in:
renwj
2023-03-21 19:55:46 +08:00
parent aa20488ad7
commit f40808ae8b

View File

@@ -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<Int> {
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)
}