From fde6a13651a611798fcce3a8306d725ecefd65a5 Mon Sep 17 00:00:00 2001 From: wangcongtao Date: Tue, 17 Mar 2020 21:26:10 +0800 Subject: [PATCH] opt --- app/build.gradle | 2 +- app/src/main/res/values/styles.xml | 2 +- config.gradle | 2 +- .../java/com/mogo/commons/voice/AIAssist.java | 120 ++++++++++++++---- .../com/mogo/map/impl/amap/hook/BnHooker.java | 10 +- modules/mogo-module-back/build.gradle | 2 - .../com/mogo/module/main/MainActivity.java | 12 +- .../com/mogo/module/main/MainPresenter.java | 2 +- .../res/layout/module_main_activity_main.xml | 5 +- .../src/main/res/values/styles.xml | 1 + .../com/mogo/module/map/MapPresenter.java | 7 +- .../com/mogo/module/service/MogoServices.java | 4 + .../actionmanager/MogoActionHandler.java | 7 +- .../service/marker/MapMarkerManager.java | 63 +++++---- .../module/service/receiver/MogoReceiver.java | 5 + 15 files changed, 175 insertions(+), 69 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 402b0d8a33..c6fa98b877 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -9,7 +9,7 @@ android { minSdkVersion rootProject.ext.android.minSdkVersion targetSdkVersion rootProject.ext.android.targetSdkVersion versionCode rootProject.ext.android.versionCode - versionName rootProject.ext.android.versionName + versionName "${rootProject.ext.android.versionName}_${getCurrentDate()}_${getGitCommit()}" applicationId rootProject.ext.android.applicationId testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index c97f8ce3ec..0973015c8f 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -16,7 +16,7 @@ @null @color/app_window_background false - true + false @style/Animation diff --git a/config.gradle b/config.gradle index 9deee6e29d..af1feb1af6 100644 --- a/config.gradle +++ b/config.gradle @@ -6,7 +6,7 @@ ext { minSdkVersion : 19, targetSdkVersion : 22, versionCode : 2, - versionName : "1.0.1", + versionName : "1.0.2", ] dependencies = [ 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 04f18a96ff..ff98cc73e5 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 @@ -1,9 +1,11 @@ package com.mogo.commons.voice; +import android.app.ActivityManager; import android.content.Context; import android.content.Intent; import android.text.TextUtils; +import com.mogo.utils.logger.Logger; import com.zhidao.auto.platform.voice.VoiceClient; import java.util.ArrayList; @@ -11,6 +13,7 @@ import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; /** * @author congtaowang @@ -20,8 +23,11 @@ import java.util.Map; */ public class AIAssist implements VoiceClient.VoiceCmdCallBack { + private static final String TAG = "AIAssist"; private static volatile AIAssist sInstance; - private String mLastQAndAspeakText; + private String mLastQAndASpeakText; + + private boolean mHasFlush = false; public static AIAssist getInstance( Context context ) { if ( sInstance == null ) { @@ -43,6 +49,7 @@ public class AIAssist implements VoiceClient.VoiceCmdCallBack { mQAndAMap.clear(); mVoiceClient.release(); mSpeakVoiceMap.clear(); + mCacheUnWakeupCommands.clear(); sInstance = null; } @@ -54,10 +61,15 @@ public class AIAssist implements VoiceClient.VoiceCmdCallBack { // 单独的语音播放 private Map< String, IMogoVoiceCmdCallBack > mSpeakVoiceMap = new HashMap<>(); + private Map< String, String[] > mCacheUnWakeupCommands = new ConcurrentHashMap<>(); + private AIAssist( Context context ) { // private constructor mVoiceClient = new VoiceClient( context.getApplicationContext() ); mVoiceClient.setCallBack( this ); + mHasFlush = isVoiceServiceReady( context ); + + Logger.w( TAG, "voice is ready = %s", mHasFlush ); } @Override @@ -65,6 +77,7 @@ public class AIAssist implements VoiceClient.VoiceCmdCallBack { if ( !mCmdMap.containsKey( cmd ) ) { return; } + Logger.d( TAG, "received command: %s", cmd ); final List< IMogoVoiceCmdCallBack > cmdCallBacks = mCmdMap.get( cmd ); Iterator< IMogoVoiceCmdCallBack > iterator = cmdCallBacks.iterator(); while ( iterator.hasNext() ) { @@ -77,8 +90,8 @@ public class AIAssist implements VoiceClient.VoiceCmdCallBack { @Override public void onCmdAction( String speakText ) { - if ( !TextUtils.isEmpty( mLastQAndAspeakText ) ) { - IMogoVoiceCmdCallBack cmdCallBack = mQAndAMap.remove( mLastQAndAspeakText ); + if ( !TextUtils.isEmpty( mLastQAndASpeakText ) ) { + IMogoVoiceCmdCallBack cmdCallBack = mQAndAMap.remove( mLastQAndASpeakText ); if ( cmdCallBack != null ) { cmdCallBack.onCmdAction( speakText ); } @@ -87,8 +100,8 @@ public class AIAssist implements VoiceClient.VoiceCmdCallBack { @Override public void onCmdCancel( String speakText ) { - if ( !TextUtils.isEmpty( mLastQAndAspeakText ) ) { - IMogoVoiceCmdCallBack cmdCallBack = mQAndAMap.remove( mLastQAndAspeakText ); + if ( !TextUtils.isEmpty( mLastQAndASpeakText ) ) { + IMogoVoiceCmdCallBack cmdCallBack = mQAndAMap.remove( mLastQAndASpeakText ); if ( cmdCallBack != null ) { cmdCallBack.onCmdCancel( speakText ); } @@ -98,7 +111,7 @@ public class AIAssist implements VoiceClient.VoiceCmdCallBack { @Override public void onSpeakEnd( String speakText ) { if ( mQAndAMap.containsKey( speakText ) ) { - mLastQAndAspeakText = speakText; + mLastQAndASpeakText = speakText; IMogoVoiceCmdCallBack cmdCallBack = mQAndAMap.get( speakText ); if ( cmdCallBack != null ) { cmdCallBack.onSpeakEnd( speakText ); @@ -114,8 +127,8 @@ public class AIAssist implements VoiceClient.VoiceCmdCallBack { @Override public void onSpeakSelectTimeOut( String speakText ) { if ( mQAndAMap.containsKey( speakText ) ) { - if ( TextUtils.equals( speakText, mLastQAndAspeakText ) ) { - mLastQAndAspeakText = null; + if ( TextUtils.equals( speakText, mLastQAndASpeakText ) ) { + mLastQAndASpeakText = null; } IMogoVoiceCmdCallBack cmdCallBack = mQAndAMap.remove( speakText ); if ( cmdCallBack != null ) { @@ -136,8 +149,10 @@ public class AIAssist implements VoiceClient.VoiceCmdCallBack { */ public void speakTTSVoice( String text, IMogoVoiceCmdCallBack callBack ) { try { - mSpeakVoiceMap.put( text, callBack ); - mVoiceClient.speakDefault( text ); + if ( mHasFlush ) { + mSpeakVoiceMap.put( text, callBack ); + mVoiceClient.speakDefault( text ); + } } catch ( Exception e ) { } } @@ -149,7 +164,9 @@ public class AIAssist implements VoiceClient.VoiceCmdCallBack { */ public void speakTTSVoice( String text ) { try { - mVoiceClient.speakDefault( text ); + if ( mHasFlush ) { + mVoiceClient.speakDefault( text ); + } } catch ( Exception e ) { } } @@ -163,8 +180,10 @@ public class AIAssist implements VoiceClient.VoiceCmdCallBack { */ public void speakTTSVoice( String text, VoicePreemptType type, IMogoVoiceCmdCallBack callBack ) { try { - mSpeakVoiceMap.put( text, callBack ); - mVoiceClient.speakTypeText( text, type.getPreemptType() ); + if ( mHasFlush ) { + mSpeakVoiceMap.put( text, callBack ); + mVoiceClient.speakTypeText( text, type.getPreemptType() ); + } } catch ( Exception e ) { } } @@ -175,8 +194,10 @@ public class AIAssist implements VoiceClient.VoiceCmdCallBack { * @param tts 播报内容 */ public void speakQAndACmd( String tts, IMogoVoiceCmdCallBack callBack ) { - mQAndAMap.put( tts, callBack ); - mVoiceClient.speakTtsAndRegistCmd( tts ); + if ( mHasFlush ) { + mQAndAMap.put( tts, callBack ); + mVoiceClient.speakTtsAndRegistCmd( tts ); + } } /** @@ -187,8 +208,10 @@ public class AIAssist implements VoiceClient.VoiceCmdCallBack { * @param cancelCmds 取消命令唤醒词 */ public void speakQAndACmd( String tts, String[] okCmds, String[] cancelCmds, IMogoVoiceCmdCallBack callBack ) { - mQAndAMap.put( tts, callBack ); - mVoiceClient.speakTtsAndRegistCmd( tts, okCmds, cancelCmds ); + if ( mHasFlush ) { + mQAndAMap.put( tts, callBack ); + mVoiceClient.speakTtsAndRegistCmd( tts, okCmds, cancelCmds ); + } } /** @@ -200,10 +223,17 @@ public class AIAssist implements VoiceClient.VoiceCmdCallBack { */ public void registerUnWakeupCommand( String cmd, String[] cmdWords, IMogoVoiceCmdCallBack callBack ) { if ( !mCmdMap.containsKey( cmd ) ) { - mCmdMap.put( cmd, new ArrayList< IMogoVoiceCmdCallBack >() ); + mCmdMap.put( cmd, new ArrayList<>() ); } mCmdMap.get( cmd ).add( callBack ); - mVoiceClient.registerCustomWakeupCmd( cmd, cmdWords ); + + if ( mHasFlush ) { + mVoiceClient.registerCustomWakeupCmd( cmd, cmdWords ); + mCacheUnWakeupCommands.remove( cmd ); + } else { + Logger.i( TAG, "cache un wakeup command2. %s", cmd ); + mCacheUnWakeupCommands.put( cmd, cmdWords ); + } } /** @@ -213,7 +243,13 @@ public class AIAssist implements VoiceClient.VoiceCmdCallBack { * @param cmdWords */ public void registerUnWakeupCommand( String cmd, String[] cmdWords ) { - mVoiceClient.registerCustomWakeupCmd( cmd, cmdWords ); + if ( mHasFlush ) { + mVoiceClient.registerCustomWakeupCmd( cmd, cmdWords ); + mCacheUnWakeupCommands.remove( cmd ); + } else { + Logger.i( TAG, "cache un wakeup command. %s", cmd ); + mCacheUnWakeupCommands.put( cmd, cmdWords ); + } } /** @@ -224,7 +260,7 @@ public class AIAssist implements VoiceClient.VoiceCmdCallBack { */ public synchronized void registerUnWakeupCommandCallback( String cmd, IMogoVoiceCmdCallBack callBack ) { if ( !mCmdMap.containsKey( cmd ) ) { - mCmdMap.put( cmd, new ArrayList< IMogoVoiceCmdCallBack >() ); + mCmdMap.put( cmd, new ArrayList<>() ); } mCmdMap.get( cmd ).add( callBack ); } @@ -237,6 +273,7 @@ public class AIAssist implements VoiceClient.VoiceCmdCallBack { public synchronized void unregisterUnWakeupCommand( String cmd ) { mCmdMap.remove( cmd ); mVoiceClient.unRegisterCustomWakeupCmd( cmd ); + mCacheUnWakeupCommands.remove( cmd ); } /** @@ -245,11 +282,13 @@ public class AIAssist implements VoiceClient.VoiceCmdCallBack { * @param cmd */ public synchronized void unregisterUnWakeupCommand( String cmd, IMogoVoiceCmdCallBack callBack ) { - if ( !mCmdMap.containsKey( cmd ) ) { - return; + mCacheUnWakeupCommands.remove( cmd ); + if ( mCmdMap.containsKey( cmd ) ) { + List< IMogoVoiceCmdCallBack > callBacks = mCmdMap.get( cmd ); + if ( callBacks != null ) { + callBacks.remove( callBack ); + } } - List< IMogoVoiceCmdCallBack > callBacks = mCmdMap.get( cmd ); - callBacks.remove( callBack ); } public static void startAssistant( Context context ) { @@ -260,4 +299,35 @@ public class AIAssist implements VoiceClient.VoiceCmdCallBack { intent.putExtra( "extra_switch_type", "window_start_cancel" ); context.sendBroadcast( intent ); } + + public synchronized void flush() { + if ( mCacheUnWakeupCommands.isEmpty() ) { + return; + } + mHasFlush = true; + Logger.d( TAG, "flush cache voice command when voice service ready." ); + for ( String cmd : mCacheUnWakeupCommands.keySet() ) { + registerUnWakeupCommand( cmd, mCacheUnWakeupCommands.get( cmd ) ); + } + mCacheUnWakeupCommands.clear(); + } + + private boolean isVoiceServiceReady( Context context ) { + if ( isRunningTaskExist( context, "com.zhidao.speech" ) + && isRunningTaskExist( context, "com.zhidao.speech.adapter" ) ) { + return true; + } + return false; + } + + private boolean isRunningTaskExist( Context context, String processName ) { + ActivityManager am = ( ActivityManager ) context.getSystemService( Context.ACTIVITY_SERVICE ); + List< ActivityManager.RunningAppProcessInfo > processList = am.getRunningAppProcesses(); + for ( ActivityManager.RunningAppProcessInfo info : processList ) { + if ( info.processName.equals( processName ) ) { + return true; + } + } + return false; + } } diff --git a/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/hook/BnHooker.java b/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/hook/BnHooker.java index 420548776c..d40ead278a 100644 --- a/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/hook/BnHooker.java +++ b/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/hook/BnHooker.java @@ -1,6 +1,7 @@ package com.mogo.map.impl.amap.hook; import com.amap.api.maps.AMap; +import com.autonavi.amap.mapcore.interfaces.IAMap; import com.autonavi.base.amap.api.mapcore.IAMapDelegate; import com.autonavi.base.amap.mapcore.interfaces.IAMapListener; import com.mogo.utils.logger.Logger; @@ -33,7 +34,12 @@ public class BnHooker implements InvocationHandler { host = field.get( map ); Object object = Proxy.newProxyInstance( BnHooker.class.getClassLoader(), - new Class[]{com.amap.api.col.n3.ft.a.class, IAMapDelegate.class, IAMapListener.class}, + new Class[]{ + com.amap.api.col.n3.ft.a.class, + IAMapDelegate.class, + IAMapListener.class, + IAMap.class + }, this ); field.set( map, object ); @@ -45,7 +51,7 @@ public class BnHooker implements InvocationHandler { return method.invoke( host, 10 ); } if ( method.getName().equals( "drawFrame" ) ) { - Logger.d(TAG, "drawFrame"); + Logger.d( TAG, "drawFrame" ); } return method.invoke( host, args ); } diff --git a/modules/mogo-module-back/build.gradle b/modules/mogo-module-back/build.gradle index f0c93b2d40..8ceb777bcb 100644 --- a/modules/mogo-module-back/build.gradle +++ b/modules/mogo-module-back/build.gradle @@ -53,7 +53,6 @@ dependencies { implementation rootProject.ext.dependencies.mogocommons implementation rootProject.ext.dependencies.mogoserviceapi implementation rootProject.ext.dependencies.modulecommon - implementation rootProject.ext.dependencies.moduleshare } else { implementation project(":libraries:mogo-map") implementation project(":libraries:mogo-map-api") @@ -61,7 +60,6 @@ dependencies { implementation project(":foudations:mogo-commons") implementation project(':services:mogo-service-api') implementation project(':modules:mogo-module-common') - implementation project(':modules:mogo-module-share') } } 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 d30893b844..006760a9ad 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 @@ -117,6 +117,10 @@ public class MainActivity extends MvpActivity< MainView, MainPresenter > impleme provider = mCardModulesAdapter.getProvider( mCurrentPosition ); mMogoModuleHandler.setModuleEnable( provider.getModuleName() ); mMogoCardManager.invoke( position, mMogoModuleHandler.getCurrentModuleName() ); + + mMogoStatusManager.setUserInteractionStatus( TAG, true, false ); + mMogoMapUIController.setLockZoom( 16 ); + mMogoMapUIController.recoverLockMode(); } catch ( Exception e ) { e.printStackTrace(); } @@ -220,8 +224,6 @@ public class MainActivity extends MvpActivity< MainView, MainPresenter > impleme public void loadModules() { final long start = System.currentTimeMillis(); - getWindow().setBackgroundDrawable( null ); - MogoModulePaths.addModule( new MogoModule( ServiceConst.PATH_REFRESH_STRATEGY, ServiceConst.PATH_REFRESH_STRATEGY ) ); mMogoModuleHandler = new MogoModulesManager( this ); @@ -240,11 +242,11 @@ public class MainActivity extends MvpActivity< MainView, MainPresenter > impleme loadContainerModules(); mMogoModuleHandler.loadModules(); mPresenter.delayOperations(); + hideCoverUpLayout(); // 显示左边遮罩 mLeftShadowFrame.setVisibility( View.VISIBLE ); mTopShadowFrame.setVisibility( View.VISIBLE ); - mCardsBkg.setVisibility( View.VISIBLE ); // 右移地图中心点 mMogoMapUIController = mMogoMapService.getMapUIController(); @@ -293,6 +295,8 @@ public class MainActivity extends MvpActivity< MainView, MainPresenter > impleme @Override public void hideCoverUpLayout() { mCoverUpLayout.setVisibility( View.GONE ); + mCardsBkg.setVisibility( View.VISIBLE ); + mCardCoverUpBottomLayout.setVisibility( View.VISIBLE ); } @Override @@ -303,8 +307,6 @@ public class MainActivity extends MvpActivity< MainView, MainPresenter > impleme mCardsContainer.setOffscreenPageLimit( providers.size() ); //mCardsContainer.setPageTransformer( true, mTransformer ); mCardsContainer.setAdapter( mCardModulesAdapter ); - - mCardCoverUpBottomLayout.setVisibility( View.VISIBLE ); } @NonNull 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 e498d26f28..12db43890c 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 @@ -116,7 +116,7 @@ public class MainPresenter extends Presenter< MainView > { */ public void delayOperations() { mMsgHandler.sendEmptyMessageDelayed( MainConstants.MSG_LOAD_CARD_MODULES, 100L ); - mMsgHandler.sendEmptyMessageDelayed( MainConstants.MSG_HIDE_MAP_COVER_FRAME, 0L ); + mMsgHandler.sendEmptyMessageDelayed( MainConstants.MSG_HIDE_MAP_COVER_FRAME, 150L ); } public void postTrackLastCardShowEvent( IMogoModuleProvider provider ) { diff --git a/modules/mogo-module-main/src/main/res/layout/module_main_activity_main.xml b/modules/mogo-module-main/src/main/res/layout/module_main_activity_main.xml index 9a2834ad76..0d8eeb964d 100644 --- a/modules/mogo-module-main/src/main/res/layout/module_main_activity_main.xml +++ b/modules/mogo-module-main/src/main/res/layout/module_main_activity_main.xml @@ -15,14 +15,14 @@ android:layout_width="match_parent" android:layout_height="@dimen/module_main_top_shadow_height" android:background="@drawable/module_main_dw_top_frame_bkg" - android:visibility="invisible" /> + android:visibility="gone" /> + android:visibility="gone" /> diff --git a/modules/mogo-module-main/src/main/res/values/styles.xml b/modules/mogo-module-main/src/main/res/values/styles.xml index 3a31eb4e55..cfde8a6ca8 100644 --- a/modules/mogo-module-main/src/main/res/values/styles.xml +++ b/modules/mogo-module-main/src/main/res/values/styles.xml @@ -11,6 +11,7 @@ false @style/MainAnimation @style/noCheckboxStyle + false @style/noCheckboxStyle diff --git a/modules/mogo-module-map/src/main/java/com/mogo/module/map/MapPresenter.java b/modules/mogo-module-map/src/main/java/com/mogo/module/map/MapPresenter.java index 01a06696a9..2425716220 100644 --- a/modules/mogo-module-map/src/main/java/com/mogo/module/map/MapPresenter.java +++ b/modules/mogo-module-map/src/main/java/com/mogo/module/map/MapPresenter.java @@ -25,6 +25,7 @@ import com.mogo.service.module.IMogoSearchManager; import com.mogo.service.voice.IMogoVoiceListener; import com.mogo.service.voice.IMogoVoiceManager; import com.mogo.utils.ResourcesHelper; +import com.mogo.utils.UiThreadHandler; import com.mogo.utils.WindowUtils; import com.mogo.utils.logger.Logger; @@ -71,7 +72,11 @@ public class MapPresenter extends Presenter implements mView.getUIController().setTrafficEnabled(opera_type == 0); } else if (type == 1) { mView.getUIController().changeZoom(opera_type == 0); - mMogoMapService.getMapUIController().recoverLockMode();//缩放地图会导致锁车发生改变,这里强制锁车 + UiThreadHandler.postDelayed( ()->{ + int lockZoomLevel = opera_type == 0 ? ( ( int ) mView.getUIController().getZoomLevel() ) : ( ( int ) (mView.getUIController().getZoomLevel() + 0.5 )); + mView.getUIController().setLockZoom( lockZoomLevel ); + mMogoMapService.getMapUIController().recoverLockMode();//缩放地图会导致锁车发生改变,这里强制锁车 + }, 1_000 ); } else if (type == 2) { if (opera_type == 0) { mView.getUIController().changeMapMode(EnumMapUI.CarUp_2D); diff --git a/modules/mogo-module-service/src/main/java/com/mogo/module/service/MogoServices.java b/modules/mogo-module-service/src/main/java/com/mogo/module/service/MogoServices.java index 61b4338db9..46e7b631fa 100644 --- a/modules/mogo-module-service/src/main/java/com/mogo/module/service/MogoServices.java +++ b/modules/mogo-module-service/src/main/java/com/mogo/module/service/MogoServices.java @@ -301,6 +301,7 @@ public class MogoServices implements IMogoMapListener, mIntentManager.registerIntentListener( ServiceConst.COMMAND_SWITCH_CARD, this ); mIntentManager.registerIntentListener( MogoReceiver.ACTION_ADAS_STATUS, this ); mIntentManager.registerIntentListener( ServiceConst.COMMAND_OPERATION, this ); + mIntentManager.registerIntentListener( MogoReceiver.ACTION_VOICE_READY, this ); mADASController = apis.getAdasControllerApi(); mLauncher = apis.getLauncherApi(); @@ -362,6 +363,7 @@ public class MogoServices implements IMogoMapListener, // 小智语音 filter.addAction( MogoReceiver.ACTION_VOICE_UI ); filter.addAction( MogoReceiver.ACTION_ADAS_STATUS ); + filter.addAction( MogoReceiver.ACTION_VOICE_READY ); try { context.getApplicationContext().registerReceiver( mAIAssistReceiver, filter ); Logger.i( TAG, "register voice receiver." ); @@ -786,6 +788,8 @@ public class MogoServices implements IMogoMapListener, } catch ( JSONException e ) { e.printStackTrace(); } + } else if( MogoReceiver.ACTION_VOICE_READY.equals( command ) ){ + AIAssist.getInstance( mContext ).flush(); } } diff --git a/modules/mogo-module-service/src/main/java/com/mogo/module/service/actionmanager/MogoActionHandler.java b/modules/mogo-module-service/src/main/java/com/mogo/module/service/actionmanager/MogoActionHandler.java index 71d13ecbe1..ae42115283 100644 --- a/modules/mogo-module-service/src/main/java/com/mogo/module/service/actionmanager/MogoActionHandler.java +++ b/modules/mogo-module-service/src/main/java/com/mogo/module/service/actionmanager/MogoActionHandler.java @@ -107,7 +107,10 @@ public class MogoActionHandler implements IMogoActionManager { @Override public void bizInvoke( String biz, int position, Object data ) { if ( mBizActionDoneListener != null ) { - mBizActionDoneListener.onBizActionDone( biz, position, data ); + try { + mBizActionDoneListener.onBizActionDone( biz, position, data ); + } catch ( Exception e ) { + } } } -} +} \ No newline at end of file diff --git a/modules/mogo-module-service/src/main/java/com/mogo/module/service/marker/MapMarkerManager.java b/modules/mogo-module-service/src/main/java/com/mogo/module/service/marker/MapMarkerManager.java index 07353d8002..e3ff2c1362 100644 --- a/modules/mogo-module-service/src/main/java/com/mogo/module/service/marker/MapMarkerManager.java +++ b/modules/mogo-module-service/src/main/java/com/mogo/module/service/marker/MapMarkerManager.java @@ -30,6 +30,7 @@ import com.mogo.service.cardmanager.IMogoCardChangedListener; import com.mogo.service.connection.IMogoOnMessageListener; import com.mogo.service.module.IMogoBizActionDoneListener; import com.mogo.utils.ThreadPoolService; +import com.mogo.utils.UiThreadHandler; import com.mogo.utils.logger.Logger; import org.json.JSONArray; @@ -342,7 +343,9 @@ public class MapMarkerManager implements IMogoMarkerClickListener, // 解析不同的Marker类型,然后对应的进行绘制 mLastDataResult = response.getResult(); - dispatchDataToBiz(); + UiThreadHandler.post( () -> { + dispatchDataToBiz(); + } ); // 语音触发的在线车辆搜索,采用增量的形式绘制 if ( mIsAISearchOnlineData = isOnlineCarDataOnly( mLastDataResult ) ) { @@ -601,9 +604,12 @@ public class MapMarkerManager implements IMogoMarkerClickListener, List< MarkerShareMusic > shareMusicList = markerCardResult.getShareMusic(); List< MarkerNoveltyInfo > noveltyInfoList = markerCardResult.getNoveltyInfo(); - fillNumberTrackEventBody( array, 3, onlineCarList.size() ); - fillNumberTrackEventBody( array, 1, exploreWayList.size() ); - fillNumberTrackEventBody( array, 4, shareMusicList.size() ); + int size = onlineCarList == null ? 0 : onlineCarList.size(); + fillNumberTrackEventBody( array, 3, size ); + size = exploreWayList == null ? 0 : exploreWayList.size(); + fillNumberTrackEventBody( array, 1, size ); + size = shareMusicList == null ? 0 : shareMusicList.size(); + fillNumberTrackEventBody( array, 4, size ); int num_gas_station = 0; int num_traffic_check = 0; @@ -611,28 +617,31 @@ public class MapMarkerManager implements IMogoMarkerClickListener, int num_shop_discount = 0; int num_fours_shop = 0; - for ( MarkerNoveltyInfo markerNoveltyInfo : noveltyInfoList ) { - if ( markerNoveltyInfo == null ) { - continue; - } - switch ( markerNoveltyInfo.getPoiType() ) { - case MarkerPoiTypeEnum.GAS_STATION: - num_gas_station++; - break; - case MarkerPoiTypeEnum.TRAFFIC_CHECK: - num_traffic_check++; - break; - case MarkerPoiTypeEnum.ROAD_CLOSED: - num_road_closed++; - break; - case MarkerPoiTypeEnum.SHOP_DISCOUNT: - num_shop_discount++; - break; - case MarkerPoiTypeEnum.FOURS_4S: - num_fours_shop++; - break; + if ( noveltyInfoList != null ) { + for ( MarkerNoveltyInfo markerNoveltyInfo : noveltyInfoList ) { + if ( markerNoveltyInfo == null ) { + continue; + } + switch ( markerNoveltyInfo.getPoiType() ) { + case MarkerPoiTypeEnum.GAS_STATION: + num_gas_station++; + break; + case MarkerPoiTypeEnum.TRAFFIC_CHECK: + num_traffic_check++; + break; + case MarkerPoiTypeEnum.ROAD_CLOSED: + num_road_closed++; + break; + case MarkerPoiTypeEnum.SHOP_DISCOUNT: + num_shop_discount++; + break; + case MarkerPoiTypeEnum.FOURS_4S: + num_fours_shop++; + break; + } } } + fillNumberTrackEventBody( array, 2, num_gas_station ); fillNumberTrackEventBody( array, 6, num_road_closed ); fillNumberTrackEventBody( array, 5, num_traffic_check ); @@ -793,9 +802,11 @@ public class MapMarkerManager implements IMogoMarkerClickListener, IMogoMarkerManager markerManager = MarkerServiceHandler.getMarkerManager(); List< IMogoMarker > markers = markerManager.getMarkers( biz ); if ( markers != null ) { - IMogoMarker marker = markers.get( position ); - if ( marker != null ) { + try { + IMogoMarker marker = markers.get( position ); switchMarkerOpenStatus( marker ); + } catch ( Exception e ) { + Logger.e( TAG, e, "occur error." ); } } } diff --git a/modules/mogo-module-service/src/main/java/com/mogo/module/service/receiver/MogoReceiver.java b/modules/mogo-module-service/src/main/java/com/mogo/module/service/receiver/MogoReceiver.java index b608024bbb..7fe7f86535 100644 --- a/modules/mogo-module-service/src/main/java/com/mogo/module/service/receiver/MogoReceiver.java +++ b/modules/mogo-module-service/src/main/java/com/mogo/module/service/receiver/MogoReceiver.java @@ -50,6 +50,11 @@ public class MogoReceiver extends BroadcastReceiver { */ public static final String ACTION_ADAS_STATUS = "com.zhidao.autopilot.adas.msg"; + /** + * 小智语音准备就绪 + */ + public static final String ACTION_VOICE_READY = "com.zhidao.auto.AIAssist.ready"; + private IMogoIntentManager mMogoIntentManager; public MogoReceiver( Context context ) {