diff --git a/modules/mogo-module-service/src/main/java/com/mogo/module/service/intent/MockIntentHandler.java b/modules/mogo-module-service/src/main/java/com/mogo/module/service/intent/MockIntentHandler.java index 6339b4f7f8..89a0c1fb74 100644 --- a/modules/mogo-module-service/src/main/java/com/mogo/module/service/intent/MockIntentHandler.java +++ b/modules/mogo-module-service/src/main/java/com/mogo/module/service/intent/MockIntentHandler.java @@ -338,6 +338,13 @@ public class MockIntentHandler implements IntentHandler { case 30: MarkerServiceHandler.getMapService().getMapUIController().forceRender(); break; + case 31: + Intent intent3 = new Intent(); + intent3.setAction( "AUTONAVI_STANDARD_BROADCAST_RECV" ); + intent3.putExtra( "KEY_TYPE", 12404 ); + intent3.putExtra( "EXTRA_REQUEST_AUTO_STATE", 0 ); + context.sendBroadcast( intent3 ); + break; } } diff --git a/modules/mogo-module-widgets/src/main/java/com/mogo/module/widgets/AutoNaviIntentHandler.java b/modules/mogo-module-widgets/src/main/java/com/mogo/module/widgets/AutoNaviIntentHandler.java index 120e4e90ed..d0c1562a48 100644 --- a/modules/mogo-module-widgets/src/main/java/com/mogo/module/widgets/AutoNaviIntentHandler.java +++ b/modules/mogo-module-widgets/src/main/java/com/mogo/module/widgets/AutoNaviIntentHandler.java @@ -23,6 +23,7 @@ import com.mogo.utils.CommonUtils; import com.mogo.utils.LaunchUtils; import com.mogo.utils.ResourcesHelper; import com.mogo.utils.TipToast; +import com.mogo.utils.UiThreadHandler; import com.mogo.utils.logger.Logger; import java.util.HashMap; @@ -40,6 +41,9 @@ class AutoNaviIntentHandler implements IMogoVoiceCmdCallBack { private static final String TAG = "AutoNaviIntentHandler"; public static final String OPEN = "OPEN_APP"; + // 显示浮窗时,同步状态时间间隔 + public static final long SYNC_INTERVAL = 60_000L; + private static volatile AutoNaviIntentHandler sInstance; private AutoNaviIntentHandler() { @@ -70,27 +74,33 @@ class AutoNaviIntentHandler implements IMogoVoiceCmdCallBack { sInstance = null; } + private Runnable mAutoNaviSyncRunnable = () -> { + if ( mWindowManagerView != null && mWindowManagerView.isShowing() ) { + syncAutoNaviForgroundStatus( AbsMogoApplication.getApp() ); + } + }; + public void handle( Context context, Intent intent ) { int keyType = intent.getIntExtra( "KEY_TYPE", 0 ); + Logger.d( TAG, "KEY_TYPE = " + keyType ); switch ( keyType ) { case 10021: closeEntrance(); break; case 10019: int extraState = intent.getIntExtra( "EXTRA_STATE", -1 ); + Logger.d( TAG, "EXTRA_STATE = " + extraState ); switch ( extraState ) { - case 3: + case 3: // 前台 syncAutoNaviNavingStatus( context ); break; - case 4: + case 4: // 后台 + case 9: // 非导航 closeEntrance(); break; - case 8: + case 8: // 导航 showEntrance( context ); break; - case 9: - closeEntrance(); - break; } break; } @@ -106,6 +116,7 @@ class AutoNaviIntentHandler implements IMogoVoiceCmdCallBack { } private void showEntrance( Context context ) { + if ( mWindowManagerView == null ) { mWindowManagerView = new WindowManagerView.Builder( AbsMogoApplication.getApp() ) .contentView( R.layout.module_widgets_app_entrance ) @@ -125,9 +136,16 @@ class AutoNaviIntentHandler implements IMogoVoiceCmdCallBack { if ( mWindowManagerView.isShowing() ) { return; } + if ( MogoApisHandler.getInstance() + .getApis() + .getStatusManagerApi() + .isMainPageOnResume() ) { + return; + } mWindowManagerView.show(); MogoWidgetManger.getInstance().getApis().getAnalyticsApi().track( "NAVI_button_show", null ); AIAssist.getInstance( context ).registerUnWakeupCommand( OPEN, new String[]{"切换到辅助驾驶模式"}, this ); + UiThreadHandler.postDelayed( mAutoNaviSyncRunnable, SYNC_INTERVAL ); } catch ( Exception e ) { Logger.e( TAG, e, "error." ); } @@ -221,6 +239,7 @@ class AutoNaviIntentHandler implements IMogoVoiceCmdCallBack { } public void closeEntrance() { + UiThreadHandler.removeCallbacks( mAutoNaviSyncRunnable ); if ( mWindowManagerView == null ) { return; } @@ -233,6 +252,7 @@ class AutoNaviIntentHandler implements IMogoVoiceCmdCallBack { } public void syncAutoNaviForgroundStatus( Context context ) { + Logger.d( TAG, "查询高德前后台状态" ); Intent intent = new Intent(); intent.setAction( "AUTONAVI_STANDARD_BROADCAST_RECV" ); intent.putExtra( "KEY_TYPE", 12404 ); @@ -241,6 +261,7 @@ class AutoNaviIntentHandler implements IMogoVoiceCmdCallBack { } public void syncAutoNaviNavingStatus( Context context ) { + Logger.d( TAG, "查询高德导航状态" ); Intent intent = new Intent(); intent.setAction( "AUTONAVI_STANDARD_BROADCAST_RECV" ); intent.putExtra( "KEY_TYPE", 12404 ); diff --git a/modules/mogo-module-widgets/src/main/java/com/mogo/module/widgets/MogoWidgetManger.java b/modules/mogo-module-widgets/src/main/java/com/mogo/module/widgets/MogoWidgetManger.java index 0032be1ef0..8d1e7d41bc 100644 --- a/modules/mogo-module-widgets/src/main/java/com/mogo/module/widgets/MogoWidgetManger.java +++ b/modules/mogo-module-widgets/src/main/java/com/mogo/module/widgets/MogoWidgetManger.java @@ -10,6 +10,7 @@ import com.mogo.service.IMogoServiceApis; import com.mogo.service.intent.IMogoIntentListener; import com.mogo.service.statusmanager.IMogoStatusChangedListener; import com.mogo.service.statusmanager.StatusDescriptor; +import com.mogo.utils.UiThreadHandler; public /** @@ -65,7 +66,9 @@ class MogoWidgetManger implements IMogoNaviListener2, IMogoIntentListener, IMogo initMapStatusListener(); initStatusListener(); initIntentListener(); - AutoNaviIntentHandler.getInstance().syncAutoNaviForgroundStatus( mContext ); + UiThreadHandler.postDelayed( ()->{ + AutoNaviIntentHandler.getInstance().syncAutoNaviForgroundStatus( mContext ); + }, 1_000L ); } private void initMapStatusListener() { diff --git a/modules/mogo-module-widgets/src/main/java/com/mogo/module/widgets/MogoWidgetsProvider.java b/modules/mogo-module-widgets/src/main/java/com/mogo/module/widgets/MogoWidgetsProvider.java index 6cc91544a3..a4985601b7 100644 --- a/modules/mogo-module-widgets/src/main/java/com/mogo/module/widgets/MogoWidgetsProvider.java +++ b/modules/mogo-module-widgets/src/main/java/com/mogo/module/widgets/MogoWidgetsProvider.java @@ -94,6 +94,6 @@ class MogoWidgetsProvider implements IMogoModuleProvider { Logger.d( TAG, "init." ); UiThreadHandler.postDelayed( () -> { MogoWidgetManger.getInstance().init( context ); - }, 5500 ); + }, 6_000L ); } }