diff --git a/foudations/mogo-base-services-apk/src/main/java/com/mogo/base/services/passport/PassportManager.java b/foudations/mogo-base-services-apk/src/main/java/com/mogo/base/services/passport/PassportManager.java index 2a23051695..ede1bc990e 100644 --- a/foudations/mogo-base-services-apk/src/main/java/com/mogo/base/services/passport/PassportManager.java +++ b/foudations/mogo-base-services-apk/src/main/java/com/mogo/base/services/passport/PassportManager.java @@ -10,6 +10,7 @@ import com.mogo.service.passport.IMogoPassportManager; import com.mogo.service.passport.IMogoTicketCallback; import com.mogo.utils.logger.Logger; import com.zhidao.account.sdk.AccountClientManager; +import com.zhidao.account.sdk.Environment; import com.zhidao.account.sdk.callback.TicketInfoCallback; import com.zhidao.account.sdk.network.NetEnvironManager; @@ -27,13 +28,14 @@ class PassportManager implements IMogoPassportManager { private static volatile PassportManager sInstance; - private PassportManager(){} + private PassportManager() { + } @Keep - public static PassportManager getInstance(){ - if( sInstance == null ){ - synchronized( PassportManager.class ) { - if( sInstance == null ){ + public static PassportManager getInstance() { + if ( sInstance == null ) { + synchronized ( PassportManager.class ) { + if ( sInstance == null ) { sInstance = new PassportManager(); } } @@ -41,7 +43,7 @@ class PassportManager implements IMogoPassportManager { return sInstance; } - public synchronized void release(){ + public synchronized void release() { sInstance = null; } @@ -77,11 +79,25 @@ class PassportManager implements IMogoPassportManager { @Override public void init( Context context ) { + AccountClientManager.init( context.getApplicationContext(), getNetEnvironment(), NetEnvironManager.OS_2C, "os2.0-launcher" ); + } + + private Environment getNetEnvironment() { int mode = DebugConfig.getNetMode(); if ( mode == DebugConfig.NET_MODE_DEMO ) { // 演示环境用 qa 的 mode = DebugConfig.NET_MODE_QA; } - AccountClientManager.init( context.getApplicationContext(), mode, NetEnvironManager.OS_2C, "os2.0-launcher" ); + switch ( mode ) { + case DebugConfig.NET_MODE_DEV: + return Environment.dev; + case DebugConfig.NET_MODE_DEMO: + case DebugConfig.NET_MODE_QA: + return Environment.qa; + case DebugConfig.NET_MODE_RELEASE: + default: + return Environment.release; + + } } } diff --git a/modules/mogo-module-map/src/main/java/com/mogo/module/map/AutoNaviBroadcastReceiver.java b/modules/mogo-module-map/src/main/java/com/mogo/module/map/AutoNaviBroadcastReceiver.java new file mode 100644 index 0000000000..242bbbce63 --- /dev/null +++ b/modules/mogo-module-map/src/main/java/com/mogo/module/map/AutoNaviBroadcastReceiver.java @@ -0,0 +1,127 @@ +package com.mogo.module.map; + +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.content.IntentFilter; +import android.text.TextUtils; + +import com.mogo.commons.AbsMogoApplication; +import com.mogo.map.navi.MogoNaviConfig; +import com.mogo.map.uicontroller.EnumMapUI; +import com.mogo.utils.logger.Logger; + +public +/** + * @author congtaowang + * @since 2020/7/30 + * + * 接收高德地图车机版广播 + */ +class AutoNaviBroadcastReceiver extends BroadcastReceiver { + + public static final String TAG = "AutoNaviBroadcastReceiver"; + + public static final String AUTONAVI_STANDARD_BROADCAST_RECV = "AUTONAVI_STANDARD_BROADCAST_RECV"; + + public void register() { + IntentFilter inputFilter = new IntentFilter(); + inputFilter.addAction( AUTONAVI_STANDARD_BROADCAST_RECV ); + AbsMogoApplication.getApp().registerReceiver( this, inputFilter ); + } + + public void unregister() { + mCallback = null; + AbsMogoApplication.getApp().unregisterReceiver( this ); + } + + private OnMapControlCallback mCallback; + + public void setCallback( OnMapControlCallback mCallback ) { + this.mCallback = mCallback; + } + + @Override + public void onReceive( Context context, Intent intent ) { + String action = intent.getAction(); + + int keyType = intent.getIntExtra( "KEY_TYPE", 0 ); + int type = intent.getIntExtra( "EXTRA_TYPE", -1 ); + int operaType = intent.getIntExtra( "EXTRA_OPERA", -1 ); + + Logger.d( TAG, "action = %s, keyType=%s, type=%s, operType=%s", action, keyType, type, operaType ); + + if ( !TextUtils.equals( action, AUTONAVI_STANDARD_BROADCAST_RECV ) ) { + return; + } + + if ( mCallback == null ) { + return; + } + + if ( keyType == 10027 ) { + if ( type == 0 ) { + mCallback.onTrafficModeChanged( operaType == 0 ); + } else if ( type == 2 ) { + if ( operaType == 0 ) { + mCallback.onCameraModeChanged( EnumMapUI.CarUp_2D ); + } else if ( operaType == 1 ) { + mCallback.onCameraModeChanged( EnumMapUI.NorthUP_2D ); + } else if ( operaType == 2 ) { + mCallback.onCameraModeChanged( EnumMapUI.CarUp_3D ); + } + } + } else if ( keyType == 10048 ) { + //0:自动; 1:白天; 2:黑夜; + int dayNightMode = intent.getIntExtra( "EXTRA_DAY_NIGHT_MODE", -1 ); + if ( dayNightMode == 0 ) { + mCallback.onDayNightModeChanged( EnumMapUI.Type_AUTO_LIGHT_Night ); + } else if ( dayNightMode == 1 ) { + mCallback.onDayNightModeChanged( EnumMapUI.Type_Light ); + } else if ( dayNightMode == 2 ) { + mCallback.onDayNightModeChanged( EnumMapUI.Type_Night ); + } + } else if ( keyType == 10049 ) { + //继续导航 + boolean extraEnduranceData = intent.getBooleanExtra( "EXTRA_ENDURANCE_DATA", false ); + if ( extraEnduranceData ) { + mCallback.onContinueNavi(); + } + } else if ( keyType == 20009 ) { + mCallback.onOpenNavi(); + } else if ( keyType == 10038 || keyType == 10007 ) { + double lat; + double lon; + + if ( type == 10007 ) { + lat = intent.getDoubleExtra( "ENTRY_LAT", 0.0 ); + lon = intent.getDoubleExtra( "ENTRY_LON", 0.0 ); + } else { + lat = intent.getDoubleExtra( "LAT", 0.0 ); + lon = intent.getDoubleExtra( "LON", 0.0 ); + } + mCallback.onCalculatePath( lon, lat ); + } else if ( keyType == 10021 ) { + mCallback.onStopNaviInternal( intent ); + } else if ( keyType == 10005 ) { + // 仅在导航场景下,⽀持第三⽅进⾏路线偏好的重新选择。 + // 避免收费 | 1 + // 多策略算路 | 2 + // 不走高速 | 3 + // 躲避拥堵 | 4 + // 不走高速且避免收费 | 5 + // 不走高速且躲避拥堵 | 6 + // 躲避收费和拥堵 | 7 + // 不走高速躲避收费和拥堵 | 8 + // 高速优先 | 20 + // 躲避拥堵且高速优先 | 24 + int prefer = intent.getIntExtra( "NAVI_ROUTE_PREFER", 0 ); + MogoNaviConfig config = new MogoNaviConfig().congestion( prefer == 4 ) + .cost( prefer == 1 || prefer == 7 ) + .highSpeed( prefer == 20 ) + .avoidSpeed( prefer == 3 ); + mCallback.onReCalculatePath( config ); + } + mCallback.onEnd( intent ); + } +} diff --git a/modules/mogo-module-map/src/main/java/com/mogo/module/map/MapControlCommandHandler.java b/modules/mogo-module-map/src/main/java/com/mogo/module/map/MapControlCommandHandler.java new file mode 100644 index 0000000000..e8a38b4c45 --- /dev/null +++ b/modules/mogo-module-map/src/main/java/com/mogo/module/map/MapControlCommandHandler.java @@ -0,0 +1,94 @@ +package com.mogo.module.map; + +import com.mogo.map.uicontroller.EnumMapUI; +import com.mogo.utils.logger.Logger; + +public +/** + * @author congtaowang + * @since 2020/7/30 + *

+ * 语音控制地图 + */ +class MapControlCommandHandler { + + private static final String TAG = "CustomVoiceCommandHandler"; + + private OnMapControlCallback mCallback; + + public void setCallback( OnMapControlCallback mCallback ) { + this.mCallback = mCallback; + } + + public void handleVoiceCommand( String cmd ) { + Logger.d( TAG, cmd ); + switch ( cmd ) { + case VoiceConstants.CMD_MAP_TRAFFIC_MODE_UN_WAKEUP: + case VoiceConstants.CMD_MAP_TRAFFIC_MODE: + mCallback.onTrafficModeChanged( true ); + break; + case VoiceConstants.CMD_MAP_UN_TRAFFIC_MODE_UN_WAKEUP: + case VoiceConstants.CMD_MAP_UN_TRAFFIC_MODE: + mCallback.onTrafficModeChanged( false ); + break; + case VoiceConstants.CMD_MAP_ZOOM_IN_UN_WAKEUP: + case VoiceConstants.CMD_MAP_ZOOM_IN: + mCallback.onZoomMap( true ); + break; + case VoiceConstants.CMD_MAP_ZOOM_OUT_UN_WAKEUP: + case VoiceConstants.CMD_MAP_ZOOM_OUT: + mCallback.onZoomMap( false ); + break; + case VoiceConstants.CMD_MAP_2D_UN_WAKEUP: + case VoiceConstants.CMD_MAP_2D: + case VoiceConstants.CMD_MAP_NORTH_UP_MODE_UN_WAKEUP: + case VoiceConstants.CMD_MAP_NORTH_UP_MODE: + mCallback.onCameraModeChanged( EnumMapUI.NorthUP_2D ); + break; + case VoiceConstants.CMD_MAP_3D_UN_WAKEUP: + case VoiceConstants.CMD_MAP_3D: + mCallback.onCameraModeChanged( EnumMapUI.CarUp_3D ); + break; + case VoiceConstants.CMD_MAP_DAY_TIME_MODE_UN_WAKEUP: + case VoiceConstants.CMD_MAP_DAY_TIME_MODE: + mCallback.onDayNightModeChanged( EnumMapUI.Type_Light ); + break; + case VoiceConstants.CMD_MAP_HISTORY_UN_WAKEUP: + case VoiceConstants.CMD_MAP_HISTORY: + mCallback.onOpenNavi(); + break; + case VoiceConstants.CMD_MAP_STOP_NAVI_MODE_UN_WAKEUP: + case VoiceConstants.CMD_MAP_STOP_NAVI_MODE: + break; + case VoiceConstants.CMD_MAP_NIGHT_MODE_UN_WAKEUP: + case VoiceConstants.CMD_MAP_NIGHT_MODE: + mCallback.onDayNightModeChanged( EnumMapUI.Type_Night ); + break; + case VoiceConstants.CMD_MAP_AUTO_LIGHT_NIGHT_MODE_UN_WAKEUP: + case VoiceConstants.CMD_MAP_AUTO_LIGHT_NIGHT_MODE: + mCallback.onDayNightModeChanged( EnumMapUI.Type_AUTO_LIGHT_Night ); + break; + case VoiceConstants.CMD_MAP_DISPLAY_OVERVIEW_MODE: + mCallback.onDisplayOverview(); + break; + case VoiceConstants.CMD_MAP_CONTINUE_NAVI_MODE: + mCallback.onContinueNavi(); + break; + case VoiceConstants.CMD_MAP_CAR_UP_MODE_UN_WAKEUP: + case VoiceConstants.CMD_MAP_CAR_UP_MODE: + mCallback.onCameraModeChanged( EnumMapUI.CarUp_2D ); + break; + case VoiceConstants.CMD_MAP_SPEAK_DRAFT_MODE: + case VoiceConstants.CMD_MAP_SPEAK_DRAFT_MODE_UN_WAKEUP: + break; + case VoiceConstants.CMD_MAP_SPEAK_DETAIL_MODE: + case VoiceConstants.CMD_MAP_SPEAK_DETAIL_MODE_UN_WAKEUP: + break; + case VoiceConstants.CMD_MAP_SPEAK_REMAIN: + break; + default: + break; + + } + } +} diff --git a/modules/mogo-module-map/src/main/java/com/mogo/module/map/MapFragment.java b/modules/mogo-module-map/src/main/java/com/mogo/module/map/MapFragment.java index 9a51a52573..a563efc7da 100644 --- a/modules/mogo-module-map/src/main/java/com/mogo/module/map/MapFragment.java +++ b/modules/mogo-module-map/src/main/java/com/mogo/module/map/MapFragment.java @@ -39,9 +39,6 @@ public class MapFragment extends MvpFragment< MapView, MapPresenter > implements @Override protected void initViews() { - //mMogoMapView = findViewById( R.id.module_map_id_map ); - //mMogoMap = mMogoMapView.getMap(); - //mMogoMap.getUIController().showMyLocation( true ); } @Override @@ -63,9 +60,6 @@ public class MapFragment extends MvpFragment< MapView, MapPresenter > implements @Override public void onActivityCreated( @Nullable Bundle savedInstanceState ) { super.onActivityCreated( savedInstanceState ); - //if ( mMogoMapView != null ) { - // mMogoMapView.onCreate( savedInstanceState ); - //} initMapView(); } @@ -125,7 +119,7 @@ public class MapFragment extends MvpFragment< MapView, MapPresenter > implements uiSettings.setZoomControlsEnabled( false ); //设置双指缩放手势是否可用。 uiSettings.setZoomGesturesEnabled( true ); - mMogoMap.getUIController().changeMapMode(EnumMapUI.NorthUP_2D); + mMogoMap.getUIController().changeMapMode( EnumMapUI.NorthUP_2D ); } } } 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 6340143aad..f72c5dea25 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 @@ -1,16 +1,12 @@ package com.mogo.module.map; import android.app.ActivityManager; -import android.content.BroadcastReceiver; -import android.content.ComponentName; import android.content.Context; import android.content.Intent; -import android.content.IntentFilter; import android.graphics.Rect; import android.text.TextUtils; import androidx.annotation.NonNull; -import androidx.annotation.UiThread; import androidx.lifecycle.LifecycleOwner; import com.alibaba.android.arouter.launcher.ARouter; @@ -34,10 +30,8 @@ import com.mogo.service.launcher.IMogoLauncher; import com.mogo.service.map.IMogoMapService; import com.mogo.service.module.IMogoRegisterCenter; import com.mogo.service.module.IMogoSearchManager; -import com.mogo.service.module.IMogoSettingManager; import com.mogo.service.statusmanager.IMogoStatusManager; import com.mogo.service.strategy.IMogoRefreshStrategyController; -import com.mogo.utils.AppUtils; import com.mogo.utils.ResourcesHelper; import com.mogo.utils.UiThreadHandler; import com.mogo.utils.logger.Logger; @@ -54,10 +48,10 @@ import java.util.Map; public class MapPresenter extends Presenter< MapView > implements IMogoIntentListener, IMogoVoiceCmdCallBack, - IMogoNaviListener2 { + IMogoNaviListener2, + OnMapControlCallback { private static final String TAG = "MapPresenter"; - private static final String AUTONAVI_STANDARD_BROADCAST_RECV = "AUTONAVI_STANDARD_BROADCAST_RECV"; private IMogoMapService mMogoMapService; private IMogoIntentManager mMogoIntentManager; private IMogoSearchManager mSearchManager; @@ -66,7 +60,6 @@ public class MapPresenter extends Presenter< MapView > implements private IMogoRegisterCenter mRegisterCenter; private IMogoLauncher mLauncher; private IMogoSearchManager mMogoSearchManager; - private IMogoSettingManager mSettingManager; private Rect mDisplayOverviewBounds; @@ -80,114 +73,112 @@ public class MapPresenter extends Presenter< MapView > implements mView.getUIController().recoverLockMode(); } }; + private AutoNaviBroadcastReceiver mAutoNaviReceiver; + private MapControlCommandHandler mCustomVoiceCommandHandler; public MapPresenter( MapView view ) { super( view ); initBroadcast(); + mCustomVoiceCommandHandler = new MapControlCommandHandler(); + mCustomVoiceCommandHandler.setCallback( this ); } - private BroadcastReceiver broadcastReceiver; - /** * opera type为0:0 实时路况开;1实时路况关 type为1:0 放大地图; 1缩小地图 type为2:0切换2d车上; 1切换2d北上;2切换3d车上支持 */ private void initBroadcast() { - // 高德地图免唤醒 - broadcastReceiver = new BroadcastReceiver() { - @Override - public void onReceive( Context context, Intent intent ) { - String action = intent.getAction(); - Logger.d( TAG, "action = %s", action ); + mAutoNaviReceiver = new AutoNaviBroadcastReceiver(); + mAutoNaviReceiver.setCallback( this ); + mAutoNaviReceiver.register(); + } - if ( !TextUtils.equals( action, AUTONAVI_STANDARD_BROADCAST_RECV ) ) { - return; + @Override + public void onTrafficModeChanged( boolean open ) { + mView.getUIController().setTrafficEnabled( open ); + } + + @Override + public void onCameraModeChanged( EnumMapUI mode ) { + mView.getUIController().changeMapMode( mode ); + } + + @Override + public void onDayNightModeChanged( EnumMapUI mode ) { + mView.getUIController().changeMapMode( mode ); + } + + @Override + public void onContinueNavi() { + if ( CustomNaviInterrupter.getInstance().interrupt() ) { + return; + } + if ( mStatusManager.isMainPageOnResume() ) { + mStatusManager.setDisplayOverview( TAG, false ); + mView.getUIController().recoverLockMode(); + AIAssist.getInstance( getContext() ).speakTTSVoice( "已为您继续导航" ); + UiThreadHandler.removeCallbacks( mLockCarRunnable ); + } else { + mLauncher.backToLauncher( getContext() ); + UiThreadHandler.postDelayed( () -> { + try { + mStatusManager.setDisplayOverview( TAG, false ); + mView.getUIController().recoverLockMode(); + AIAssist.getInstance( getContext() ).speakTTSVoice( "已为您继续导航" ); + UiThreadHandler.removeCallbacks( mLockCarRunnable ); + } catch ( Exception e ) { + e.printStackTrace(); } - int key_type = intent.getIntExtra( "KEY_TYPE", 0 ); - int type = intent.getIntExtra( "EXTRA_TYPE", -1 ); - int opera_type = intent.getIntExtra( "EXTRA_OPERA", -1 ); - Logger.d( TAG, "key_type" + key_type ); - if ( key_type == 10027 ) { - if ( type == 0 ) { - onChangeTrafficMode( opera_type ); - } else if ( type == 2 ) { - onChangeCameraMode( opera_type ); - } - } else if ( key_type == 10048 ) { - //0:自动; 1:白天; 2:黑夜; - int day_night_mode = intent.getIntExtra( "EXTRA_DAY_NIGHT_MODE", -1 ); - onChangeDayNightMode( day_night_mode ); - //继续导航 - } else if ( key_type == 10049 ) { - if ( CustomNaviInterrupter.getInstance().interrupt() ) { - return; - } - boolean extra_endurance_data = intent.getBooleanExtra( "EXTRA_ENDURANCE_DATA", false ); - if ( extra_endurance_data ) { - onContinueNavigation(); - } - } else if ( key_type == 10006 ) { - // 避免冲突,会同时发送两个广播,这里不操作。 - //int extra_is_show = intent.getIntExtra( "EXTRA_IS_SHOW", 0 ); - //if ( extra_is_show == 0 ) { - // onDisplayOverview(); - //} else { - // onContinueNavigation(); - //} - } else if ( key_type == 10005 ) { - int navi_route_prefer = intent.getIntExtra( "NAVI_ROUTE_PREFER", type ); - } else if ( key_type == 20009 ) { - if ( CustomNaviInterrupter.getInstance().interrupt() ) { - return; - } - onOpenNavi(); - } else if ( key_type == 10038 || key_type == 10007 ) { - if ( CustomNaviInterrupter.getInstance().interrupt() ) { - return; - } + }, 2_000L ); + } + } + + @Override + public void onOpenNavi() { + if ( CustomNaviInterrupter.getInstance().interrupt() ) { + return; + } + mLauncher.backToLauncher( getContext() ); + if ( !mMogoMapService.getNavi( getContext() ).isNaviing() && !mStatusManager.isSearchUIShow() ) { + mSearchManager.showSearch(); + } + AIAssist.getInstance( getContext() ).speakTTSVoice( "已打开" ); + } + + @Override + public void onCalculatePath( double lon, double lat ) { + if ( CustomNaviInterrupter.getInstance().interrupt() ) { + return; + } + mLauncher.backToLauncher( getContext() ); + mMogoSearchManager.calculatePath( new MogoLatLng( lat, lon ) ); + } + + @Override + public void onStopNaviInternal( Intent intent ) { + if ( CustomNaviInterrupter.getInstance().interrupt() ) { + // 导航过程中语音指令退出导航,会出现 activity 不走 onResume 的情况 + UiThreadHandler.postDelayed( () -> { + if ( isForeground( getContext() ) && !hasOthersActivity() && !mStatusManager.isMainPageOnResume() ) { mLauncher.backToLauncher( getContext() ); - onChoosePath( intent, key_type ); - } else if ( key_type == 10021 ) { - if ( CustomNaviInterrupter.getInstance().interrupt() ) { - // 导航过程中语音指令退出导航,会出现 activity 不走 onResume 的情况 - UiThreadHandler.postDelayed( () -> { - if ( isForeground( getContext() ) && !hasOthersActivity() && !mStatusManager.isMainPageOnResume() ) { - mLauncher.backToLauncher( getContext() ); - } - }, 500L ); - mMogoIntentManager.invoke( AUTONAVI_STANDARD_BROADCAST_RECV, intent ); - return; - } - onStopNaviInternal(); - } else if ( key_type == 10005 ) { - // 仅在导航场景下,⽀持第三⽅进⾏路线偏好的重新选择。 - // 避免收费 | 1 - // 多策略算路 | 2 - // 不走高速 | 3 - // 躲避拥堵 | 4 - // 不走高速且避免收费 | 5 - // 不走高速且躲避拥堵 | 6 - // 躲避收费和拥堵 | 7 - // 不走高速躲避收费和拥堵 | 8 - // 高速优先 | 20 - // 躲避拥堵且高速优先 | 24 - if ( CustomNaviInterrupter.getInstance().interrupt() ) { - return; - } - int prefer = intent.getIntExtra( "NAVI_ROUTE_PREFER", 0 ); - MogoNaviConfig config = new MogoNaviConfig().congestion( prefer == 4 ) - .cost( prefer == 1 || prefer == 7 ) - .highSpeed( prefer == 20 ) - .avoidSpeed( prefer == 3 ); - mMogoMapService.getNavi( getContext() ).reCalculateRoute( config ); - } - mMogoIntentManager.invoke( AUTONAVI_STANDARD_BROADCAST_RECV, intent ); - } - }; + }, 500L ); + onEnd( intent ); + return; + } + mMogoMapService.getNavi( getContext() ).stopNavi(); + } - IntentFilter inputFilter = new IntentFilter(); - inputFilter.addAction( AUTONAVI_STANDARD_BROADCAST_RECV ); - getContext().registerReceiver( broadcastReceiver, inputFilter ); + @Override + public void onReCalculatePath( MogoNaviConfig config ) { + if ( CustomNaviInterrupter.getInstance().interrupt() ) { + return; + } + mMogoMapService.getNavi( getContext() ).reCalculateRoute( config ); + } + + @Override + public void onEnd( Intent intent ) { + mMogoIntentManager.invoke( AutoNaviBroadcastReceiver.AUTONAVI_STANDARD_BROADCAST_RECV, intent ); } private boolean isForeground( Context context ) { @@ -218,91 +209,8 @@ public class MapPresenter extends Presenter< MapView > implements return true; } - /** - * 切换交通态势模式 - * - * @param mode - */ - private void onChangeTrafficMode( int mode ) { - mView.getUIController().setTrafficEnabled( mode == 0 ); - } - - /** - * 切换地图视图朝向模式 - */ - private void onChangeCameraMode( int mode ) { - if ( mode == 0 ) { - mView.getUIController().changeMapMode( EnumMapUI.CarUp_2D ); - } else if ( mode == 1 ) { - mView.getUIController().changeMapMode( EnumMapUI.NorthUP_2D ); - } else if ( mode == 2 ) { - mView.getUIController().changeMapMode( EnumMapUI.CarUp_3D ); - } - } - - /** - * 切换白天黑夜模式 - * - * @param mode - */ - private void onChangeDayNightMode( int mode ) { - if ( mode == 0 ) { - mView.getUIController().changeMapMode( EnumMapUI.Type_AUTO_LIGHT_Night ); - } else if ( mode == 1 ) { - mView.getUIController().changeMapMode( EnumMapUI.Type_Light ); - } else if ( mode == 2 ) { - mView.getUIController().changeMapMode( EnumMapUI.Type_Night ); - } - } - - private void onStopNaviInternal() { - mMogoMapService.getNavi( getContext() ).stopNavi(); - } - - - /** - * 唤醒指令导航去哪里 - */ - private void onChoosePath( Intent intent, int type ) { - double lat; - double lon; - - if ( type == 10007 ) { - lat = intent.getDoubleExtra( "ENTRY_LAT", 0.0 ); - lon = intent.getDoubleExtra( "ENTRY_LON", 0.0 ); - } else { - lat = intent.getDoubleExtra( "LAT", 0.0 ); - lon = intent.getDoubleExtra( "LON", 0.0 ); - } - mMogoSearchManager.calculatePath( new MogoLatLng( lat, lon ) ); - } - - /** - * 继续导航 - */ - private void onContinueNavigation() { - - if ( mStatusManager.isMainPageOnResume() ) { - mStatusManager.setDisplayOverview( TAG, false ); - mView.getUIController().recoverLockMode(); - AIAssist.getInstance( getContext() ).speakTTSVoice( "已为您继续导航" ); - UiThreadHandler.removeCallbacks( mLockCarRunnable ); - } else { - mLauncher.backToLauncher( getContext() ); - UiThreadHandler.postDelayed( () -> { - try { - mStatusManager.setDisplayOverview( TAG, false ); - mView.getUIController().recoverLockMode(); - AIAssist.getInstance( getContext() ).speakTTSVoice( "已为您继续导航" ); - UiThreadHandler.removeCallbacks( mLockCarRunnable ); - } catch ( Exception e ) { - e.printStackTrace(); - } - }, 2_000L ); - } - } - - private void onDisplayOverview() { + @Override + public void onDisplayOverview() { if ( !mMogoMapService.getNavi( getContext() ).isNaviing() ) { Logger.d( TAG, "未开始导航." ); return; @@ -329,7 +237,8 @@ public class MapPresenter extends Presenter< MapView > implements UiThreadHandler.postDelayed( mLockCarRunnable, 20_000 ); } - private void zoomMap( boolean zoomIn ) { + @Override + public void onZoomMap( boolean zoomIn ) { boolean isLocked = mMogoMapService.getMapUIController().isCarLocked(); MapControlResult result = mView.getUIController().changeZoom( zoomIn ); if ( !CustomNaviInterrupter.getInstance().interrupt() ) { @@ -356,14 +265,6 @@ public class MapPresenter extends Presenter< MapView > implements } } - private void onOpenNavi() { - mLauncher.backToLauncher( getContext() ); - if ( !mMogoMapService.getNavi( getContext() ).isNaviing() && !mStatusManager.isSearchUIShow() ) { - mSearchManager.showSearch(); - } - AIAssist.getInstance( getContext() ).speakTTSVoice( "已打开" ); - } - @Override public void onCreate( @NonNull LifecycleOwner owner ) { super.onCreate( owner ); @@ -378,7 +279,6 @@ public class MapPresenter extends Presenter< MapView > implements mRegisterCenter.registerMogoNaviListener( TAG, this ); mLauncher = apis.getLauncherApi(); mMogoSearchManager = apis.getSearchManagerApi(); - mSettingManager = apis.getSettingManagerApi(); IMogoNavi mogoNavi = mMogoMapService.getNavi( getContext() ); mogoNavi.setCalculatePathDisplayBounds( new Rect( @@ -416,8 +316,8 @@ public class MapPresenter extends Presenter< MapView > implements @Override public void onDestroy( @NonNull LifecycleOwner owner ) { super.onDestroy( owner ); - if ( broadcastReceiver != null ) { - getContext().unregisterReceiver( broadcastReceiver ); + if ( mAutoNaviReceiver != null ) { + mAutoNaviReceiver.unregister(); } } @@ -454,85 +354,7 @@ public class MapPresenter extends Presenter< MapView > implements @Override public void onCmdSelected( String cmd ) { Logger.d( TAG, cmd ); - switch ( cmd ) { - case VoiceConstants.CMD_MAP_TRAFFIC_MODE_UN_WAKEUP: - case VoiceConstants.CMD_MAP_TRAFFIC_MODE: - mView.getUIController().setTrafficEnabled( true ); - break; - case VoiceConstants.CMD_MAP_UN_TRAFFIC_MODE_UN_WAKEUP: - case VoiceConstants.CMD_MAP_UN_TRAFFIC_MODE: - mView.getUIController().setTrafficEnabled( false ); - break; - case VoiceConstants.CMD_MAP_ZOOM_IN_UN_WAKEUP: - case VoiceConstants.CMD_MAP_ZOOM_IN: - zoomMap( true ); - break; - case VoiceConstants.CMD_MAP_ZOOM_OUT_UN_WAKEUP: - case VoiceConstants.CMD_MAP_ZOOM_OUT: - zoomMap( false ); - break; - case VoiceConstants.CMD_MAP_2D_UN_WAKEUP: - case VoiceConstants.CMD_MAP_2D: - case VoiceConstants.CMD_MAP_NORTH_UP_MODE_UN_WAKEUP: - case VoiceConstants.CMD_MAP_NORTH_UP_MODE: - mView.getUIController().changeMapMode( EnumMapUI.NorthUP_2D ); - break; - case VoiceConstants.CMD_MAP_3D_UN_WAKEUP: - case VoiceConstants.CMD_MAP_3D: - mView.getUIController().changeMapMode( EnumMapUI.CarUp_3D ); - break; - case VoiceConstants.CMD_MAP_DAY_TIME_MODE_UN_WAKEUP: - case VoiceConstants.CMD_MAP_DAY_TIME_MODE: - mView.getUIController().changeMapMode( EnumMapUI.Type_Light ); - AIAssist.getInstance( getContext() ).speakTTSVoice( "已切换", null ); - break; - case VoiceConstants.CMD_MAP_HISTORY_UN_WAKEUP: - case VoiceConstants.CMD_MAP_HISTORY: - onOpenNavi(); - break; - case VoiceConstants.CMD_MAP_STOP_NAVI_MODE_UN_WAKEUP: - case VoiceConstants.CMD_MAP_STOP_NAVI_MODE: - mLauncher.backToLauncher( getContext() ); - break; - case VoiceConstants.CMD_MAP_NIGHT_MODE_UN_WAKEUP: - case VoiceConstants.CMD_MAP_NIGHT_MODE: - mView.getUIController().changeMapMode( EnumMapUI.Type_Night ); - AIAssist.getInstance( getContext() ).speakTTSVoice( "已切换", null ); - break; - case VoiceConstants.CMD_MAP_AUTO_LIGHT_NIGHT_MODE_UN_WAKEUP: - case VoiceConstants.CMD_MAP_AUTO_LIGHT_NIGHT_MODE: - mView.getUIController().changeMapMode( EnumMapUI.Type_AUTO_LIGHT_Night ); - AIAssist.getInstance( getContext() ).speakTTSVoice( "已切换", null ); - break; - case VoiceConstants.CMD_MAP_DISPLAY_OVERVIEW_MODE: - onDisplayOverview(); - break; - case VoiceConstants.CMD_MAP_CONTINUE_NAVI_MODE: - if ( CustomNaviInterrupter.getInstance().interrupt() ) { - return; - } - onContinueNavigation(); - break; - case VoiceConstants.CMD_MAP_CAR_UP_MODE_UN_WAKEUP: - case VoiceConstants.CMD_MAP_CAR_UP_MODE: - mView.getUIController().changeMapMode( EnumMapUI.CarUp_2D ); - AIAssist.getInstance( getContext() ).speakTTSVoice( "已切换", null ); - break; - case VoiceConstants.CMD_MAP_SPEAK_DRAFT_MODE: - case VoiceConstants.CMD_MAP_SPEAK_DRAFT_MODE_UN_WAKEUP: - mSettingManager.speakDraft(); - AIAssist.getInstance( getContext() ).speakTTSVoice( "已切换", null ); - break; - case VoiceConstants.CMD_MAP_SPEAK_DETAIL_MODE: - case VoiceConstants.CMD_MAP_SPEAK_DETAIL_MODE_UN_WAKEUP: - mSettingManager.speakDetail(); - AIAssist.getInstance( getContext() ).speakTTSVoice( "已切换", null ); - break; - case VoiceConstants.CMD_MAP_SPEAK_REMAIN: - break; - default: - break; - } + mCustomVoiceCommandHandler.handleVoiceCommand( cmd ); } @Override diff --git a/modules/mogo-module-map/src/main/java/com/mogo/module/map/OnMapControlCallback.java b/modules/mogo-module-map/src/main/java/com/mogo/module/map/OnMapControlCallback.java new file mode 100644 index 0000000000..d0d074da5e --- /dev/null +++ b/modules/mogo-module-map/src/main/java/com/mogo/module/map/OnMapControlCallback.java @@ -0,0 +1,42 @@ +package com.mogo.module.map; + +import android.content.Intent; + +import com.mogo.map.navi.MogoNaviConfig; +import com.mogo.map.uicontroller.EnumMapUI; + +public interface OnMapControlCallback { + + // 交通态势 + void onTrafficModeChanged( boolean open ); + + // 2d、3d模式切换、正北、车头 + void onCameraModeChanged( EnumMapUI mode); + + // 白天、黑夜模式切换 + void onDayNightModeChanged( EnumMapUI mode ); + + // 继续导航 + void onContinueNavi(); + + // 打开导航 + void onOpenNavi(); + + // 开始路径规划 + void onCalculatePath( double lon, double lat ); + + // 调用停止导航方法 + void onStopNaviInternal( Intent intent ); + + // 重新规划路线 + void onReCalculatePath( MogoNaviConfig config ); + + // 结束 + void onEnd( Intent intent ); + + // 查看全程 + void onDisplayOverview(); + + // 缩放地图 + void onZoomMap( boolean zoomIn ); +} \ No newline at end of file