融合高德广播和语音指令控制地图的逻辑

This commit is contained in:
wangcongtao
2020-07-31 11:09:45 +08:00
parent 45bcbaf979
commit 1153813221
6 changed files with 387 additions and 292 deletions

View File

@@ -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;
}
}
}

View File

@@ -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 );
}
}

View File

@@ -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
* <p>
* 语音控制地图
*/
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;
}
}
}

View File

@@ -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 );
}
}
}

View File

@@ -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为00 实时路况开1实时路况关 type为10 放大地图; 1缩小地图 type为20切换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

View File

@@ -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 );
}