删除冗余代码
MoGoEagleEye.modules.mogo-module-map
MoGoEagleEye.modules.mogo-module-service
MoGoEagleEye.modules.mogo-module-share
MoGoEagleEye.services.mogo-service-api

Signed-off-by: donghongyu <donghongyu@zhidaoauto.com>
This commit is contained in:
donghongyu
2022-01-19 18:32:56 +08:00
parent 0cecc14e26
commit 8ed4fb5cb5
140 changed files with 54 additions and 3103 deletions

View File

@@ -1,147 +0,0 @@
package com.mogo.module.map;
import android.content.Intent;
import android.text.TextUtils;
import com.mogo.map.navi.MogoNaviConfig;
import com.mogo.map.uicontroller.EnumMapUI;
import com.mogo.module.common.MogoApisHandler;
import com.mogo.service.intent.IMogoIntentListener;
import com.mogo.service.intent.IMogoIntentManager;
public
/**
* @author congtaowang
* @since 2020/7/30
*
* 接收高德地图车机版广播
*/
class AutoNaviBroadcastIntentHandler implements IMogoIntentListener {
public static final String TAG = "AutoNaviBroadcastReceiver";
// 发送高德:部分是小智语音发给高德的,这里顺便接收处理,都是历史遗留问题
public static final String AUTONAVI_STANDARD_BROADCAST_RECV = "AUTONAVI_STANDARD_BROADCAST_RECV";
// 接收高德
public static final String AUTONAVI_STANDARD_BROADCAST_SEND = "AUTONAVI_STANDARD_BROADCAST_SEND";
private EnumMapUI mLastAMapUiType = null;
public void register( IMogoIntentManager manager ) {
manager.registerIntentListener( AUTONAVI_STANDARD_BROADCAST_RECV, this );
manager.registerIntentListener( AUTONAVI_STANDARD_BROADCAST_SEND, this );
}
public void unregister( IMogoIntentManager manager ) {
mCallback = null;
manager.unregisterIntentListener( AUTONAVI_STANDARD_BROADCAST_RECV, this );
manager.unregisterIntentListener( AUTONAVI_STANDARD_BROADCAST_SEND, this );
}
private OnMapControlCallback mCallback;
public void setCallback( OnMapControlCallback mCallback ) {
this.mCallback = mCallback;
}
@Override
public void onIntentReceived( String intentStr, 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 );
if ( !TextUtils.equals( action, AUTONAVI_STANDARD_BROADCAST_RECV )
&& !TextUtils.equals( action, AUTONAVI_STANDARD_BROADCAST_SEND ) ) {
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 ) {
if ( !intent.getBooleanExtra( "callback", true ) ) {
return;
}
//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 );
} else if ( keyType == 10019 ) {
int extraState = intent.getIntExtra( "EXTRA_STATE", -1 );
// 高德改变黑夜白天模式后传递给launcher顺便改变其他
if ( extraState == 37 ) {
// 白天模式
mLastAMapUiType = EnumMapUI.Type_Light;
MogoApisHandler.getInstance().getApis().getAdasControllerApi().changeAdasControlMode( EnumMapUI.Type_Light );
} else if ( extraState == 38 ) {
// 夜间模式
mLastAMapUiType = EnumMapUI.Type_Night;
MogoApisHandler.getInstance().getApis().getAdasControllerApi().changeAdasControlMode( EnumMapUI.Type_Night );
}
}
}
public EnumMapUI getLastAMapUiType() {
return mLastAMapUiType;
}
}

View File

