更改联想PAD启动小智语音的时机

This commit is contained in:
董宏宇
2021-07-24 00:50:44 +08:00
committed by zhongchao
parent eaf0700cb8
commit 674c420771
6 changed files with 117 additions and 55 deletions

View File

@@ -331,18 +331,6 @@ public class MogoApplication extends AbsMogoApplication {
// }
ARouter.getInstance().navigation(ITestCrashReportProvider.class);
Log.i("timer", "cost " + (System.currentTimeMillis() - start) + "ms");
// try {
// if (DebugConfig.getCarMachineType() == DebugConfig.CAR_MACHINE_TYPE_LENOVO) {
// Intent intent = new Intent();
// intent.setComponent(new ComponentName("com.zhidao.speech",
// "com.zhidao.speech.MainActivity"));
// intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
// startActivity(intent);
// }
// } catch (Exception e) {
// e.printStackTrace();
// }
//
}
@Override

View File

@@ -5,6 +5,7 @@ import android.content.Context;
import android.content.Intent;
import android.os.Build;
import android.os.Bundle;
import android.provider.Settings;
import android.view.MotionEvent;
import android.view.View;
import android.view.Window;
@@ -18,6 +19,8 @@ import androidx.appcompat.app.AppCompatDelegate;
import com.mogo.commons.debug.DebugConfig;
import com.mogo.skin.support.MogoSkinManager;
import com.mogo.utils.SoftKeyBoardJobber;
import com.mogo.utils.logger.Logger;
import com.mogo.utils.permissions.PermissionsDialogUtils;
/**
* @author congtaowang
@@ -28,6 +31,8 @@ import com.mogo.utils.SoftKeyBoardJobber;
public abstract class MvpActivity< V extends IView, P extends Presenter< V > >
extends AppCompatActivity implements IView {
protected static final String TAG = "MvpActivity";
protected P mPresenter;
@Override
@@ -42,21 +47,30 @@ public abstract class MvpActivity< V extends IView, P extends Presenter< V > >
initViews();
mPresenter = createPresenter();
getLifecycle().addObserver( mPresenter );
//申请悬浮窗权限
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
// 检查是否有悬浮窗权限
if (Settings.canDrawOverlays(this)) {
startVoicePad();
}
} else {
startVoicePad();
}
}
@Override
protected void onResume() {
super.onResume();
hideBottomUIMenu();
startVoicePad();
}
/**
* 在Pad上拉起语音
*/
private void startVoicePad() {
public void startVoicePad() {
try {
if (DebugConfig.getCarMachineType() == DebugConfig.CAR_MACHINE_TYPE_LENOVO) {
Logger.d(TAG, "启动小智语音");
Intent intent = new Intent();
intent.setComponent(new ComponentName("com.zhidao.speech",
"com.zhidao.speech.MainActivity"));

View File

@@ -0,0 +1,59 @@
package com.mogo.utils.permissions;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.os.Build;
import android.provider.Settings;
import android.text.TextUtils;
/**
* @author xiaoyuzhou
* @date 2021/7/22 4:57 下午
*/
public class PermissionsDialogUtils {
public static AlertDialog mAlertDialog;
/**
* 打开APP的详情设置
*/
public static void openAppDetails(Activity activity, String msg, int CODE_WINDOW) {
if (mAlertDialog == null || !mAlertDialog.isShowing()) {
AlertDialog.Builder builder = new AlertDialog.Builder(activity);
if (TextUtils.isEmpty(msg)) {
builder.setMessage("请在 “应用信息 -> 权限” 中授予权限");
} else {
builder.setMessage("请在 “应用信息 -> 权限” 中授予【" + msg + "】权限");
}
builder.setPositiveButton("手动授权", (dialog, which) -> {
Intent intent = new Intent();
intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
intent.addCategory(Intent.CATEGORY_DEFAULT);
intent.setData(Uri.parse("package:" + activity.getPackageName()));
intent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
intent.addFlags(Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
activity.startActivityForResult(intent, CODE_WINDOW);
});
builder.setCancelable(false);
mAlertDialog = builder.show();
}
}
/**
* 跳转浮层权限获取页面
*
* @param activity
* @param CODE_WINDOW
*/
public static void openOverlayPermission(Activity activity, int CODE_WINDOW) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
activity.startActivityForResult(new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION,
Uri.parse("package:" + activity.getPackageName())), CODE_WINDOW);
}
}
}

View File

@@ -1,14 +1,10 @@
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.Build;
import android.os.Bundle;
import android.provider.Settings;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
import android.widget.FrameLayout;
@@ -43,6 +39,7 @@ import com.mogo.service.statusmanager.StatusDescriptor;
import com.mogo.skin.support.SkinMode;
import com.mogo.utils.NetworkUtils;
import com.mogo.utils.logger.Logger;
import com.mogo.utils.permissions.PermissionsDialogUtils;
import com.zhidao.adasconfig.api.AdasConfigApiController;
import com.zhidao.adasconfig.common.log.LoggerController;
import com.zhidao.autopilot.support.api.AutopilotServiceManage;
@@ -148,9 +145,7 @@ public class MainActivity extends MvpActivity<MainView, MainPresenter> implement
if (Settings.canDrawOverlays(this)) {
return;
}
// Intent intent=new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION);
// startActivityForResult(intent, REQUEST_CODE_DIALOG);
openAppDetails("显示悬浮窗");
PermissionsDialogUtils.openAppDetails(this, "显示悬浮窗", REQUEST_CODE_DIALOG);
}
}
@@ -468,43 +463,27 @@ public class MainActivity extends MvpActivity<MainView, MainPresenter> implement
} else {
// 弹出对话框告诉用户需要权限的原因, 并引导用户去应用权限管理中手动打开权限按钮
if (!isFirst) {
openAppDetails(null);
PermissionsDialogUtils.openAppDetails(this, null, REQUEST_CODE_DIALOG);
isFirst = true;
}
}
}
}
/**
* 打开APP的详情设置
*/
private void openAppDetails(String msg) {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
if (TextUtils.isEmpty(msg)) {
builder.setMessage("请在 “应用信息 -> 权限” 中授予权限");
} else {
builder.setMessage("请在 “应用信息 -> 权限” 中授予【" + msg + "】权限");
}
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();
}
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
Logger.d(TAG, "requestCode: " + requestCode + " resultCode: " + resultCode);
if (requestCode == REQUEST_CODE_DIALOG) {
//申请悬浮窗权限
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
// 检查是否有悬浮窗权限
if (Settings.canDrawOverlays(this)) {
startVoicePad();
}
} else {
startVoicePad();
}
}
}
}

