This commit is contained in:
wangcongtao
2020-04-01 15:21:30 +08:00
parent b83cf347a4
commit 8bba4ec4c6
12 changed files with 201 additions and 145 deletions

View File

@@ -14,8 +14,10 @@ import com.alibaba.android.arouter.launcher.ARouter;
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.map.navi.IMogoNavi;
import com.mogo.map.uicontroller.EnumMapUI;
import com.mogo.map.uicontroller.MapControlResult;
import com.mogo.module.common.MogoModulePaths;
import com.mogo.service.IMogoServiceApis;
import com.mogo.service.MogoServicePaths;
@@ -39,20 +41,20 @@ import java.util.Map;
* <p>
* 描述
*/
public class MapPresenter extends Presenter<MapView> implements
IMogoIntentListener,
IMogoVoiceCmdCallBack {
public class MapPresenter extends Presenter< MapView > implements
IMogoIntentListener,
IMogoVoiceCmdCallBack {
private static final String TAG = "MapPresenter";
private static final String AUTONAVI_STANDARD_BROADCAST_RECV =
"AUTONAVI_STANDARD_BROADCAST_RECV";
"AUTONAVI_STANDARD_BROADCAST_RECV";
private IMogoMapService mMogoMapService;
private IMogoIntentManager mMogoIntentManager;
private IMogoSearchManager mSearchManager;
private IMogoRefreshStrategyController mRefreshStrategyController;
public MapPresenter(MapView view) {
super(view);
public MapPresenter( MapView view ) {
super( view );
initBroadcast();
}
@@ -61,78 +63,68 @@ public class MapPresenter extends Presenter<MapView> implements
*/
private void initBroadcast() {
BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {
@Override public void onReceive(Context context, Intent intent) {
@Override
public void onReceive( Context context, Intent intent ) {
String action = intent.getAction();
if (TextUtils.equals(action, AUTONAVI_STANDARD_BROADCAST_RECV)) {
int key_type = intent.getIntExtra("KEY_TYPE", 0);
int type = intent.getIntExtra("EXTRA_TYPE", -1);
int opera_type = intent.getIntExtra("EXTRA_OPERA", -1);
if ( TextUtils.equals( action, AUTONAVI_STANDARD_BROADCAST_RECV ) ) {
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("NaviManager", "key_type" + key_type);
if (key_type == 10027) {
Logger.d( "NaviManager", "key_type" + key_type );
if ( key_type == 10027 ) {
if (type == 0) {
mView.getUIController().setTrafficEnabled(opera_type == 0);
} else if (type == 1) {
boolean isLocked = mMogoMapService.getMapUIController().isCarLocked();
mView.getUIController().changeZoom(opera_type == 0);
if ( isLocked ) {
// 保持锁车状态
UiThreadHandler.postDelayed( ()->{
mView.getUIController().setLockZoom( ( ( int ) mMogoMapService.getMapUIController().getZoomLevel() ) );
mMogoMapService.getMapUIController().recoverLockMode();//缩放地图会导致锁车发生改变,这里强制锁车
}, 1_000 );
} else {
// 20s后锁车刷新
mRefreshStrategyController.restartAutoRefreshAtTime( 20_000 );
}
} else if (type == 2) {
if ( type == 0 ) {
mView.getUIController().setTrafficEnabled( opera_type == 0 );
} else if ( type == 1 ) {
zoomMap( opera_type == 0 );
} else if ( type == 2 ) {
mMogoIntentManager.invoke(AUTONAVI_STANDARD_BROADCAST_RECV,intent);
if (opera_type == 0) {
mView.getUIController().changeMapMode(EnumMapUI.CarUp_2D);
} else if (opera_type == 1) {
mView.getUIController().changeMapMode(EnumMapUI.NorthUP_2D);
mMogoIntentManager.invoke( AUTONAVI_STANDARD_BROADCAST_RECV, intent );
if ( opera_type == 0 ) {
mView.getUIController().changeMapMode( EnumMapUI.CarUp_2D );
} else if ( opera_type == 1 ) {
mView.getUIController().changeMapMode( EnumMapUI.NorthUP_2D );
//AIAssist.getInstance(getContext()).speakTTSVoice("已切换", null);
} else if (opera_type == 2) {
mView.getUIController().changeMapMode(EnumMapUI.CarUp_3D);
} else if ( opera_type == 2 ) {
mView.getUIController().changeMapMode( EnumMapUI.CarUp_3D );
//AIAssist.getInstance(getContext()).speakTTSVoice("已切换", null);
}
}
} else if (key_type == 10048) {
} else if ( key_type == 10048 ) {
//* @param type 0:自动; 1白天; 2黑夜
int day_night_mode = intent.getIntExtra("EXTRA_DAY_NIGHT_MODE", -1);
if (day_night_mode == 0) {
mView.getUIController().changeMapMode(EnumMapUI.Type_AUTO_LIGHT_Night);
} else if (day_night_mode == 1) {
mView.getUIController().changeMapMode(EnumMapUI.Type_Light);
} else if (day_night_mode == 2) {
mView.getUIController().changeMapMode(EnumMapUI.Type_Night);
int day_night_mode = intent.getIntExtra( "EXTRA_DAY_NIGHT_MODE", -1 );
if ( day_night_mode == 0 ) {
mView.getUIController().changeMapMode( EnumMapUI.Type_AUTO_LIGHT_Night );
} else if ( day_night_mode == 1 ) {
mView.getUIController().changeMapMode( EnumMapUI.Type_Light );
} else if ( day_night_mode == 2 ) {
mView.getUIController().changeMapMode( EnumMapUI.Type_Night );
}
//intent.setAction("AUTONAVI_STANDARD_BROADCAST_RECV");
//intent.putExtra("KEY_TYPE", 10049);
//intent.putExtra("EXTRA_ENDURANCE_DATA", continueNavi);
//继续导航
} else if (key_type == 10049) {
} else if ( key_type == 10049 ) {
boolean extra_endurance_data =
intent.getBooleanExtra("EXTRA_ENDURANCE_DATA", false);
if (extra_endurance_data) {
intent.getBooleanExtra( "EXTRA_ENDURANCE_DATA", false );
if ( extra_endurance_data ) {
mView.getUIController().recoverLockMode();
}
} else if (key_type == 10006) {
} else if ( key_type == 10006 ) {
int extra_is_show = intent.getIntExtra("EXTRA_IS_SHOW", 0);
int extra_is_show = intent.getIntExtra( "EXTRA_IS_SHOW", 0 );
//if (extra_is_show == 0) {
// mView.getUIController().displayOverview();
//} else {
// mView.getUIController().recoverLockMode();
//}
}else if (key_type == 10005){
int navi_route_prefer = intent.getIntExtra("NAVI_ROUTE_PREFER", type);
} else if ( key_type == 10005 ) {
int navi_route_prefer = intent.getIntExtra( "NAVI_ROUTE_PREFER", type );
}
@@ -159,13 +151,38 @@ public class MapPresenter extends Presenter<MapView> implements
};
IntentFilter inputFilter = new IntentFilter();
inputFilter.addAction(AUTONAVI_STANDARD_BROADCAST_RECV);
getContext().registerReceiver(broadcastReceiver, inputFilter);
inputFilter.addAction( AUTONAVI_STANDARD_BROADCAST_RECV );
getContext().registerReceiver( broadcastReceiver, inputFilter );
}
private void zoomMap( boolean zoomIn ) {
boolean isLocked = mMogoMapService.getMapUIController().isCarLocked();
MapControlResult result = mView.getUIController().changeZoom( zoomIn );
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 {
// 20s后锁车刷新
mRefreshStrategyController.restartAutoRefreshAtTime( 20_000 );
}
}
@Override
public void onCreate(@NonNull LifecycleOwner owner) {
super.onCreate(owner);
public void onCreate( @NonNull LifecycleOwner owner ) {
super.onCreate( owner );
IMogoServiceApis apis = ( IMogoServiceApis ) ARouter.getInstance().build( MogoServicePaths.PATH_SERVICE_APIS ).navigation( getContext() );
mMogoMapService = apis.getMapServiceApi();
@@ -173,104 +190,99 @@ public class MapPresenter extends Presenter<MapView> implements
mSearchManager = apis.getSearchManagerApi();
mRefreshStrategyController = apis.getRefreshStrategyControllerApi();
IMogoNavi mogoNavi = mMogoMapService.getNavi(getContext());
mogoNavi.setCalculatePathDisplayBounds(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)
));
IMogoNavi mogoNavi = mMogoMapService.getNavi( getContext() );
mogoNavi.setCalculatePathDisplayBounds( 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 )
) );
}
@Override
public void onResume(@NonNull LifecycleOwner owner) {
super.onResume(owner);
public void onResume( @NonNull LifecycleOwner owner ) {
super.onResume( owner );
registerVoiceCmd();
}
@Override
public void onPause(@NonNull LifecycleOwner owner) {
super.onPause(owner);
public void onPause( @NonNull LifecycleOwner owner ) {
super.onPause( owner );
unregisterVoiceCmd();
}
private void registerVoiceCmd() {
for (Map.Entry<String, String[]> entry : VoiceConstants.sVoiceCmds.entrySet()) {
AIAssist.getInstance(getContext())
.registerUnWakeupCommand(entry.getKey(), entry.getValue(), this);
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);
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 ( Map.Entry< String, String[] > entry : VoiceConstants.sVoiceCmds.entrySet() ) {
AIAssist.getInstance( getContext() ).unregisterUnWakeupCommand( entry.getKey(), this );
}
for (String cmd : VoiceConstants.sCmds) {
mMogoIntentManager.unregisterIntentListener(cmd, this);
for ( String cmd : VoiceConstants.sCmds ) {
mMogoIntentManager.unregisterIntentListener( cmd, this );
}
}
@Override
public void onIntentReceived(String command, Intent intent) {
if (TextUtils.isEmpty(command)) {
public void onIntentReceived( String command, Intent intent ) {
if ( TextUtils.isEmpty( command ) ) {
return;
}
onCmdSelected(command);
onCmdSelected( command );
}
@Override
public void onCmdSelected(String cmd) {
Logger.d(TAG, cmd);
switch (cmd) {
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:
AIAssist.getInstance(getContext()).speakTTSVoice("已打开", null);
mView.getUIController().setTrafficEnabled(true);
AIAssist.getInstance( getContext() ).speakTTSVoice( "已打开", null );
mView.getUIController().setTrafficEnabled( true );
mSearchManager.showSearch();
break;
case VoiceConstants.CMD_MAP_UN_TRAFFIC_MODE_UN_WAKEUP:
case VoiceConstants.CMD_MAP_UN_TRAFFIC_MODE:
AIAssist.getInstance(getContext()).speakTTSVoice("已关闭", null);
mView.getUIController().setTrafficEnabled(false);
AIAssist.getInstance( getContext() ).speakTTSVoice( "已关闭", null );
mView.getUIController().setTrafficEnabled( false );
mSearchManager.showMain();
break;
case VoiceConstants.CMD_MAP_ZOOM_IN_UN_WAKEUP:
AIAssist.getInstance(getContext()).speakTTSVoice("已放大", null);
case VoiceConstants.CMD_MAP_ZOOM_IN:
mView.getUIController().changeZoom(true);
zoomMap( true );
break;
case VoiceConstants.CMD_MAP_ZOOM_OUT_UN_WAKEUP:
AIAssist.getInstance(getContext()).speakTTSVoice("已缩小", null);
case VoiceConstants.CMD_MAP_ZOOM_OUT:
mView.getUIController().changeZoom(false);
zoomMap( false );
break;
case VoiceConstants.CMD_MAP_2D_UN_WAKEUP:
case VoiceConstants.CMD_MAP_2D:
case VoiceConstants.CMD_MAP_NORTH_UP_MODE_UN_WAKEUP:
AIAssist.getInstance(getContext()).speakTTSVoice("已切换", null);
case VoiceConstants.CMD_MAP_NORTH_UP_MODE:
mView.getUIController().changeMapMode(EnumMapUI.NorthUP_2D);
//AIAssist.getInstance(getContext()).speakTTSVoice("已切换", null);
mView.getUIController().changeMapMode( EnumMapUI.NorthUP_2D );
AIAssist.getInstance( getContext() ).speakTTSVoice( "已切换", null );
break;
case VoiceConstants.CMD_MAP_3D_UN_WAKEUP:
AIAssist.getInstance(getContext()).speakTTSVoice("已切换", null);
case VoiceConstants.CMD_MAP_3D:
mView.getUIController().changeMapMode(EnumMapUI.CarUp_3D);
AIAssist.getInstance(getContext()).speakTTSVoice("已切换", null);
mView.getUIController().changeMapMode( EnumMapUI.CarUp_3D );
AIAssist.getInstance( getContext() ).speakTTSVoice( "已切换", null );
break;
case VoiceConstants.CMD_MAP_DAY_TIME_MODE_UN_WAKEUP:
AIAssist.getInstance(getContext()).speakTTSVoice("已切换", null);
case VoiceConstants.CMD_MAP_DAY_TIME_MODE:
mView.getUIController().changeMapMode(EnumMapUI.Type_Light);
mView.getUIController().changeMapMode( EnumMapUI.Type_Light );
AIAssist.getInstance( getContext() ).speakTTSVoice( "已切换", null );
break;
//case VoiceConstants.CMD_MAP_GO_COMPANY_UN_WAKEUP:
@@ -294,29 +306,29 @@ public class MapPresenter extends Presenter<MapView> implements
break;
case VoiceConstants.CMD_MAP_NIGHT_MODE_UN_WAKEUP:
AIAssist.getInstance(getContext()).speakTTSVoice("已切换", null);
case VoiceConstants.CMD_MAP_NIGHT_MODE:
mView.getUIController().changeMapMode(EnumMapUI.Type_Night);
mView.getUIController().changeMapMode( EnumMapUI.Type_Night );
AIAssist.getInstance( getContext() ).speakTTSVoice( "已切换", null );
break;
case VoiceConstants.CMD_MAP_AUTO_LIGHT_NIGHT_MODE_UN_WAKEUP:
AIAssist.getInstance(getContext()).speakTTSVoice("已切换", null);
case VoiceConstants.CMD_MAP_AUTO_LIGHT_NIGHT_MODE:
mView.getUIController().changeMapMode(EnumMapUI.Type_AUTO_LIGHT_Night);
mView.getUIController().changeMapMode( EnumMapUI.Type_AUTO_LIGHT_Night );
AIAssist.getInstance( getContext() ).speakTTSVoice( "已切换", null );
break;
case VoiceConstants.CMD_MAP_DISPLAY_OVERVIEW_MODE_UN_WAKEUP:
AIAssist.getInstance(getContext()).speakTTSVoice("已切换", null);
AIAssist.getInstance( getContext() ).speakTTSVoice( "已切换", null );
case VoiceConstants.CMD_MAP_DISPLAY_OVERVIEW_MODE:
//mView.getUIController().displayOverview();
break;
case VoiceConstants.CMD_MAP_CONTINUE_NAVI_MODE_UN_WAKEUP:
AIAssist.getInstance(getContext()).speakTTSVoice("已切换", null);
case VoiceConstants.CMD_MAP_CONTINUE_NAVI_MODE:
mView.getUIController().recoverLockMode();
AIAssist.getInstance( getContext() ).speakTTSVoice( "已切换", null );
break;
case VoiceConstants.CMD_MAP_CAR_UP_MODE_UN_WAKEUP:
AIAssist.getInstance(getContext()).speakTTSVoice("已切换", null);
case VoiceConstants.CMD_MAP_CAR_UP_MODE:
mView.getUIController().changeMapMode(EnumMapUI.CarUp_2D);
mView.getUIController().changeMapMode( EnumMapUI.CarUp_2D );
AIAssist.getInstance( getContext() ).speakTTSVoice( "已切换", null );
break;
//case VoiceConstants.CMD_MAP_GEO_NEARBY:
@@ -328,14 +340,14 @@ public class MapPresenter extends Presenter<MapView> implements
case VoiceConstants.CMD_MAP_SPEAK_DRAFT_MODE:
case VoiceConstants.CMD_MAP_SPEAK_DRAFT_MODE_UN_WAKEUP:
mSearchManager.speakDraft();
AIAssist.getInstance(getContext()).speakTTSVoice("已切换", null);
AIAssist.getInstance( getContext() ).speakTTSVoice( "已切换", null );
break;
case VoiceConstants.CMD_MAP_SPEAK_DETAIL_MODE:
case VoiceConstants.CMD_MAP_SPEAK_DETAIL_MODE_UN_WAKEUP:
mSearchManager.speakDetail();
AIAssist.getInstance(getContext()).speakTTSVoice("已切换", null);
AIAssist.getInstance( getContext() ).speakTTSVoice( "已切换", null );
break;
case VoiceConstants.CMD_MAP_SPEAK_REMAIN:
@@ -346,22 +358,22 @@ public class MapPresenter extends Presenter<MapView> implements
}
@Override
public void onCmdAction(String speakText) {
public void onCmdAction( String speakText ) {
}
@Override
public void onCmdCancel(String speakText) {
public void onCmdCancel( String speakText ) {
}
@Override
public void onSpeakEnd(String speakText) {
public void onSpeakEnd( String speakText ) {
}
@Override
public void onSpeakSelectTimeOut(String speakText) {
public void onSpeakSelectTimeOut( String speakText ) {
}
}