@@ -1,107 +0,0 @@
package com.mogo.module.map;
import android.content.Context;
import android.content.Intent;
import android.util.Log;
import com.mogo.eagle.core.utilcode.util.AppUtils;
import com.mogo.map.navi.MogoNaviInfo;
import com.mogo.module.common.MogoApisHandler;
import com.mogo.module.common.map.CustomNaviInterrupter;
import com.mogo.service.statusmanager.IMogoStatusChangedListener;
import com.mogo.service.statusmanager.StatusDescriptor;
/**
* @author zyz
* 2020-01-17.
*/
public class MapBroadCastHelper implements IMogoStatusChangedListener {
private static final String TAG = "MapBroadCastHelper";
private static volatile MapBroadCastHelper sInstance;
private static final String ACTION_NAV_SEND = "AUTONAVI_STANDARD_BROADCAST_SEND";
private static final int STATUS_NAV_FRONT = 3;
private static final int STATUS_NAV_BACKGROUND = 4;
private static final int STATUS_NAV_START = 8;
private static final int STATUS_NAV_STOP = 9;
private Context mContext;
private MapBroadCastHelper( Context context ) {
this.mContext = context;
MogoApisHandler.getInstance().getApis().getStatusManagerApi().registerStatusChangedListener( TAG, StatusDescriptor.AI_ASSIST_READY, this );
}
public static MapBroadCastHelper getInstance( Context context ) {
if ( sInstance == null ) {
synchronized ( MapBroadCastHelper.class ) {
if ( sInstance == null ) {
sInstance = new MapBroadCastHelper( context );
}
}
}
return sInstance;
}
public void notifyXiaozhi( MogoNaviInfo naviinfo ) {
if ( CustomNaviInterrupter.getInstance().interrupt() ) {
return;
}
Intent intent = new Intent( ACTION_NAV_SEND );
intent.putExtra( "KEY_TYPE", 10001 );
intent.putExtra( "NEXT_ROAD_NAME", naviinfo.getNextRoadName() );
intent.putExtra( "ROUTE_REMAIN_TIME_AUTO", naviinfo.getVoiceRetainTime() );
intent.putExtra( "ROUTE_REMAIN_DIS_AUTO", naviinfo.getVoiceRetainDistance() );
intent.putExtra( "ICON", naviinfo.getIconResId() );
mContext.sendBroadcast( intent );
Log.v( "MapBroadCastHelper", "action=" + ACTION_NAV_SEND + " NaviInfo" );
}
public void notifyXizhiNavStatus( int status ) {
if ( CustomNaviInterrupter.getInstance().interrupt() ) {
return;
}
Intent intent = new Intent( ACTION_NAV_SEND );
intent.putExtra( "KEY_TYPE", 10019 );
intent.putExtra( "EXTRA_STATE", status );
intent.putExtra( "SOURCE_APP", mContext.getPackageName() );
mContext.sendBroadcast( intent );
Log.v( "MapBroadCastHelper", "NavStatus=" + status );
}
public void mapFrount() {
notifyXizhiNavStatus( STATUS_NAV_FRONT );
}
public void mapBackground() {
notifyXizhiNavStatus( STATUS_NAV_BACKGROUND );
}
public void startNavi() {
notifyXizhiNavStatus( STATUS_NAV_START );
}
public void stopNavi() {
notifyXizhiNavStatus( STATUS_NAV_STOP );
}
@Override
public void onStatusChanged( StatusDescriptor descriptor, boolean isTrue ) {
if ( descriptor == StatusDescriptor.AI_ASSIST_READY ) {
if ( isTrue ) {
if ( AppUtils.isApplicationBroughtToBackground( mContext ) ) {
mapBackground();
} else {
mapFrount();
}
}
}
}
public void release(){
MogoApisHandler.getInstance().getApis().getStatusManagerApi().unregisterStatusChangedListener( TAG, StatusDescriptor.AI_ASSIST_READY, this );
mContext = null;
sInstance = null;
}
}

View File

@@ -1,143 +0,0 @@
package com.mogo.module.map;
import android.content.Intent;
import com.mogo.commons.AbsMogoApplication;
import com.mogo.eagle.core.utilcode.mogo.logger.Logger;
import com.mogo.map.uicontroller.EnumMapUI;
import com.mogo.module.common.MogoApisHandler;
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 );
notifyAMap( 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 );
notifyAMap( 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 );
notifyAMap( 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;
case VoiceConstants.CMD_MAP_OPEN_VR:
case VoiceConstants.CMD_MAP_OPEN_VR_UN_WAKEUP:
MogoApisHandler.getInstance().getApis().getMapFrameControllerApi().changeToVRMode();
break;
case VoiceConstants.CMD_MAP_CLOSE_VR:
case VoiceConstants.CMD_MAP_CLOSE_VR_UN_WAKEUP:
MogoApisHandler.getInstance().getApis().getMapFrameControllerApi().changeTo2dMode();
break;
default:
break;
}
}
public void notifyAMap( EnumMapUI ui ) {
if ( ui == null ) {
return;
}
if ( mCallback.getAMapLastType() == ui ) {
return;
}
int KEY_TYPE = 10048;
int state = 0;//2黑夜;1白天 ;0自动
switch ( ui ) {
case Type_Light:
state = 1;
break;
case Type_Night:
state = 2;
break;
case Type_AUTO_LIGHT_Night:
state = 0;
break;
default:
return;
}
Intent intent = new Intent();
intent.setAction( "AUTONAVI_STANDARD_BROADCAST_RECV" );
intent.putExtra( "KEY_TYPE", KEY_TYPE );
intent.setFlags( Intent.FLAG_INCLUDE_STOPPED_PACKAGES );
// 避免在内部再次调用
intent.putExtra( "callback", false );
intent.putExtra( "EXTRA_DAY_NIGHT_MODE", state );
AbsMogoApplication.getApp().sendBroadcast( intent );
}
}

View File

