From 9e996b61cf8eaf861f330308fdcf1dda959175c3 Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 25 Sep 2020 12:05:29 +0800 Subject: [PATCH 1/2] update callchat --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 759e45f8cb..3ba961db6d 100644 --- a/gradle.properties +++ b/gradle.properties @@ -101,7 +101,7 @@ CRASHREPORT_NOOP_VERSION=2.0.0 ######## 外部依赖引用 # 车聊聊 -CARCHATTING_VERSION=1.7.3 +CARCHATTING_VERSION=1.7.4 # 车聊聊接口 CARCHATTINGPROVIDER_VERSION=1.4.1 # loglib From afc6a3591ac24a57e459e1f6a2d4ec87963cb969 Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 25 Sep 2020 18:06:54 +0800 Subject: [PATCH 2/2] update voice to 1.0.8.4 --- config.gradle | 2 +- .../java/com/mogo/commons/voice/AIAssist.java | 8 ++++++++ gradle.properties | 2 +- .../module/guide/guide/GuideStageFiveFragment.kt | 2 ++ .../module/guide/guide/GuideStageFourFragment.kt | 2 ++ .../module/guide/guide/GuideStageOneFragment.kt | 2 ++ .../guide/guide/GuideStageThreeFragment.kt | 2 ++ .../module/guide/guide/GuideStageTwoFragment.kt | 2 ++ .../java/com/mogo/module/guide/util/VoiceUtil.kt | 4 ++++ .../module_callchatting_user_close_light.png | Bin 0 -> 1711 bytes .../module_callchatting_user_close_light.png | Bin 0 -> 1711 bytes .../module_callchatting_user_close_light.png | Bin 0 -> 3263 bytes 12 files changed, 24 insertions(+), 2 deletions(-) create mode 100644 skin/mogo-skin-light/src/main/module-callchat-res/mipmap-ldpi/module_callchatting_user_close_light.png create mode 100644 skin/mogo-skin-light/src/main/module-callchat-res/mipmap-mdpi/module_callchatting_user_close_light.png create mode 100644 skin/mogo-skin-light/src/main/module-callchat-res/mipmap-xhdpi/module_callchatting_user_close_light.png diff --git a/config.gradle b/config.gradle index ce651c5fef..f5467e9b17 100644 --- a/config.gradle +++ b/config.gradle @@ -58,7 +58,7 @@ targetSdkVersion : 22, // fresco fresco : 'com.facebook.fresco:fresco:1.1.0', // 公司服务 - 语音 - aiassist : "com.zhidaoauto.common:service:1.0.4.10", + aiassist : "com.zhidaoauto.common:service:1.0.8.4", // 语音替换方案 暂时只用TTS 解决焦点问题 aiassistReplace : "com.zhidao.mogoVoicesdk:voice:1.0.5", // 公司服务 - 埋点 diff --git a/foudations/mogo-commons/src/main/java/com/mogo/commons/voice/AIAssist.java b/foudations/mogo-commons/src/main/java/com/mogo/commons/voice/AIAssist.java index e752812148..084d12db46 100644 --- a/foudations/mogo-commons/src/main/java/com/mogo/commons/voice/AIAssist.java +++ b/foudations/mogo-commons/src/main/java/com/mogo/commons/voice/AIAssist.java @@ -479,6 +479,14 @@ public class AIAssist implements VoiceClient.VoiceCmdCallBack, OnTtsListener { } } + /** + * 打断上一条正在播报的语音内容,仅在Speech上生效,TXZ为空实现 + * 语音SDK生效版本从1.0.8.4版本起 + */ + public void breakOffSpeak(){ + mVoiceClient.breakOffSpeak(); + } + public void clearTTSCallback( String text ) { try { mSpeakVoiceMap.remove( text ); diff --git a/gradle.properties b/gradle.properties index 3ba961db6d..4b0613d6ae 100644 --- a/gradle.properties +++ b/gradle.properties @@ -101,7 +101,7 @@ CRASHREPORT_NOOP_VERSION=2.0.0 ######## 外部依赖引用 # 车聊聊 -CARCHATTING_VERSION=1.7.4 +CARCHATTING_VERSION=1.8.2 # 车聊聊接口 CARCHATTINGPROVIDER_VERSION=1.4.1 # loglib diff --git a/modules/mogo-module-guide/src/main/java/com/mogo/module/guide/guide/GuideStageFiveFragment.kt b/modules/mogo-module-guide/src/main/java/com/mogo/module/guide/guide/GuideStageFiveFragment.kt index 3be1e1ba10..341bbda15d 100644 --- a/modules/mogo-module-guide/src/main/java/com/mogo/module/guide/guide/GuideStageFiveFragment.kt +++ b/modules/mogo-module-guide/src/main/java/com/mogo/module/guide/guide/GuideStageFiveFragment.kt @@ -7,6 +7,7 @@ import com.mogo.commons.mvp.Presenter import com.mogo.commons.voice.IMogoVoiceCmdCallBack import com.mogo.module.guide.R import com.mogo.module.guide.fragment.GuideFragment +import com.mogo.module.guide.util.breakOffSpeak import com.mogo.module.guide.util.speak import kotlinx.android.synthetic.main.module_guide_item_stage_five.* import kotlinx.android.synthetic.main.module_guide_item_stage_four.* @@ -36,6 +37,7 @@ class GuideStageFiveFragment : MvpFragment> { override fun onResume() { super.onResume() containerFragment?.invisibleRight() + breakOffSpeak(context!!) speak(context!!, context!!.resources.getString(R.string.module_guide_voice_page_five), object : IMogoVoiceCmdCallBack { override fun onSpeakEnd(speakText: String?) { if(!isVisible){ diff --git a/modules/mogo-module-guide/src/main/java/com/mogo/module/guide/guide/GuideStageFourFragment.kt b/modules/mogo-module-guide/src/main/java/com/mogo/module/guide/guide/GuideStageFourFragment.kt index d207097fc7..434bb09496 100644 --- a/modules/mogo-module-guide/src/main/java/com/mogo/module/guide/guide/GuideStageFourFragment.kt +++ b/modules/mogo-module-guide/src/main/java/com/mogo/module/guide/guide/GuideStageFourFragment.kt @@ -7,6 +7,7 @@ import com.mogo.commons.mvp.Presenter import com.mogo.commons.voice.IMogoVoiceCmdCallBack import com.mogo.module.guide.R import com.mogo.module.guide.fragment.GuideFragment +import com.mogo.module.guide.util.breakOffSpeak import com.mogo.module.guide.util.speak import kotlinx.android.synthetic.main.module_guide_item_stage_four.* import kotlinx.android.synthetic.main.module_guide_item_stage_three.* @@ -37,6 +38,7 @@ class GuideStageFourFragment : MvpFragment> { super.onResume() containerFragment?.visibleLeft() containerFragment?.visibleRight() + breakOffSpeak(context!!) speak(context!!, context!!.resources.getString(R.string.module_guide_voice_page_four), object : IMogoVoiceCmdCallBack { override fun onSpeakEnd(speakText: String?) { if(!isVisible){ diff --git a/modules/mogo-module-guide/src/main/java/com/mogo/module/guide/guide/GuideStageOneFragment.kt b/modules/mogo-module-guide/src/main/java/com/mogo/module/guide/guide/GuideStageOneFragment.kt index eb7ba93654..b609a9b0b0 100644 --- a/modules/mogo-module-guide/src/main/java/com/mogo/module/guide/guide/GuideStageOneFragment.kt +++ b/modules/mogo-module-guide/src/main/java/com/mogo/module/guide/guide/GuideStageOneFragment.kt @@ -7,6 +7,7 @@ import com.mogo.commons.mvp.Presenter import com.mogo.commons.voice.IMogoVoiceCmdCallBack import com.mogo.module.guide.R import com.mogo.module.guide.fragment.GuideFragment +import com.mogo.module.guide.util.breakOffSpeak import com.mogo.module.guide.util.speak import kotlinx.android.synthetic.main.module_guide_item_stage_one.* @@ -37,6 +38,7 @@ class GuideStageOneFragment : MvpFragment> { override fun onResume() { super.onResume() containerFragment?.invisibleLeft() + breakOffSpeak(context!!) speak(context!!, context!!.resources.getString(R.string.module_guide_voice_page_one), object : IMogoVoiceCmdCallBack { override fun onSpeakEnd(speakText: String?) { if (!isVisible) { diff --git a/modules/mogo-module-guide/src/main/java/com/mogo/module/guide/guide/GuideStageThreeFragment.kt b/modules/mogo-module-guide/src/main/java/com/mogo/module/guide/guide/GuideStageThreeFragment.kt index 701250634e..1d8e35d73a 100644 --- a/modules/mogo-module-guide/src/main/java/com/mogo/module/guide/guide/GuideStageThreeFragment.kt +++ b/modules/mogo-module-guide/src/main/java/com/mogo/module/guide/guide/GuideStageThreeFragment.kt @@ -7,6 +7,7 @@ import com.mogo.commons.mvp.Presenter import com.mogo.commons.voice.IMogoVoiceCmdCallBack import com.mogo.module.guide.R import com.mogo.module.guide.fragment.GuideFragment +import com.mogo.module.guide.util.breakOffSpeak import com.mogo.module.guide.util.speak import kotlinx.android.synthetic.main.module_guide_item_stage_three.* import kotlinx.android.synthetic.main.module_guide_item_stage_two.* @@ -37,6 +38,7 @@ class GuideStageThreeFragment : MvpFragment> { super.onResume() containerFragment?.visibleLeft() containerFragment?.visibleRight() + breakOffSpeak(context!!) speak(context!!, context!!.resources.getString(R.string.module_guide_voice_page_three), object : IMogoVoiceCmdCallBack { override fun onSpeakEnd(speakText: String?) { if(!isVisible){ diff --git a/modules/mogo-module-guide/src/main/java/com/mogo/module/guide/guide/GuideStageTwoFragment.kt b/modules/mogo-module-guide/src/main/java/com/mogo/module/guide/guide/GuideStageTwoFragment.kt index ec4c348998..1986051ca3 100644 --- a/modules/mogo-module-guide/src/main/java/com/mogo/module/guide/guide/GuideStageTwoFragment.kt +++ b/modules/mogo-module-guide/src/main/java/com/mogo/module/guide/guide/GuideStageTwoFragment.kt @@ -7,6 +7,7 @@ import com.mogo.commons.mvp.Presenter import com.mogo.commons.voice.IMogoVoiceCmdCallBack import com.mogo.module.guide.R import com.mogo.module.guide.fragment.GuideFragment +import com.mogo.module.guide.util.breakOffSpeak import com.mogo.module.guide.util.speak import kotlinx.android.synthetic.main.module_guide_item_stage_one.* import kotlinx.android.synthetic.main.module_guide_item_stage_two.* @@ -37,6 +38,7 @@ class GuideStageTwoFragment : MvpFragment> { super.onResume() containerFragment?.visibleLeft() containerFragment?.visibleRight() + breakOffSpeak(context!!) speak(context!!, context!!.resources.getString(R.string.module_guide_voice_page_two), object : IMogoVoiceCmdCallBack { override fun onSpeakEnd(speakText: String?) { if(!isVisible){ diff --git a/modules/mogo-module-guide/src/main/java/com/mogo/module/guide/util/VoiceUtil.kt b/modules/mogo-module-guide/src/main/java/com/mogo/module/guide/util/VoiceUtil.kt index c0184db527..b4d728f82e 100644 --- a/modules/mogo-module-guide/src/main/java/com/mogo/module/guide/util/VoiceUtil.kt +++ b/modules/mogo-module-guide/src/main/java/com/mogo/module/guide/util/VoiceUtil.kt @@ -7,4 +7,8 @@ import com.mogo.commons.voice.VoicePreemptType fun speak(context: Context, text: String, callBack: IMogoVoiceCmdCallBack?) { AIAssist.getInstance(context).speakTTSVoice(text, VoicePreemptType.PREEMPT_TYPE_IMMEADIATELY, callBack) +} + +fun breakOffSpeak(context: Context){ + AIAssist.getInstance(context).breakOffSpeak() } \ No newline at end of file diff --git a/skin/mogo-skin-light/src/main/module-callchat-res/mipmap-ldpi/module_callchatting_user_close_light.png b/skin/mogo-skin-light/src/main/module-callchat-res/mipmap-ldpi/module_callchatting_user_close_light.png new file mode 100644 index 0000000000000000000000000000000000000000..6de48469729b3c5448ac7bfcdd7802518529465c GIT binary patch literal 1711 zcmV;g22lBlP)Px*X-PyuRA>dwSxrbJM-=WJhxKHXNDf|fM@dL>Omf&;lx!flgs89s6LV4scnp{X zf*^tfq63R3VL?wZf&q0&90*C!-1d-o+zl=|s}}=VlQDCe;LmecJkalGgJ{5-w4xA#QaE-SmcyXPYC%0h~oY-F=py{|u2EEfNuWMyR~ z&>02gq`dJ39jB+KM-5Oi5ZKw@-+xCGTuhz<%~KJu$F%Oha*^XSeDC?zK1=p(!S?6l_J2*H9bdi55olcMG zQYz;2d9?@Q8H1j3S_#FccCfa2)rsM4p+mzS3VW0msN7fFl-NKRY`s>XRg?V}gh9?AK+C4<6^J zqFifg?>)dhJ!Z){pkC3n@=010D|^LAe4l=VaBMsy64b@9pgkEuZIb zWMsr?Zf>^D0h=!=aM*`u^vtSNpKu$8=}q4iiGc|oV4~OR!@C&8qa1revB@`~8oL(; z0mamiMIV1r-$YRQ2*!LS- ze+b+=R8_A~6AUq>2`dRWMF9M=8=6X`V6Dt!nb?od*u;&?dI}>dFnmnKybkXWa@LX; z20LVyByMK~)P*3+tiWNucw6siP+esaWPUdaka5M9&M|0F9{0fZY3AR4@?|PBVDVuT zlzdS_uPx(H%HAKGlP|4Fv93f=xf}?{&?^^*u4kz~k`1-=U5I!oFpl#{08I6+s^HX` znwnyv9!?-85}B>UX)RX;*KI5-(D%RwOd0m_ek?d|8{HJTiDVz5z>!|u;SKaPW*N3A zRVo!{adFWZ8ww0s8p6g?40Q zwT<_PZJ_TSJnJ6X^w>mC&BVRjXa?v>wjv3cZA6UE_(D?4pjhIb=kvw6zZS3t>J)G& za+1#4aIM5i`1ttvK3w2ZxwLJDZ~jw_igZEkM* zDojlIz0LgCz_gF4AQLNj`uh4pd64u~EBPIVnKM6c-m0b?)o&vu3*Z=&u=JUWi^7kP zZ}31q!4|YfDAX*rEkGaKAi@d~K7Pa(q3}0Uea0H=v>@Gt1kI{Up6O8 z(zaP!7NGle0~hd!t}=rasDExGAxm9GiHV7cz@anAMJ;N2db(;9isA!TndOU08X@LS zl!-Dtg7SrZZEa2An}p3t%>@h&4#vJknd7Am(j~<5m(Q(39!pSW8!udX2 zB>MBGJ^}~!Iu=pD@0sM}Ao>u$ejLQdIxne*EG`{VatE-8uTUobP%IcpN|4Qi?B}M1 zO^m9<^#LHyxSs>)H0l|>uiiSaiolwHJ1nCf{l6(=f<(lPv8stl(}>Y;pPrt+hdSNr z6%cq4b#?cnUPk>d$aheG(A3oQ1JZ+EP>=oRgKaKd_7oV8Asr+~ilP7j002ovPDHLk FV1k*?Izj*d literal 0 HcmV?d00001 diff --git a/skin/mogo-skin-light/src/main/module-callchat-res/mipmap-mdpi/module_callchatting_user_close_light.png b/skin/mogo-skin-light/src/main/module-callchat-res/mipmap-mdpi/module_callchatting_user_close_light.png new file mode 100644 index 0000000000000000000000000000000000000000..6de48469729b3c5448ac7bfcdd7802518529465c GIT binary patch literal 1711 zcmV;g22lBlP)Px*X-PyuRA>dwSxrbJM-=WJhxKHXNDf|fM@dL>Omf&;lx!flgs89s6LV4scnp{X zf*^tfq63R3VL?wZf&q0&90*C!-1d-o+zl=|s}}=VlQDCe;LmecJkalGgJ{5-w4xA#QaE-SmcyXPYC%0h~oY-F=py{|u2EEfNuWMyR~ z&>02gq`dJ39jB+KM-5Oi5ZKw@-+xCGTuhz<%~KJu$F%Oha*^XSeDC?zK1=p(!S?6l_J2*H9bdi55olcMG zQYz;2d9?@Q8H1j3S_#FccCfa2)rsM4p+mzS3VW0msN7fFl-NKRY`s>XRg?V}gh9?AK+C4<6^J zqFifg?>)dhJ!Z){pkC3n@=010D|^LAe4l=VaBMsy64b@9pgkEuZIb zWMsr?Zf>^D0h=!=aM*`u^vtSNpKu$8=}q4iiGc|oV4~OR!@C&8qa1revB@`~8oL(; z0mamiMIV1r-$YRQ2*!LS- ze+b+=R8_A~6AUq>2`dRWMF9M=8=6X`V6Dt!nb?od*u;&?dI}>dFnmnKybkXWa@LX; z20LVyByMK~)P*3+tiWNucw6siP+esaWPUdaka5M9&M|0F9{0fZY3AR4@?|PBVDVuT zlzdS_uPx(H%HAKGlP|4Fv93f=xf}?{&?^^*u4kz~k`1-=U5I!oFpl#{08I6+s^HX` znwnyv9!?-85}B>UX)RX;*KI5-(D%RwOd0m_ek?d|8{HJTiDVz5z>!|u;SKaPW*N3A zRVo!{adFWZ8ww0s8p6g?40Q zwT<_PZJ_TSJnJ6X^w>mC&BVRjXa?v>wjv3cZA6UE_(D?4pjhIb=kvw6zZS3t>J)G& za+1#4aIM5i`1ttvK3w2ZxwLJDZ~jw_igZEkM* zDojlIz0LgCz_gF4AQLNj`uh4pd64u~EBPIVnKM6c-m0b?)o&vu3*Z=&u=JUWi^7kP zZ}31q!4|YfDAX*rEkGaKAi@d~K7Pa(q3}0Uea0H=v>@Gt1kI{Up6O8 z(zaP!7NGle0~hd!t}=rasDExGAxm9GiHV7cz@anAMJ;N2db(;9isA!TndOU08X@LS zl!-Dtg7SrZZEa2An}p3t%>@h&4#vJknd7Am(j~<5m(Q(39!pSW8!udX2 zB>MBGJ^}~!Iu=pD@0sM}Ao>u$ejLQdIxne*EG`{VatE-8uTUobP%IcpN|4Qi?B}M1 zO^m9<^#LHyxSs>)H0l|>uiiSaiolwHJ1nCf{l6(=f<(lPv8stl(}>Y;pPrt+hdSNr z6%cq4b#?cnUPk>d$aheG(A3oQ1JZ+EP>=oRgKaKd_7oV8Asr+~ilP7j002ovPDHLk FV1k*?Izj*d literal 0 HcmV?d00001 diff --git a/skin/mogo-skin-light/src/main/module-callchat-res/mipmap-xhdpi/module_callchatting_user_close_light.png b/skin/mogo-skin-light/src/main/module-callchat-res/mipmap-xhdpi/module_callchatting_user_close_light.png new file mode 100644 index 0000000000000000000000000000000000000000..cc00f7d153890003169a6fe2e62086171ed6c82a GIT binary patch literal 3263 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