-
diff --git a/OCH/mogo-och/src/main/res/values-xhdpi-2560x1440/dimens.xml b/OCH/mogo-och/src/main/res/values-xhdpi-2560x1440/dimens.xml
index c384e61bb5..7343943aa4 100644
--- a/OCH/mogo-och/src/main/res/values-xhdpi-2560x1440/dimens.xml
+++ b/OCH/mogo-och/src/main/res/values-xhdpi-2560x1440/dimens.xml
@@ -21,8 +21,8 @@
460px
140px
- 145px
- 145px
+ 140px
+ 140px
92px
@@ -34,7 +34,7 @@
44px
13px
12px
- 224px
+ 350px
460px
30px
diff --git a/OCH/mogo-och/src/main/res/values/dimens.xml b/OCH/mogo-och/src/main/res/values/dimens.xml
index 84f4ec5a14..033d24465a 100644
--- a/OCH/mogo-och/src/main/res/values/dimens.xml
+++ b/OCH/mogo-och/src/main/res/values/dimens.xml
@@ -21,8 +21,8 @@
300px
100px
- 108px
- 108px
+ 100px
+ 100px
35px
@@ -33,7 +33,7 @@
30px
13px
12px
- 188px
+ 288px
460px
30px
diff --git a/app/functions/tts.gradle b/app/functions/tts.gradle
index 4d0abe06d9..cffb706413 100644
--- a/app/functions/tts.gradle
+++ b/app/functions/tts.gradle
@@ -8,15 +8,15 @@ project.dependencies {
d8xxImplementation rootProject.ext.dependencies.ttszhi
d80xImplementation rootProject.ext.dependencies.ttszhi
f8xxImplementation rootProject.ext.dependencies.ttszhi
- fPadLenovoImplementation rootProject.ext.dependencies.ttszhi
+ fPadLenovoImplementation rootProject.ext.dependencies.ttspad
f80xImplementation rootProject.ext.dependencies.ttszhi
f8AmapImplementation rootProject.ext.dependencies.ttszhi
em4Implementation rootProject.ext.dependencies.ttszhi
e8xxImplementation rootProject.ext.dependencies.ttszhi
fochtaxiImplementation rootProject.ext.dependencies.ttszhi
fochbusImplementation rootProject.ext.dependencies.ttszhi
- fPadLenovoOchTaxiImplementation rootProject.ext.dependencies.ttszhi
- fPadLenovoOchBusImplementation rootProject.ext.dependencies.ttszhi
+ fPadLenovoOchTaxiImplementation rootProject.ext.dependencies.ttspad
+ fPadLenovoOchBusImplementation rootProject.ext.dependencies.ttspad
phoneImplementation rootProject.ext.dependencies.ttszhi
} else {
bydautoImplementation project(':tts:tts-di')
@@ -27,15 +27,15 @@ project.dependencies {
d8xxImplementation project(':tts:tts-zhi')
d80xImplementation project(':tts:tts-zhi')
f8xxImplementation project(':tts:tts-zhi')
- fPadLenovoImplementation project(':tts:tts-zhi')
+ fPadLenovoImplementation project(':tts:tts-pad')
f80xImplementation project(':tts:tts-zhi')
f8AmapImplementation project(':tts:tts-zhi')
em4Implementation project(':tts:tts-zhi')
e8xxImplementation project(':tts:tts-zhi')
fochtaxiImplementation project(':tts:tts-zhi')
fochbusImplementation project(':tts:tts-zhi')
- fPadLenovoOchTaxiImplementation project(':tts:tts-zhi')
- fPadLenovoOchBusImplementation project(':tts:tts-zhi')
+ fPadLenovoOchTaxiImplementation project(':tts:tts-pad')
+ fPadLenovoOchBusImplementation project(':tts:tts-pad')
phoneImplementation project(':tts:tts-zhi')
}
}
\ No newline at end of file
diff --git a/config.gradle b/config.gradle
index 45564447f1..5d8b58abb6 100644
--- a/config.gradle
+++ b/config.gradle
@@ -12,7 +12,7 @@ ext {
commonIndependentAmapApiValue : "1c3fbc5f5e183619ffb1e7bc01e6751f",
compileSdkVersion : 28,
buildToolsVersion : "29.0.2",
- minSdkVersion : 22,
+ minSdkVersion : 23,
targetSdkVersion : 23,
]
dependencies = [
@@ -216,6 +216,7 @@ ext {
ttsbase : "com.mogo.tts:tts-base:${TTS_BASE_VERSION}",
ttsdi : "com.mogo.tts:tts-di:${TTS_DI_VERSION}",
ttszhi : "com.mogo.tts:tts-zhi:${TTS_ZHI_VERSION}",
+ ttspad : "com.mogo.tts:tts-pad:${TTS_ZHI_VERSION}",
ttsnoop : "com.mogo.tts:tts-noop:${TTS_NOOP_VERSION}",
// mogomodulemachinevision : "com.mogo.module:module-machine-vision:${MOGO_MODULES_MVISION_VERSION}",
diff --git a/gradle.properties b/gradle.properties
index 6257d2ee0d..0da7be3e55 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -127,6 +127,7 @@ CRASHREPORT_UPGRADE_VERSION=2.0.12
TTS_BASE_VERSION=2.0.12
TTS_DI_VERSION=2.0.12
TTS_ZHI_VERSION=2.0.12
+TTS_PAD_VERSION=2.0.12
TTS_NOOP_VERSION=2.0.12
# 自研地图
MAP_CUSTOM_VERSION=2.0.12
diff --git a/libraries/map-custom/build.gradle b/libraries/map-custom/build.gradle
index bea3924d3d..a0fb142fb5 100644
--- a/libraries/map-custom/build.gradle
+++ b/libraries/map-custom/build.gradle
@@ -67,7 +67,7 @@ dependencies {
implementation project(':foudations:mogo-commons')
}
- implementation 'com.zhidaoauto.machine:map:1.0.0-vr-8.5.31'
+ implementation 'com.zhidaoauto.machine:map:1.0.0-vr-8.5.33'
// implementation 'com.zhidaoauto.machine:map:1.0.0-vr-test-3.4'
}
diff --git a/libraries/tanlulib/src/main/java/com/zhidao/roadcondition/service/MainService.kt b/libraries/tanlulib/src/main/java/com/zhidao/roadcondition/service/MainService.kt
index 46bc7c564d..3c339eba5f 100644
--- a/libraries/tanlulib/src/main/java/com/zhidao/roadcondition/service/MainService.kt
+++ b/libraries/tanlulib/src/main/java/com/zhidao/roadcondition/service/MainService.kt
@@ -91,8 +91,12 @@ class MainService : Service() {
CosUploadManagerImpl.getInstance(AbsMogoApplication.getApp().applicationContext)
.init(BuildConfig.APPLICATION_ID, 0)
serviceApis = ARouter.getInstance().build(MogoServicePaths.PATH_SERVICE_APIS).navigation(this) as IMogoServiceApis
- speed = serviceApis.mapServiceApi.getSingletonLocationClient(this).lastKnowLocation.speed
- Log.d(TAG, "onStartCommand speed = $speed")
+ if (serviceApis.mapServiceApi.getSingletonLocationClient(this) != null &&
+ serviceApis.mapServiceApi.getSingletonLocationClient(this).lastKnowLocation != null) {
+ speed = serviceApis.mapServiceApi.getSingletonLocationClient(this).lastKnowLocation.speed
+ Log.d(TAG, "onStartCommand speed = $speed")
+ }
+
if (intent != null) {
params = intent.getParcelableExtra("params")
params?.let {
diff --git a/main-extensions/mogo-module-main-independent/src/main/AndroidManifest.xml b/main-extensions/mogo-module-main-independent/src/main/AndroidManifest.xml
index d119091bd3..6f3b2eaa4b 100644
--- a/main-extensions/mogo-module-main-independent/src/main/AndroidManifest.xml
+++ b/main-extensions/mogo-module-main-independent/src/main/AndroidManifest.xml
@@ -1,5 +1,9 @@
+
+
+
+
");
mServiceApis.getV2XListenerManager().registerIntentListener(MogoReceiver.ACTION_V2X_FRONT_WARNING, this);
}
diff --git a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/entrance/EntranceFragment.java b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/entrance/EntranceFragment.java
index 54f57fd348..eae621aebe 100644
--- a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/entrance/EntranceFragment.java
+++ b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/entrance/EntranceFragment.java
@@ -726,7 +726,7 @@ public class EntranceFragment extends MvpFragment
-
+
diff --git a/modules/mogo-module-extensions/src/main/res/values-xhdpi-2560x1440/dimens.xml b/modules/mogo-module-extensions/src/main/res/values-xhdpi-2560x1440/dimens.xml
index a66eeed6a0..79f55f813d 100644
--- a/modules/mogo-module-extensions/src/main/res/values-xhdpi-2560x1440/dimens.xml
+++ b/modules/mogo-module-extensions/src/main/res/values-xhdpi-2560x1440/dimens.xml
@@ -13,4 +13,5 @@
22px
36px
50px
+ 60px
\ No newline at end of file
diff --git a/modules/mogo-module-extensions/src/main/res/values-xhdpi/dimens.xml b/modules/mogo-module-extensions/src/main/res/values-xhdpi/dimens.xml
index 010482f882..831531747c 100644
--- a/modules/mogo-module-extensions/src/main/res/values-xhdpi/dimens.xml
+++ b/modules/mogo-module-extensions/src/main/res/values-xhdpi/dimens.xml
@@ -191,4 +191,11 @@
80px
28px
+ 190px
+ 76px
+ 16px
+ 24px
+ 35px
+ 38px
+
\ No newline at end of file
diff --git a/modules/mogo-module-extensions/src/main/res/values/dimens.xml b/modules/mogo-module-extensions/src/main/res/values/dimens.xml
index b0d6433655..eeb585d868 100644
--- a/modules/mogo-module-extensions/src/main/res/values/dimens.xml
+++ b/modules/mogo-module-extensions/src/main/res/values/dimens.xml
@@ -243,9 +243,12 @@
11px
400px
300px
- 279px
- 119px
- 23px
- 35px
- 50px
+
+ 190px
+ 76px
+ 16px
+ 24px
+ 35px
+ 38px
+
\ No newline at end of file
diff --git a/modules/mogo-module-main/src/main/java/com/mogo/module/main/MainActivity.java b/modules/mogo-module-main/src/main/java/com/mogo/module/main/MainActivity.java
index 843a95a9e6..b0b47452e4 100644
--- a/modules/mogo-module-main/src/main/java/com/mogo/module/main/MainActivity.java
+++ b/modules/mogo-module-main/src/main/java/com/mogo/module/main/MainActivity.java
@@ -1,7 +1,12 @@
package com.mogo.module.main;
+import android.app.AlertDialog;
+import android.content.DialogInterface;
import android.content.Intent;
+import android.content.pm.PackageManager;
+import android.net.Uri;
import android.os.Bundle;
+import android.provider.Settings;
import android.util.Log;
import android.view.View;
import android.widget.FrameLayout;
@@ -42,6 +47,8 @@ import com.zhidao.autopilot.support.api.AutopilotServiceManage;
import java.util.List;
+import static com.mogo.module.main.MainPresenter.MOGO_PERMISSION_REQUEST_CODE;
+
/**
* @author congtaowang
* @since 2019-12-23
@@ -76,6 +83,8 @@ public class MainActivity extends MvpActivity implement
protected ConstraintLayout clSpecialEffect;
+ private boolean isFirst = false;
+
@Override
protected int getLayoutId() {
if (!DebugConfig.isMapBased()) {
@@ -155,6 +164,8 @@ public class MainActivity extends MvpActivity implement
NetworkUtils.listenNetStrength(this);
DisplayEffectsHelper.getInstance().init(clSpecialEffect);
mServiceApis.getStatusManagerApi().registerStatusChangedListener(TAG, StatusDescriptor.VR_MODE, this);
+
+ mPresenter.checkPermission(this);
}
private void init() {
@@ -426,4 +437,55 @@ public class MainActivity extends MvpActivity implement
}
}
+
+ @Override
+ public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
+ super.onRequestPermissionsResult(requestCode, permissions, grantResults);
+ if (requestCode == MOGO_PERMISSION_REQUEST_CODE) {
+ boolean isAllGranted = true;
+ // 判断是否所有的权限都已经授予了
+ for (int grant : grantResults) {
+ Log.d("liyz", "grant =" + grant);
+ if (grant != PackageManager.PERMISSION_GRANTED) {
+ isAllGranted = false;
+ break;
+ }
+ }
+
+ Log.d("liyz", "onRequestPermissionsResult isAllGranted = " + isAllGranted);
+ if (isAllGranted) {
+ isFirst = false;
+ } else {
+ // 弹出对话框告诉用户需要权限的原因, 并引导用户去应用权限管理中手动打开权限按钮
+ if (!isFirst) {
+ openAppDetails();
+ isFirst = true;
+ }
+ }
+ }
+ }
+
+ /**
+ * 打开APP的详情设置
+ */
+ private void openAppDetails() {
+ AlertDialog.Builder builder = new AlertDialog.Builder(this);
+ builder.setMessage("请在 “应用信息 -> 权限” 中授予权限");
+ builder.setPositiveButton("手动授权", new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ Intent intent = new Intent();
+ intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
+ intent.addCategory(Intent.CATEGORY_DEFAULT);
+ intent.setData(Uri.parse("package:" + getPackageName()));
+ intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+ intent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
+ intent.addFlags(Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
+ startActivity(intent);
+ }
+ });
+ builder.setNegativeButton("取消", null);
+ builder.show();
+ }
+
}
diff --git a/modules/mogo-module-main/src/main/java/com/mogo/module/main/MainPresenter.java b/modules/mogo-module-main/src/main/java/com/mogo/module/main/MainPresenter.java
index 6d3c6a4a66..a1f1c6b14c 100644
--- a/modules/mogo-module-main/src/main/java/com/mogo/module/main/MainPresenter.java
+++ b/modules/mogo-module-main/src/main/java/com/mogo/module/main/MainPresenter.java
@@ -1,11 +1,17 @@
package com.mogo.module.main;
+import android.Manifest;
+import android.app.Activity;
import android.content.Intent;
+import android.content.pm.PackageManager;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
+import android.util.Log;
import androidx.annotation.NonNull;
+import androidx.core.app.ActivityCompat;
+import androidx.core.content.ContextCompat;
import androidx.lifecycle.LifecycleOwner;
import com.mogo.commons.mvp.Presenter;
@@ -37,6 +43,8 @@ public class MainPresenter extends Presenter< MainView > {
}
};
+ public static final int MOGO_PERMISSION_REQUEST_CODE = 10000;
+
public MainPresenter( MainView view ) {
super( view );
SchemeIntent.getInstance().init( getContext(), mView.getApis() );
@@ -47,6 +55,46 @@ public class MainPresenter extends Presenter< MainView > {
super.onCreate( owner );
}
+ public void checkPermission(Activity activity) {
+ boolean isAllGranted = checkPermissionAllGranted(
+ new String[]{
+ Manifest.permission.READ_EXTERNAL_STORAGE,
+ Manifest.permission.WRITE_EXTERNAL_STORAGE,
+ Manifest.permission.ACCESS_LOCATION_EXTRA_COMMANDS,
+ Manifest.permission.ACCESS_FINE_LOCATION
+ }
+ );
+ if (isAllGranted) {
+ return;
+ }
+
+ /**
+ * 请求权限
+ */
+ ActivityCompat.requestPermissions(
+ activity,
+ new String[]{
+ Manifest.permission.READ_EXTERNAL_STORAGE,
+ Manifest.permission.WRITE_EXTERNAL_STORAGE,
+ Manifest.permission.ACCESS_LOCATION_EXTRA_COMMANDS,
+ Manifest.permission.ACCESS_FINE_LOCATION
+ }, MOGO_PERMISSION_REQUEST_CODE);
+ }
+
+ /**
+ * 检查是否拥有指定的所有权限
+ */
+ private boolean checkPermissionAllGranted(String[] permissions) {
+ for (String permission : permissions) {
+ if (ContextCompat.checkSelfPermission(getContext(), permission) != PackageManager.PERMISSION_GRANTED) {
+ // 只要有一个权限没有被授予, 则直接返回 false
+ return false;
+ }
+ }
+ return true;
+ }
+
+
/**
* 延时操作
*/
diff --git a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/fragment/V2XEventPanelFragment.kt b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/fragment/V2XEventPanelFragment.kt
index 6928b349a0..783a7772f3 100644
--- a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/fragment/V2XEventPanelFragment.kt
+++ b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/fragment/V2XEventPanelFragment.kt
@@ -245,8 +245,11 @@ class V2XEventPanelFragment : MvpFragment
+
+ /
+
\ No newline at end of file
diff --git a/tts/tts-pad/src/main/java/com/mogo/tts/pad/PadTTS.java b/tts/tts-pad/src/main/java/com/mogo/tts/pad/PadTTS.java
new file mode 100644
index 0000000000..3598d85479
--- /dev/null
+++ b/tts/tts-pad/src/main/java/com/mogo/tts/pad/PadTTS.java
@@ -0,0 +1,480 @@
+package com.mogo.tts.pad;
+
+import android.content.Context;
+import android.content.Intent;
+import android.text.TextUtils;
+
+import com.alibaba.android.arouter.facade.annotation.Route;
+import com.mogo.tts.base.IMogoTTS;
+import com.mogo.tts.base.IMogoTTSCallback;
+import com.mogo.tts.base.MogoTTSConstants;
+import com.mogo.tts.base.PreemptType;
+import com.mogo.utils.AppUtils;
+import com.mogo.utils.logger.Logger;
+import com.zhidao.auto.platform.voice.VoiceClient;
+import com.zhidao.voicesdk.MogoVoiceManager;
+import com.zhidao.voicesdk.MogoVoiceManagerImpl;
+import com.zhidao.voicesdk.callback.OnConnStatusListener;
+import com.zhidao.voicesdk.callback.OnTtsListener;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
+public
+/**
+ * @author congtaowang
+ * @since 2020/10/12
+ *
+ * 描述
+ */
+@Route( path = MogoTTSConstants.API_PATH )
+class PadTTS implements IMogoTTS, VoiceClient.VoiceCmdCallBack, OnTtsListener {
+
+ private static final String TAG = "ZhiTTS";
+ private String mLastQAndASpeakText;
+
+ private boolean mHasFlush = false;
+ private boolean mInitReady = false;
+ private Context mContext;
+
+ public synchronized void release() {
+ Logger.d( TAG, "release" );
+ if ( mCmdMap != null && !mCmdMap.isEmpty() && mVoiceClient != null ) {
+ for ( String cmd : mCmdMap.keySet() ) {
+ try {
+ mVoiceClient.unRegisterCustomWakeupCmd( cmd );
+ } catch ( Exception e ) {
+ }
+ }
+ }
+ mQAndAMap.clear();
+ mVoiceClient.release();
+ mSpeakVoiceMap.clear();
+ mCacheUnWakeupCommands.clear();
+ mContext = null;
+ }
+
+ private VoiceClient mVoiceClient;
+ private MogoVoiceManager mogoVoiceManager;
+ // 免唤醒指令
+ private Map< String, List< IMogoTTSCallback > > mCmdMap = new HashMap<>();
+ // 问答指令
+ private Map< String, IMogoTTSCallback > mQAndAMap = new HashMap<>();
+ // 单独的语音播放
+ private Map< String, IMogoTTSCallback > mSpeakVoiceMap = new HashMap<>();
+
+ private Map< String, String[] > mCacheUnWakeupCommands = new ConcurrentHashMap<>();
+
+ private void initFlushStatus() {
+ if ( !mHasFlush ) {
+ mHasFlush = isVoiceServiceReady( mContext );
+ }
+ }
+
+ /**
+ * 初始化
+ */
+ private void initSpeech( Context context ) {
+ mogoVoiceManager = MogoVoiceManagerImpl.getInstance();
+ mogoVoiceManager.init( context, new OnConnStatusListener() {
+ @Override
+ public void onSuccess() {
+ mInitReady = true;
+ }
+
+ @Override
+ public void onFailed() {
+
+ }
+ } );
+ }
+
+ /**
+ * 是否语音注册成功
+ *
+ * @return
+ */
+ @Override
+ public boolean hasFlush() {
+ return mHasFlush;
+ }
+
+ @Override
+ public void onCmdSelected( String cmd ) {
+ if ( !mCmdMap.containsKey( cmd ) ) {
+ return;
+ }
+ Logger.d( TAG, "received command: %s", cmd );
+
+ Iterator< IMogoTTSCallback > iterator = null;
+ try {
+ List< IMogoTTSCallback > cmdCallBacks = mCmdMap.get( cmd );
+ iterator = new ArrayList<>( cmdCallBacks ).iterator();
+ } catch ( Exception e ) {
+
+ }
+ while ( iterator != null && iterator.hasNext() ) {
+ IMogoTTSCallback callBack = iterator.next();
+ if ( callBack != null ) {
+ callBack.onCmdSelected( cmd );
+ }
+ }
+ }
+
+ @Override
+ public void onCmdAction( String speakText ) {
+ if ( !TextUtils.isEmpty( mLastQAndASpeakText ) ) {
+ IMogoTTSCallback cmdCallBack = mQAndAMap.remove( mLastQAndASpeakText );
+ if ( cmdCallBack != null ) {
+ cmdCallBack.onCmdAction( speakText );
+ }
+ }
+ }
+
+ @Override
+ public void onCmdCancel( String speakText ) {
+ if ( !TextUtils.isEmpty( mLastQAndASpeakText ) ) {
+ IMogoTTSCallback cmdCallBack = mQAndAMap.remove( mLastQAndASpeakText );
+ if ( cmdCallBack != null ) {
+ cmdCallBack.onCmdCancel( speakText );
+ }
+ }
+ }
+
+ @Override
+ public void onSpeakEnd( String speakText ) {
+ if ( mQAndAMap.containsKey( speakText ) ) {
+ mLastQAndASpeakText = speakText;
+ IMogoTTSCallback cmdCallBack = mQAndAMap.get( speakText );
+ if ( cmdCallBack != null ) {
+ cmdCallBack.onSpeakEnd( speakText );
+ return;
+ }
+ }
+ IMogoTTSCallback callBack = mSpeakVoiceMap.remove( speakText );
+ if ( callBack != null ) {
+ callBack.onSpeakEnd( speakText );
+ }
+ }
+
+ @Override
+ public void onSpeakSelectTimeOut( String speakText ) {
+ if ( mQAndAMap.containsKey( speakText ) ) {
+ if ( TextUtils.equals( speakText, mLastQAndASpeakText ) ) {
+ mLastQAndASpeakText = null;
+ }
+ IMogoTTSCallback cmdCallBack = mQAndAMap.remove( speakText );
+ if ( cmdCallBack != null ) {
+ cmdCallBack.onSpeakSelectTimeOut( speakText );
+ return;
+ }
+ }
+ IMogoTTSCallback callBack = mSpeakVoiceMap.remove( speakText );
+ if ( callBack != null ) {
+ callBack.onSpeakSelectTimeOut( speakText );
+ }
+ }
+
+ /**
+ * 语音播报
+ *
+ * @param text
+ */
+ public void speakTTSVoice( String text, IMogoTTSCallback callBack ) {
+ try {
+ initFlushStatus();
+ if ( mHasFlush ) {
+ mSpeakVoiceMap.put( text, callBack );
+ mVoiceClient.speakDefault( text );
+ }
+ } catch ( Exception e ) {
+ }
+ }
+
+ /**
+ * 语音播报
+ *
+ * @param text
+ */
+ public void speakTTSVoice( String text ) {
+ try {
+ initFlushStatus();
+ if ( mHasFlush ) {
+ mVoiceClient.speakDefault( text );
+ }
+ } catch ( Exception e ) {
+ }
+ }
+
+ /**
+ * 语音播报
+ *
+ * @param text 播报内容
+ * @param type 播报策略
+ */
+ public void speakTTSVoice( String text, PreemptType type, IMogoTTSCallback callBack ) {
+ try {
+ initFlushStatus();
+ if ( mHasFlush ) {
+ mSpeakVoiceMap.put( text, callBack );
+ VoiceClient.PreemptType preemptType = VoiceClient.PreemptType.PREEMPT_TYPE_NONE;
+ if ( type != null ) {
+ switch ( type ) {
+ case PREEMPT_TYPE_NEXT:
+ preemptType = VoiceClient.PreemptType.PREEMPT_TYPE_NEXT;
+ break;
+ case PREEMPT_TYPE_FLUSH:
+ preemptType = VoiceClient.PreemptType.PREEMPT_TYPE_FLUSH;
+ break;
+ case PREEMPT_TYPE_IMMEDIATELY:
+ preemptType = VoiceClient.PreemptType.PREEMPT_TYPE_IMMEADIATELY;
+ break;
+ case PREEMPT_TYPE_IMMEDIATELY_WITHOUT_CANCEL:
+ preemptType = VoiceClient.PreemptType.PREEMPT_TYPE_IMMEADIATELY_WITHOUT_CANCLE;
+ break;
+ }
+ }
+ mVoiceClient.speakTypeText( text, preemptType );
+ }
+ } catch ( Exception e ) {
+ }
+ }
+
+ /**
+ * 问答类型语音注册:默认确认和取消
+ *
+ * @param tts 播报内容
+ */
+ public void speakQAndACmd( String tts, IMogoTTSCallback callBack ) {
+ initFlushStatus();
+ if ( mHasFlush ) {
+ mQAndAMap.put( tts, callBack );
+ mVoiceClient.speakTtsAndRegistCmd( tts );
+ }
+ }
+
+ /**
+ * 问答类型语音注册
+ *
+ * @param tts 播报内容
+ * @param okCmds 确认命令唤醒词
+ * @param cancelCmds 取消命令唤醒词
+ */
+ public void speakQAndACmd( String tts, String[] okCmds, String[] cancelCmds, IMogoTTSCallback callBack ) {
+ initFlushStatus();
+ if ( mHasFlush ) {
+ mQAndAMap.put( tts, callBack );
+ mVoiceClient.speakTtsAndRegistCmd( tts, okCmds, cancelCmds );
+ }
+ }
+
+ /**
+ * 注册免唤醒命令
+ *
+ * @param cmd
+ * @param cmdWords
+ * @param callBack
+ */
+ public void registerUnWakeupCommand( String cmd, String[] cmdWords, IMogoTTSCallback callBack ) {
+ if ( !mCmdMap.containsKey( cmd ) ) {
+ mCmdMap.put( cmd, new ArrayList<>() );
+ }
+ mCmdMap.get( cmd ).add( callBack );
+
+ initFlushStatus();
+ if ( mHasFlush ) {
+ mVoiceClient.registerCustomWakeupCmd( cmd, cmdWords );
+ mCacheUnWakeupCommands.remove( cmd );
+ }
+ Logger.i( TAG, "cache un wakeup command2. %s", cmd );
+ mCacheUnWakeupCommands.put( cmd, cmdWords );
+ }
+
+ /**
+ * 注册免唤醒命令
+ *
+ * @param cmd
+ * @param cmdWords
+ */
+ private void registerUnWakeupCommand( String cmd, String[] cmdWords ) {
+ initFlushStatus();
+ if ( mHasFlush ) {
+ mVoiceClient.registerCustomWakeupCmd( cmd, cmdWords );
+ mCacheUnWakeupCommands.remove( cmd );
+ }
+ Logger.i( TAG, "cache un wakeup command. %s", cmd );
+ mCacheUnWakeupCommands.put( cmd, cmdWords );
+ }
+
+ /**
+ * 注销免唤醒命令
+ *
+ * @param cmd
+ */
+ public synchronized void unregisterUnWakeupCommand( String cmd ) {
+ mCmdMap.remove( cmd );
+ try {
+ mVoiceClient.unRegisterCustomWakeupCmd( cmd );
+ } catch ( Exception e ) {
+ }
+ mCacheUnWakeupCommands.remove( cmd );
+ }
+
+ /**
+ * 注销免唤醒命令
+ *
+ * @param cmd
+ */
+ public synchronized void unregisterUnWakeupCommand( String cmd, IMogoTTSCallback callBack ) {
+ if ( mCmdMap.containsKey( cmd ) ) {
+ List< IMogoTTSCallback > callBacks = mCmdMap.get( cmd );
+ if ( callBacks != null ) {
+ callBacks.remove( callBack );
+ }
+ if ( callBacks.isEmpty() ) {
+ mCmdMap.remove( cmd );
+ try {
+ mVoiceClient.unRegisterCustomWakeupCmd( cmd );
+ } catch ( Exception e ) {
+ }
+ mCacheUnWakeupCommands.remove( cmd );
+ }
+ }
+ }
+
+ public static void startAssistant( Context context ) {
+ startAssistant( context, 1 );
+ }
+
+ /**
+ * @param context
+ * @param status window_start_cancel 0 - 结束, 1 - 显示, 2 - 未激活调试进入
+ */
+ public static void startAssistant( Context context, int status ) {
+ final Intent intent = new Intent();
+ intent.setFlags( Intent.FLAG_INCLUDE_STOPPED_PACKAGES );
+ intent.setAction( "pvetec.intent.action.txz.switch" );
+ intent.putExtra( "window_start_cancel", status );
+ intent.putExtra( "extra_switch_type", "window_start_cancel" );
+ Logger.d( TAG, "status = %d", status );
+ context.sendBroadcast( intent );
+ }
+
+ public synchronized void flush() {
+ if ( mCacheUnWakeupCommands.isEmpty() ) {
+ return;
+ }
+ mHasFlush = true;
+ Logger.d( TAG, "flush cache voice command when voice service ready." );
+ final Map< String, String[] > tmp = new HashMap<>( mCacheUnWakeupCommands );
+ for ( String cmd : tmp.keySet() ) {
+ registerUnWakeupCommand( cmd, tmp.get( cmd ) );
+ }
+ }
+
+ private boolean isVoiceServiceReady( Context context ) {
+ if ( AppUtils.isProcessRunning( context, AppUtils.getPackageUid( context, "com.zhidao.speech" ) )) {
+ return true;
+ } else if ( AppUtils.isProcessRunning( context, AppUtils.getPackageUid( context, "com.txznet.txz" ) )
+ && AppUtils.isProcessRunning( context, AppUtils.getPackageUid( context, "com.txznet.adapter" ) ) ) {
+ Logger.d( TAG, "txz is voiceServiceReady" );
+ return true;
+ }
+ return true;
+ }
+
+ public void speakTTSAndDuck( String text ) {
+ speakTTSAndDuck( text, null );
+ }
+
+ public void speakTTSAndDuck( String text, IMogoTTSCallback callBack ) {
+ try {
+ if ( mInitReady ) {
+ mSpeakVoiceMap.put( text, callBack );
+ mogoVoiceManager.toSpeak( text, -3, this );
+ }
+ } catch ( Exception e ) {
+ }
+ }
+
+ public void shutUp( String ttsId, String text ) {
+ try {
+ mSpeakVoiceMap.remove( text );
+ mogoVoiceManager.shutUp( ttsId );
+ } catch ( Exception e ) {
+
+ }
+ }
+
+ /**
+ * 打断上一条正在播报的语音内容,仅在Speech上生效,TXZ为空实现
+ * 语音SDK生效版本从1.0.8.4版本起
+ */
+ public void breakOffSpeak() {
+ mVoiceClient.breakOffSpeak();
+ }
+
+ public void clearTTSCallback( String text ) {
+ try {
+ mSpeakVoiceMap.remove( text );
+ } catch ( Exception e ) {
+ e.printStackTrace();
+ }
+ }
+
+ @Override
+ public void onTtsStart( String ttsId, String text ) {
+ IMogoTTSCallback callBack = mSpeakVoiceMap.get( text );
+ if ( callBack != null ) {
+ callBack.onTTSStart( ttsId, text );
+ }
+ }
+
+ @Override
+ public void onTtsFinish( String ttsId, String text ) {
+ IMogoTTSCallback callBack = mSpeakVoiceMap.remove( text );
+ if ( callBack != null ) {
+ callBack.onTTSEnd( ttsId, text );
+ }
+ }
+
+ @Override
+ public void onTtsError( String ttsId, String text ) {
+ IMogoTTSCallback callBack = mSpeakVoiceMap.remove( text );
+ if ( callBack != null ) {
+ callBack.onTTSError( ttsId, text );
+ }
+ }
+
+ @Override
+ public void init( Context context ) {
+ if ( context != null ) {
+ mContext = context.getApplicationContext();
+ mVoiceClient = new VoiceClient( mContext );
+ mVoiceClient.setCallBack( this );
+ initFlushStatus();
+ initSpeech( context );
+ Logger.w( TAG, "voice is ready = %s", mHasFlush );
+ }
+ }
+
+ @Override
+ public void startAIAssist( Context context ) {
+ startAssistant( context, 1 );
+ }
+
+ @Override
+ public void startAIAssist( Context context, int status ) {
+ final Intent intent = new Intent();
+ intent.setFlags( Intent.FLAG_INCLUDE_STOPPED_PACKAGES );
+ intent.setAction( "pvetec.intent.action.txz.switch" );
+ intent.putExtra( "window_start_cancel", status );
+ intent.putExtra( "extra_switch_type", "window_start_cancel" );
+ Logger.d( TAG, "status = %d", status );
+ context.sendBroadcast( intent );
+ }
+}
diff --git a/tts/tts-zhi/src/main/AndroidManifest.xml b/tts/tts-zhi/src/main/AndroidManifest.xml
index a70d8aa41b..70631ddf64 100644
--- a/tts/tts-zhi/src/main/AndroidManifest.xml
+++ b/tts/tts-zhi/src/main/AndroidManifest.xml
@@ -1,5 +1,5 @@
+ package="com.mogo.tts.pad">
/
\ No newline at end of file
diff --git a/tts/tts-zhi/src/main/java/com/mogo/tts/zhi/ZhiTTS.java b/tts/tts-zhi/src/main/java/com/mogo/tts/pad/ZhiTTS.java
similarity index 99%
rename from tts/tts-zhi/src/main/java/com/mogo/tts/zhi/ZhiTTS.java
rename to tts/tts-zhi/src/main/java/com/mogo/tts/pad/ZhiTTS.java
index c2670b9f89..ef0bac205b 100644
--- a/tts/tts-zhi/src/main/java/com/mogo/tts/zhi/ZhiTTS.java
+++ b/tts/tts-zhi/src/main/java/com/mogo/tts/pad/ZhiTTS.java
@@ -1,4 +1,4 @@
-package com.mogo.tts.zhi;
+package com.mogo.tts.pad;
import android.content.Context;
import android.content.Intent;