@@ -94,7 +94,6 @@ public class MapFragment extends MvpFragment< MapView, MapPresenter >
mMogoMap = mMogoMapView.getMap();
if ( mMogoMap != null ) {
mMogoMap.getUIController().showMyLocation( true );
mMogoMap.getUIController().recoverLockMode();// 启动锁车
}
}
@@ -128,7 +127,6 @@ public class MapFragment extends MvpFragment< MapView, MapPresenter >
if ( mMogoMapView != null ) {
mMogoMapView.onPause();
}
MapBroadCastHelper.getInstance( getContext() ).mapBackground();
}
@Override
@@ -140,7 +138,6 @@ public class MapFragment extends MvpFragment< MapView, MapPresenter >
if ( mMogoMapView != null ) {
mMogoMapView.onResume();
}
MapBroadCastHelper.getInstance( getContext() ).mapFrount();
}
@Override
@@ -178,9 +175,6 @@ public class MapFragment extends MvpFragment< MapView, MapPresenter >
uiSettings.setZoomControlsEnabled( false );
//设置双指缩放手势是否可用。
uiSettings.setZoomGesturesEnabled( true );
if ( mMogoMap.getUIController() != null ) {
mMogoMap.getUIController().changeMapMode( EnumMapUI.CarUp_2D );
}
}
}
@@ -196,7 +190,6 @@ public class MapFragment extends MvpFragment< MapView, MapPresenter >
@Override
public void onDestroyView() {
MapBroadCastHelper.getInstance( getContext() ).release();
if ( mMogoMapView != null ) {
mMogoMapView.onDestroy();
mMogoMapView = null;
@@ -222,17 +215,16 @@ public class MapFragment extends MvpFragment< MapView, MapPresenter >
mMogoMapView.getMap().getUIController().changeCurrentIcon(iconId);
}
/**
* sight mode
* @param mode
*/
public static final int SIGHT_MODE_NORMAL = 0;
public static final int SIGHT_MODE_TOP = 1;
public static final int SIGHT_MODE_BACK = 2;
public static final int SIGHT_MODE_CROSS = 3;
public static final int SIGHT_MODE_FAR = 4;
@Override
public void setMapDAngle(int mode) {
float angle = getSightModeAngle(mode);

View File

@@ -1,40 +1,6 @@
package com.mogo.module.map;
import android.app.ActivityManager;
import android.content.Context;
import android.content.Intent;
import android.graphics.Rect;
import android.text.TextUtils;
import androidx.annotation.NonNull;
import androidx.lifecycle.LifecycleOwner;
import com.mogo.commons.mvp.Presenter;
import com.mogo.commons.voice.AIAssist;
import com.mogo.commons.voice.IMogoVoiceCmdCallBack;
import com.mogo.commons.voice.VoicePreemptType;
import com.mogo.eagle.core.utilcode.mogo.logger.Logger;
import com.mogo.eagle.core.utilcode.mogo.toast.ResourcesHelper;
import com.mogo.eagle.core.utilcode.util.UiThreadHandler;
import com.mogo.map.navi.IMogoNavi;
import com.mogo.map.navi.IMogoNaviListener2;
import com.mogo.map.navi.MogoNaviConfig;
import com.mogo.map.navi.MogoNaviInfo;
import com.mogo.map.uicontroller.EnumMapUI;
import com.mogo.map.uicontroller.MapControlResult;
import com.mogo.module.common.MogoApisHandler;
import com.mogo.module.common.map.CustomNaviInterrupter;
import com.mogo.service.IMogoServiceApis;
import com.mogo.service.adas.IMogoADASControlStatusChangedListener;
import com.mogo.service.intent.IMogoIntentListener;
import com.mogo.service.intent.IMogoIntentManager;
import com.mogo.service.map.IMogoMapService;
import com.mogo.service.module.IMogoRegisterCenter;
import com.mogo.service.statusmanager.IMogoStatusManager;
import com.mogo.service.strategy.IMogoRefreshStrategyController;
import java.util.List;
import java.util.Map;
/**
* @author congtaowang
@@ -42,315 +8,12 @@ import java.util.Map;
* <p>
* 描述
*/
public class MapPresenter extends Presenter< MapView > implements
IMogoIntentListener,
IMogoVoiceCmdCallBack,
IMogoNaviListener2,
OnMapControlCallback,
IMogoADASControlStatusChangedListener {
public class MapPresenter extends Presenter<MapView> {
private static final String TAG = "MapPresenter";
private IMogoServiceApis mApis;
private IMogoMapService mMogoMapService;
private IMogoIntentManager mMogoIntentManager;
private IMogoRefreshStrategyController mRefreshStrategyController;
private IMogoStatusManager mStatusManager;
private IMogoRegisterCenter mRegisterCenter;
private Rect mDisplayOverviewBounds;
private Runnable mLockCarRunnable = new Runnable() {
@Override
public void run() {
if ( !mStatusManager.isDisplayOverview() ) {
return;
}
mStatusManager.setDisplayOverview( TAG, false );
mView.getUIController().recoverLockMode();
}
};
private AutoNaviBroadcastIntentHandler mAutoNaviReceiver;
private MapControlCommandHandler mCustomVoiceCommandHandler;
public MapPresenter( MapView view ) {
super( view );
}
@Override
public void onTrafficModeChanged( boolean open ) {
mView.getUIController().setTrafficEnabled( open );
}
@Override
public void onCameraModeChanged( EnumMapUI mode ) {
mView.getUIController().changeMapMode( mode );
mApis.getAdasControllerApi().changeAdasControlMode( mode );
}
@Override
public void onDayNightModeChanged( EnumMapUI mode ) {
mView.getUIController().changeMapMode( mode );
mApis.getAdasControllerApi().changeAdasControlMode( mode );
}
@Override
public void onMapUiModeChanged( EnumMapUI mapUI ) {
mView.getUIController().changeMapMode( mapUI );
mCustomVoiceCommandHandler.notifyAMap( mapUI );
}
@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 {
UiThreadHandler.postDelayed( () -> {
try {
mStatusManager.setDisplayOverview( TAG, false );
mView.getUIController().recoverLockMode();
AIAssist.getInstance( getContext() ).speakTTSVoice( "已为您继续导航" );
UiThreadHandler.removeCallbacks( mLockCarRunnable );
} catch ( Exception e ) {
e.printStackTrace();
}
}, 2_000L );
}
}
@Override
public void onOpenNavi() {
if ( CustomNaviInterrupter.getInstance().interrupt() ) {
return;
}
AIAssist.getInstance( getContext() ).speakTTSVoice( "已打开" );
}
@Override
public void onCalculatePath( double lon, double lat ) {
if ( CustomNaviInterrupter.getInstance().interrupt() ) {
return;
}
}
@Override
public void onStopNaviInternal( Intent intent ) {
mMogoMapService.getNavi( getContext() ).stopNavi();
}
@Override
public void onReCalculatePath( MogoNaviConfig config ) {
if ( CustomNaviInterrupter.getInstance().interrupt() ) {
return;
}
mMogoMapService.getNavi( getContext() ).reCalculateRoute( config );
}
private boolean hasOthersActivity() {
ActivityManager am = ( ActivityManager ) getContext().getSystemService( Context.ACTIVITY_SERVICE );
List< ActivityManager.RunningTaskInfo > list = am.getRunningTasks( 1 );
if ( list != null && !list.isEmpty() ) {
for ( ActivityManager.RunningTaskInfo runningTaskInfo : list ) {
if ( TextUtils.equals( runningTaskInfo.topActivity.getPackageName(), getContext().getPackageName() ) ) {
return runningTaskInfo.numActivities > 1;
}
}
}
return true;
}
@Override
public void onDisplayOverview() {
if ( !mMogoMapService.getNavi( getContext() ).isNaviing() ) {
Logger.d( TAG, "未开始导航." );
return;
}
if ( mStatusManager.isV2XShow() ) {
Logger.d( TAG, "ADAS模式忽略该请求." );
return;
}
if ( !mStatusManager.isMainPageOnResume() ) {
mStatusManager.setUserInteractionStatus( TAG, true, false );
mStatusManager.setDisplayOverview( TAG, true );
mView.getUIController().displayOverview( mDisplayOverviewBounds );
AIAssist.getInstance( getContext() ).speakTTSVoice( "展示全程路线" );
} else {
UiThreadHandler.postDelayed( () -> {
mStatusManager.setUserInteractionStatus( TAG, true, false );
mStatusManager.setDisplayOverview( TAG, true );
mView.getUIController().displayOverview( mDisplayOverviewBounds );
AIAssist.getInstance( getContext() ).speakTTSVoice( "展示全程路线" );
}, 2_000L );
}
UiThreadHandler.postDelayed( mLockCarRunnable, 20_000 );
}
@Override
public void onZoomMap( boolean zoomIn ) {
boolean isLocked = mMogoMapService.getMapUIController().isCarLocked();
MapControlResult result = mView.getUIController().changeZoom( zoomIn );
if ( !CustomNaviInterrupter.getInstance().interrupt() ) {
if ( result == MapControlResult.TARGET ) {
UiThreadHandler.postDelayed( () -> {
if ( zoomIn ) {
AIAssist.getInstance( getContext() ).speakTTSVoice( "地图已是最大", VoicePreemptType.PREEMPT_TYPE_NEXT, null );
} else {
AIAssist.getInstance( getContext() ).speakTTSVoice( "地图已是最小", VoicePreemptType.PREEMPT_TYPE_NEXT, null );
}
}, 1_000L ); // 避免小智障播放完毕之前播报
return;
}
}
if ( isLocked ) {
// 保持锁车状态
UiThreadHandler.postDelayed( () -> {
mView.getUIController().setLockZoom( ( ( int ) mMogoMapService.getMapUIController().getZoomLevel() ) );
mMogoMapService.getMapUIController().recoverLockMode();//缩放地图会导致锁车发生改变,这里强制锁车
}, 1_000 );
} else {
// 30s后锁车刷新
mRefreshStrategyController.restartAutoRefreshAtTime( 30_000 );
}
}
@Override
public void onCreate( @NonNull LifecycleOwner owner ) {
super.onCreate( owner );
mApis = MogoApisHandler.getInstance().getApis();
mMogoMapService = mApis.getMapServiceApi();
mMogoIntentManager = mApis.getIntentManagerApi();
mRefreshStrategyController = mApis.getRefreshStrategyControllerApi();
mStatusManager = mApis.getStatusManagerApi();
mRegisterCenter = mApis.getRegisterCenterApi();
mRegisterCenter.registerMogoNaviListener( TAG, this );
IMogoNavi mogoNavi = mMogoMapService.getNavi( getContext() );
mogoNavi.setCalculatePathDisplayBounds( new Rect(
ResourcesHelper.getDimensionPixelSize( getContext(), R.dimen.module_map_calculate_path_display_overview_left_margin ),
ResourcesHelper.getDimensionPixelSize( getContext(), R.dimen.module_map_calculate_path_display_overview_top_margin ),
ResourcesHelper.getDimensionPixelSize( getContext(), R.dimen.module_map_calculate_path_display_overview_right_margin ),
ResourcesHelper.getDimensionPixelSize( getContext(), R.dimen.module_map_calculate_path_display_overview_bottom_margin )
) );
mDisplayOverviewBounds = new Rect(
ResourcesHelper.getDimensionPixelSize( getContext(), R.dimen.module_map_display_overview_left_margin ),
ResourcesHelper.getDimensionPixelSize( getContext(), R.dimen.module_map_display_overview_top_margin ),
ResourcesHelper.getDimensionPixelSize( getContext(), R.dimen.module_map_display_overview_right_margin ),
ResourcesHelper.getDimensionPixelSize( getContext(), R.dimen.module_map_display_overview_bottom_margin )
);
for ( String cmd : VoiceConstants.sUnUnRegisterCmds ) {
mMogoIntentManager.registerIntentListener( cmd, this );
}
for ( Map.Entry< String, String[] > entry : VoiceConstants.sUnRegisterVoiceCmds.entrySet() ) {
AIAssist.getInstance( getContext() ).registerUnWakeupCommand( entry.getKey(), entry.getValue(), this );
}
initBroadcast();
mCustomVoiceCommandHandler = new MapControlCommandHandler();
mCustomVoiceCommandHandler.setCallback( this );
mRegisterCenter.registerADASControlStatusChangedListener( TAG, this );
}
@Override
public EnumMapUI getAMapLastType() {
if ( mAutoNaviReceiver != null ) {
return mAutoNaviReceiver.getLastAMapUiType();
}
return null;
}
private void initBroadcast() {
mAutoNaviReceiver = new AutoNaviBroadcastIntentHandler();
mAutoNaviReceiver.setCallback( this );
mAutoNaviReceiver.register( mMogoIntentManager );
}
@Override
public void onResume( @NonNull LifecycleOwner owner ) {
super.onResume( owner );
registerVoiceCmd();
}
@Override
public void onPause( @NonNull LifecycleOwner owner ) {
super.onPause( owner );
unregisterVoiceCmd();
}
@Override
public void onDestroy( @NonNull LifecycleOwner owner ) {
super.onDestroy( owner );
if ( mAutoNaviReceiver != null ) {
mAutoNaviReceiver.unregister( mMogoIntentManager );
}
mRegisterCenter.unregisterMogoNaviListener( TAG );
mRegisterCenter.unregisterADASControlStatusChangedListener( TAG );
for ( String cmd : VoiceConstants.sUnUnRegisterCmds ) {
mMogoIntentManager.unregisterIntentListener( cmd, this );
}
for ( Map.Entry< String, String[] > entry : VoiceConstants.sUnRegisterVoiceCmds.entrySet() ) {
AIAssist.getInstance( getContext() ).unregisterUnWakeupCommand( entry.getKey(), this );
}
}
private void registerVoiceCmd() {
for ( Map.Entry< String, String[] > entry : VoiceConstants.sVoiceCmds.entrySet() ) {
AIAssist.getInstance( getContext() ).registerUnWakeupCommand( entry.getKey(), entry.getValue(), this );
}
for ( String cmd : VoiceConstants.sCmds ) {
mMogoIntentManager.registerIntentListener( cmd, this );
}
}
private void unregisterVoiceCmd() {
for ( Map.Entry< String, String[] > entry : VoiceConstants.sVoiceCmds.entrySet() ) {
AIAssist.getInstance( getContext() ).unregisterUnWakeupCommand( entry.getKey(), this );
}
for ( String cmd : VoiceConstants.sCmds ) {
mMogoIntentManager.unregisterIntentListener( cmd, this );
}
}
@Override
public void onIntentReceived( String command, Intent intent ) {
if ( TextUtils.isEmpty( command ) ) {
return;
}
onCmdSelected( command );
}
@Override
public void onCmdSelected( String cmd ) {
Logger.d( TAG, cmd );
mCustomVoiceCommandHandler.handleVoiceCommand( cmd );
}
@Override
public void onNaviInfoUpdate( MogoNaviInfo naviinfo ) {
MapBroadCastHelper.getInstance( getContext() ).notifyXiaozhi( naviinfo );
}
@Override
public void onStartNavi() {
MapBroadCastHelper.getInstance( getContext() ).startNavi();
}
@Override
public void onStopNavi() {
MapBroadCastHelper.getInstance( getContext() ).stopNavi();
public MapPresenter(MapView view) {
super(view);
}
}

View File

@@ -1,42 +0,0 @@
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 onDisplayOverview();
// 缩放地图
void onZoomMap( boolean zoomIn );
// 高德地图上次类型
EnumMapUI getAMapLastType();
}

View File

@@ -1,212 +0,0 @@
package com.mogo.module.map;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* @author congtaowang
* @since 2020-01-09
* <p>
* 描述
*/
public class VoiceConstants {
// 地图免唤醒语音注册
/**
* 放大地图
*/
public static final String CMD_MAP_ZOOM_IN = "com.ileja.navi.map.enlarge";
public static final String CMD_MAP_ZOOM_IN_UN_WAKEUP = "CMD_MAP_ZOOM_IN_UN_WAKEUP";
public static final String[] CMD_MAP_ZOOM_IN_TRIGGER_WORDS = {"放大地图"};
/**
* 导航历史记录
*/
public static final String CMD_MAP_HISTORY = "com.zhidao.navi.history.query";
public static final String CMD_MAP_HISTORY_UN_WAKEUP = "CMD_MAP_HISTORY_UN_WAKEUP";
public static final String[] CMD_MAP_HISTORY_TRIGGER_WORDS = {"查询导航历史记录"};
/**
* 缩小地图
*/
public static final String CMD_MAP_ZOOM_OUT = "com.ileja.navi.map.reduce";
public static final String CMD_MAP_ZOOM_OUT_UN_WAKEUP = "CMD_MAP_ZOOM_OUT_UN_WAKEUP";
public static final String[] CMD_MAP_ZOOM_OUT_TRIGGER_WORDS = {"缩小地图"};
/**
* 2D模式
*/
public static final String CMD_MAP_2D = "com.ileja.navi.mode.2d";
public static final String CMD_MAP_2D_UN_WAKEUP = "CMD_MAP_2D_UN_WAKEUP";
public static final String[] CMD_MAP_2D_TRIGGER_WORDS = {"二地模式"};
/**
* 打开vr
*/
public static final String CMD_MAP_OPEN_VR = "com.ileja.navi.mode.vr.open";
public static final String CMD_MAP_OPEN_VR_UN_WAKEUP = "CMD_MAP_OPEN_VR_UN_WAKEUP";
public static final String[] CMD_MAP_OPEN_VR_TRIGGER_WORDS = {"打开VR模式", "VR模式", "切换到VR模式"};
/**
* 关闭vr
*/
public static final String CMD_MAP_CLOSE_VR = "com.ileja.navi.mode.vr.close";
public static final String CMD_MAP_CLOSE_VR_UN_WAKEUP = "CMD_MAP_CLOSE_VR_UN_WAKEUP";
public static final String[] CMD_MAP_CLOSE_VR_TRIGGER_WORDS = {"关闭VR模式", "切换到地图模式"};
/**
* 3D模式
*/
public static final String CMD_MAP_3D = "com.ileja.navi.mode.3d";
public static final String CMD_MAP_3D_UN_WAKEUP = "CMD_MAP_3D_UN_WAKEUP";
public static final String[] CMD_MAP_3D_TRIGGER_WORDS = {"三地模式"};
/**
* 白天模式
*/
public static final String CMD_MAP_DAY_TIME_MODE = "com.ileja.navi.mode.daytime";
public static final String CMD_MAP_DAY_TIME_MODE_UN_WAKEUP = "CMD_MAP_DAY_TIME_MODE_UN_WAKEUP";
public static final String[] CMD_MAP_DAY_TIME_MODE_TRIGGER_WORDS = {"白天模式"};
/**
* 黑夜模式
*/
public static final String CMD_MAP_NIGHT_MODE = "com.ileja.navi.mode.night";
public static final String CMD_MAP_NIGHT_MODE_UN_WAKEUP = "CMD_MAP_NIGHT_MODE_UN_WAKEUP";
public static final String[] CMD_MAP_NIGHT_MODE_TRIGGER_WORDS = {"夜间模式"};
/**
* 自动模式
*/
public static final String CMD_MAP_AUTO_LIGHT_NIGHT_MODE = "com.ileja.navi.mode.autodaynight";
public static final String CMD_MAP_AUTO_LIGHT_NIGHT_MODE_UN_WAKEUP = "CMD_MAP_AUTO_LIGHT_NIGHT_MODE_UN_WAKEUP";
public static final String[] CMD_MAP_AUTO_LIGHT_NIGHT_MODE_TRIGGER_WORDS = {"自动模式"};
/**
* 查看路况
*/
public static final String CMD_MAP_TRAFFIC_MODE = "com.ileja.navi.traffic.open";
public static final String CMD_MAP_TRAFFIC_MODE_UN_WAKEUP = "CMD_MAP_TRAFFIC_MODE_UN_WAKEUP";
public static final String[] CMD_MAP_TRAFFIC_MODE_TRIGGER_WORDS = {"打开路况", "打开实况"};
/**
* 关闭路况
*/
public static final String CMD_MAP_UN_TRAFFIC_MODE = "com.ileja.navi.traffic.close";
public static final String CMD_MAP_UN_TRAFFIC_MODE_UN_WAKEUP = "CMD_MAP_UN_TRAFFIC_MODE_UN_WAKEUP";
public static final String[] CMD_MAP_UN_TRAFFIC_MODE_TRIGGER_WORDS = {"关闭路况", "关闭实况"};
/**
* 导航全览
*/
public static final String CMD_MAP_DISPLAY_OVERVIEW_MODE = "com.ileja.navi.map.full";
/**
* 继续导航
*/
public static final String CMD_MAP_CONTINUE_NAVI_MODE = "com.ileja.navi.route.continue";
/**
* 停止导航
*/
public static final String CMD_MAP_STOP_NAVI_MODE = "com.ileja.navi.route.stop";
public static final String CMD_MAP_STOP_NAVI_MODE_UN_WAKEUP = "CMD_MAP_STOP_NAVI_MODE_UN_WAKEUP";
public static final String[] CMD_MAP_STOP_NAVI_MODE_TRIGGER_WORDS = {"停止导航/结束导航/取消导航/放弃导航/退出导航/关闭导航"};
/**
* 附近类命令
*/
public static final String CMD_MAP_GEO_NEARBY = "com.ileja.navi.geo.nearby";
public static final String CMD_MAP_GEO_NEARBY_WAKEUP = "CMD_MAP_GEO_NEARBY_WAKEUP";
public static final String[] CMD_MAP_GEO_NEARBY_TRIGGER_WORDS = {"查找附近的", "查找附近的"};
/**
* 车头朝上
*/
public static final String CMD_MAP_CAR_UP_MODE = "com.ileja.traffic.head.up";
public static final String CMD_MAP_CAR_UP_MODE_UN_WAKEUP = "CMD_MAP_CAR_UP_MODE_UN_WAKEUP";
public static final String[] CMD_MAP_CAR_UP_MODE_TRIGGER_WORDS = {"车头朝上"};
/**
* 北朝上
*/
public static final String CMD_MAP_NORTH_UP_MODE = "com.ileja.traffic.north.up";
public static final String CMD_MAP_NORTH_UP_MODE_UN_WAKEUP = "CMD_MAP_NORTH_UP_MODE_UN_WAKEUP";
public static final String[] CMD_MAP_NORTH_UP_MODE_TRIGGER_WORDS = {"正北朝上","北朝上"};
/**
* 简洁模式
*/
public static final String CMD_MAP_SPEAK_DRAFT_MODE = "com.ileja.traffic.speak.draft";
public static final String CMD_MAP_SPEAK_DRAFT_MODE_UN_WAKEUP = "CMD_MAP_SPEAK_DRAFT_MODE_UN_WAKEUP";
public static final String[] CMD_MAP_SPEAK_DRAFT_MODE_TRIGGER_WORDS = {"简洁模式", "简洁播报"};
/**
* 详细模式
*/
public static final String CMD_MAP_SPEAK_DETAIL_MODE = "com.ileja.traffic.speak.detail";
public static final String CMD_MAP_SPEAK_DETAIL_MODE_UN_WAKEUP = "CMD_MAP_SPEAK_DETAIL_MODE_UN_WAKEUP";
public static final String[] CMD_MAP_SPEAK_DETAIL_MODE_TRIGGER_WORDS = {"详细模式", "详细播报"};
/**
* 播报当前导航剩余里程和时间
*/
public static final String CMD_MAP_SPEAK_REMAIN = "com.ileja.traffic.speak.remain";
public static final String CMD_MAP_SPEAK_REMAIN_UN_WAKEUP = "CMD_MAP_SPEAK_REMAIN_UN_WAKEUP";
public static final String[] CMD_MAP_SPEAK_REMAIN_TRIGGER_WORDS = {"还有多久", "多久到", "还有多远"};
// 免唤醒
public static final Map< String, String[] > sVoiceCmds = new HashMap<>();
// 不注销的免唤醒
public static final Map< String, String[] > sUnRegisterVoiceCmds = new HashMap<>();
// 唤醒
public static final List< String > sCmds = new ArrayList<>();
// 不注销的唤醒
public static final List< String > sUnUnRegisterCmds = new ArrayList<>();
static {
// 免唤醒
sVoiceCmds.put( VoiceConstants.CMD_MAP_ZOOM_IN_UN_WAKEUP, VoiceConstants.CMD_MAP_ZOOM_IN_TRIGGER_WORDS );
sVoiceCmds.put( VoiceConstants.CMD_MAP_ZOOM_OUT_UN_WAKEUP, VoiceConstants.CMD_MAP_ZOOM_OUT_TRIGGER_WORDS );
sVoiceCmds.put( VoiceConstants.CMD_MAP_TRAFFIC_MODE_UN_WAKEUP, VoiceConstants.CMD_MAP_TRAFFIC_MODE_TRIGGER_WORDS );
sVoiceCmds.put( VoiceConstants.CMD_MAP_UN_TRAFFIC_MODE_UN_WAKEUP, VoiceConstants.CMD_MAP_UN_TRAFFIC_MODE_TRIGGER_WORDS );
sVoiceCmds.put( VoiceConstants.CMD_MAP_CAR_UP_MODE_UN_WAKEUP, VoiceConstants.CMD_MAP_CAR_UP_MODE_TRIGGER_WORDS );
sVoiceCmds.put( VoiceConstants.CMD_MAP_NORTH_UP_MODE_UN_WAKEUP, VoiceConstants.CMD_MAP_NORTH_UP_MODE_TRIGGER_WORDS );
sVoiceCmds.put( VoiceConstants.CMD_MAP_HISTORY_UN_WAKEUP, VoiceConstants.CMD_MAP_HISTORY_TRIGGER_WORDS );
sVoiceCmds.put( VoiceConstants.CMD_MAP_SPEAK_DETAIL_MODE_UN_WAKEUP, VoiceConstants.CMD_MAP_SPEAK_DETAIL_MODE_TRIGGER_WORDS );
sVoiceCmds.put( VoiceConstants.CMD_MAP_SPEAK_DRAFT_MODE_UN_WAKEUP, VoiceConstants.CMD_MAP_SPEAK_DRAFT_MODE_TRIGGER_WORDS );
sUnRegisterVoiceCmds.put( VoiceConstants.CMD_MAP_DAY_TIME_MODE_UN_WAKEUP, VoiceConstants.CMD_MAP_DAY_TIME_MODE_TRIGGER_WORDS );
sUnRegisterVoiceCmds.put( VoiceConstants.CMD_MAP_NIGHT_MODE_UN_WAKEUP, VoiceConstants.CMD_MAP_NIGHT_MODE_TRIGGER_WORDS );
sUnRegisterVoiceCmds.put( VoiceConstants.CMD_MAP_AUTO_LIGHT_NIGHT_MODE_UN_WAKEUP, VoiceConstants.CMD_MAP_AUTO_LIGHT_NIGHT_MODE_TRIGGER_WORDS );
sUnRegisterVoiceCmds.put( VoiceConstants.CMD_MAP_OPEN_VR_UN_WAKEUP, VoiceConstants.CMD_MAP_OPEN_VR_TRIGGER_WORDS );
sUnRegisterVoiceCmds.put( VoiceConstants.CMD_MAP_CLOSE_VR_UN_WAKEUP, VoiceConstants.CMD_MAP_CLOSE_VR_TRIGGER_WORDS );
// 唤醒
sCmds.add( VoiceConstants.CMD_MAP_ZOOM_IN );
sCmds.add( VoiceConstants.CMD_MAP_ZOOM_OUT );
sCmds.add( VoiceConstants.CMD_MAP_2D );
sCmds.add( VoiceConstants.CMD_MAP_3D );
sCmds.add( VoiceConstants.CMD_MAP_TRAFFIC_MODE );
sCmds.add( VoiceConstants.CMD_MAP_UN_TRAFFIC_MODE );
sCmds.add( VoiceConstants.CMD_MAP_CAR_UP_MODE );
sCmds.add( VoiceConstants.CMD_MAP_NORTH_UP_MODE );
sCmds.add( VoiceConstants.CMD_MAP_STOP_NAVI_MODE );
sCmds.add( VoiceConstants.CMD_MAP_SPEAK_DRAFT_MODE );
sCmds.add( VoiceConstants.CMD_MAP_SPEAK_DETAIL_MODE );
sCmds.add( VoiceConstants.CMD_MAP_SPEAK_REMAIN );
sCmds.add( VoiceConstants.CMD_MAP_OPEN_VR );
sCmds.add( VoiceConstants.CMD_MAP_CLOSE_VR );
// 退到后台不注销的命令
sUnUnRegisterCmds.add( VoiceConstants.CMD_MAP_CONTINUE_NAVI_MODE );
sUnUnRegisterCmds.add( VoiceConstants.CMD_MAP_DISPLAY_OVERVIEW_MODE );
sUnUnRegisterCmds.add( VoiceConstants.CMD_MAP_HISTORY );
sUnUnRegisterCmds.add( VoiceConstants.CMD_MAP_DAY_TIME_MODE );
sUnUnRegisterCmds.add( VoiceConstants.CMD_MAP_NIGHT_MODE );
sUnUnRegisterCmds.add( VoiceConstants.CMD_MAP_AUTO_LIGHT_NIGHT_MODE );
}
}