View File

@@ -2,6 +2,8 @@ package com.mogo.tts.pad;
import android.content.Context;
import android.content.Intent;
import android.os.Build;
import android.provider.Settings;
import android.text.TextUtils;
import com.alibaba.android.arouter.facade.annotation.Route;
@@ -11,6 +13,7 @@ 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.mogo.utils.permissions.PermissionsDialogUtils;
import com.zhidao.auto.platform.voice.VoiceClient;
import com.zhidao.voicesdk.MogoVoiceManager;
import com.zhidao.voicesdk.MogoVoiceManagerImpl;
@@ -34,7 +37,7 @@ public
@Route( path = MogoTTSConstants.API_PATH )
class PadTTS implements IMogoTTS, VoiceClient.VoiceCmdCallBack, OnTtsListener {
private static final String TAG = "ZhiTTS";
private static final String TAG = "PadTTS";
private String mLastQAndASpeakText;
private boolean mHasFlush = false;
@@ -48,6 +51,7 @@ class PadTTS implements IMogoTTS, VoiceClient.VoiceCmdCallBack, OnTtsListener {
try {
mVoiceClient.unRegisterCustomWakeupCmd( cmd );
} catch ( Exception e ) {
e.printStackTrace();
}
}
}
@@ -79,6 +83,7 @@ class PadTTS implements IMogoTTS, VoiceClient.VoiceCmdCallBack, OnTtsListener {
* 初始化
*/
private void initSpeech( Context context ) {
Logger.d(TAG, "initSpeech");
mogoVoiceManager = MogoVoiceManagerImpl.getInstance();
mogoVoiceManager.init( context, new OnConnStatusListener() {
@Override
@@ -115,7 +120,7 @@ class PadTTS implements IMogoTTS, VoiceClient.VoiceCmdCallBack, OnTtsListener {
List< IMogoTTSCallback > cmdCallBacks = mCmdMap.get( cmd );
iterator = new ArrayList<>( cmdCallBacks ).iterator();
} catch ( Exception e ) {
e.printStackTrace();
}
while ( iterator != null && iterator.hasNext() ) {
IMogoTTSCallback callBack = iterator.next();
@@ -192,6 +197,7 @@ class PadTTS implements IMogoTTS, VoiceClient.VoiceCmdCallBack, OnTtsListener {
mVoiceClient.speakDefault( text );
}
} catch ( Exception e ) {
e.printStackTrace();
}
}
@@ -207,6 +213,7 @@ class PadTTS implements IMogoTTS, VoiceClient.VoiceCmdCallBack, OnTtsListener {
mVoiceClient.speakDefault( text );
}
} catch ( Exception e ) {
e.printStackTrace();
}
}
@@ -241,6 +248,7 @@ class PadTTS implements IMogoTTS, VoiceClient.VoiceCmdCallBack, OnTtsListener {
mVoiceClient.speakTypeText( text, preemptType );
}
} catch ( Exception e ) {
e.printStackTrace();
}
}
@@ -320,6 +328,7 @@ class PadTTS implements IMogoTTS, VoiceClient.VoiceCmdCallBack, OnTtsListener {
try {
mVoiceClient.unRegisterCustomWakeupCmd( cmd );
} catch ( Exception e ) {
e.printStackTrace();
}
mCacheUnWakeupCommands.remove( cmd );
}
@@ -340,6 +349,7 @@ class PadTTS implements IMogoTTS, VoiceClient.VoiceCmdCallBack, OnTtsListener {
try {
mVoiceClient.unRegisterCustomWakeupCmd( cmd );
} catch ( Exception e ) {
e.printStackTrace();
}
mCacheUnWakeupCommands.remove( cmd );
}
@@ -355,6 +365,8 @@ class PadTTS implements IMogoTTS, VoiceClient.VoiceCmdCallBack, OnTtsListener {
* @param status window_start_cancel 0 - 结束, 1 - 显示, 2 - 未激活调试进入
*/
public static void startAssistant( Context context, int status ) {
Logger.w(TAG, "startAssistant status = %d", status);
final Intent intent = new Intent();
intent.setFlags( Intent.FLAG_INCLUDE_STOPPED_PACKAGES );
intent.setAction( "pvetec.intent.action.txz.switch" );
@@ -378,6 +390,7 @@ class PadTTS implements IMogoTTS, VoiceClient.VoiceCmdCallBack, OnTtsListener {
private boolean isVoiceServiceReady( Context context ) {
if ( AppUtils.isProcessRunning( context, AppUtils.getPackageUid( context, "com.zhidao.speech" ) )) {
Logger.d( TAG, "pad txz is voiceServiceReady" );
return true;
} else if ( AppUtils.isProcessRunning( context, AppUtils.getPackageUid( context, "com.txznet.txz" ) )
&& AppUtils.isProcessRunning( context, AppUtils.getPackageUid( context, "com.txznet.adapter" ) ) ) {
@@ -398,6 +411,7 @@ class PadTTS implements IMogoTTS, VoiceClient.VoiceCmdCallBack, OnTtsListener {
mogoVoiceManager.toSpeak( text, -3, this );
}
} catch ( Exception e ) {
e.printStackTrace();
}
}
@@ -406,7 +420,7 @@ class PadTTS implements IMogoTTS, VoiceClient.VoiceCmdCallBack, OnTtsListener {
mSpeakVoiceMap.remove( text );
mogoVoiceManager.shutUp( ttsId );
} catch ( Exception e ) {
e.printStackTrace();
}
}
@@ -457,8 +471,15 @@ class PadTTS implements IMogoTTS, VoiceClient.VoiceCmdCallBack, OnTtsListener {
mVoiceClient = new VoiceClient( mContext );
mVoiceClient.setCallBack( this );
initFlushStatus();
initSpeech( context );
Logger.w( TAG, "voice is ready = %s", mHasFlush );
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
// 检查是否有悬浮窗权限
if (Settings.canDrawOverlays(context)) {
initSpeech(context);
}
} else {
initSpeech(context);
}
Logger.w(TAG, "voice is mHasFlush = %s mInitReady= %s", mHasFlush, mInitReady);
}
}
@@ -469,6 +490,7 @@ class PadTTS implements IMogoTTS, VoiceClient.VoiceCmdCallBack, OnTtsListener {
@Override
public void startAIAssist( Context context, int status ) {
Logger.w(TAG, "startAIAssist status = %d", status);
final Intent intent = new Intent();
intent.setFlags( Intent.FLAG_INCLUDE_STOPPED_PACKAGES );
intent.setAction( "pvetec.intent.action.txz.switch" );