diff --git a/.idea/misc.xml b/.idea/misc.xml
index 707ee6e613..2dc54c489f 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -1,6 +1,6 @@
+ * scheme 意图处理 + *
+ * 导航:adb shell am start -d "mogo://launcher/main/switch2?type=navi'&'lon=116.327007'&'lat=39.977639" + */ +public class SchemeIntent { + + private static final String TAG = "SchemeIntent"; + + public static final String TYPE_NAVI = "navi"; + + private IMogoServiceApis mApis; + private Context mContext; + + private SchemeIntent() { + // private constructor + } + + private static final class InstanceHolder { + private static final SchemeIntent INSTANCE = new SchemeIntent(); + } + + public static SchemeIntent getInstance() { + return InstanceHolder.INSTANCE; + } + + public void init( Context context, IMogoServiceApis apis ) { + mContext = context; + mApis = apis; + } + + private Object readResolve() { + // 阻止反序列化,必须实现 Serializable 接口 + return InstanceHolder.INSTANCE; + } + + public void handle( Intent intent ) { + if ( intent == null || intent.getData() == null ) { + return; + } + Uri target = intent.getData(); + String path = target.getPath(); + if ( path == null || path.isEmpty() ) { + return; + } + switch ( path ) { + case "/main/switch2": + handleSwitch2Action( target ); + break; + } + } + + private void handleSwitch2Action( Uri target ) { + String type = target.getQueryParameter( "type" ); + switch ( type ) { + case ModuleNames.CARD_TYPE_BUSINESS_OPERATION: + case ModuleNames.CARD_TYPE_CARS_CHATTING: + case ModuleNames.CARD_TYPE_NOVELTY: + case ModuleNames.CARD_TYPE_ROAD_CONDITION: + case ModuleNames.CARD_TYPE_SHARE_MUSIC: + case ModuleNames.CARD_TYPE_USER_DATA: + handleSwitchCardIntent( type ); + break; + case TYPE_NAVI: + handleNaviIntent( target ); + break; + } + } + + private void handleSwitchCardIntent( String type ) { + CardSwitchLiveData.getInstance().postValue( new CardInfo( type, true ) ); + } + + private void handleNaviIntent( Uri naviUri ) { + if ( mApis == null ) { + return; + } + String lon = naviUri.getQueryParameter( "lon" ); + String lat = naviUri.getQueryParameter( "lat" ); + + // TODO: 2020-04-20 补充场景 + + try { + double dlon = Double.valueOf( lon ); + double dlat = Double.valueOf( lat ); + if ( mApis.getMapServiceApi().getNavi( mContext ).isNaviing() ) { + mApis.getMapServiceApi().getNavi( mContext ).naviTo( new MogoLatLng( dlat, dlon ) ); + } else { + mApis.getAddressManagerApi().calculatePath( new MogoLatLng( dlat, dlon ) ); + } + } catch ( Exception e ) { + TipToast.shortTip( "目的地异常,不能导航" ); + Logger.e( TAG, e, "error." ); + } + } +} 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 d5db0d506d..f94a264cc1 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 @@ -29,6 +29,7 @@ import com.mogo.service.intent.IMogoIntentListener; import com.mogo.service.intent.IMogoIntentManager; import com.mogo.service.launcher.IMogoLauncher; import com.mogo.service.map.IMogoMapService; +import com.mogo.service.module.IMogoAddressManager; import com.mogo.service.module.IMogoRegisterCenter; import com.mogo.service.module.IMogoSearchManager; import com.mogo.service.statusmanager.IMogoStatusManager; @@ -59,6 +60,7 @@ public class MapPresenter extends Presenter< MapView > implements private IMogoStatusManager mStatusManager; private IMogoRegisterCenter mRegisterCenter; private IMogoLauncher mLauncher; + private IMogoAddressManager mMogoAddressManager; private Rect mDisplayOverviewBounds; public MapPresenter( MapView view ) { @@ -123,16 +125,18 @@ public class MapPresenter extends Presenter< MapView > implements onContinueNavigation(); } } else if ( key_type == 10006 ) { - int extra_is_show = intent.getIntExtra( "EXTRA_IS_SHOW", 0 ); - if ( extra_is_show == 0 ) { - onDisplayOverview(); - } else { - onContinueNavigation(); - } +// 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) { + onOpenNavi(); } ///** @@ -187,6 +191,10 @@ public class MapPresenter extends Presenter< MapView > implements Logger.d( TAG, "未开始导航." ); return; } + if ( mStatusManager.isADASShow() ) { + Logger.d( TAG, "ADAS模式忽略该请求." ); + return; + } mStatusManager.setUserInteractionStatus( TAG, true, false ); mStatusManager.setDisplayOverview( TAG, true ); mView.getUIController().displayOverview( mDisplayOverviewBounds ); @@ -217,6 +225,13 @@ public class MapPresenter extends Presenter< MapView > implements } } + private void onOpenNavi(){ + mLauncher.backToLauncher( getContext() ); + if ( !mMogoMapService.getNavi( getContext() ).isNaviing() && !mStatusManager.isSearchUIShow() ) { + mMogoAddressManager.goSearch(); + } + } + @Override public void onCreate( @NonNull LifecycleOwner owner ) { super.onCreate( owner ); @@ -230,6 +245,7 @@ public class MapPresenter extends Presenter< MapView > implements mRegisterCenter = apis.getRegisterCenterApi(); mRegisterCenter.registerMogoNaviListener( TAG, this ); mLauncher = apis.getLauncherApi(); + mMogoAddressManager = apis.getAddressManagerApi(); IMogoNavi mogoNavi = mMogoMapService.getNavi( getContext() ); mogoNavi.setCalculatePathDisplayBounds( new Rect( @@ -346,7 +362,7 @@ public class MapPresenter extends Presenter< MapView > implements case VoiceConstants.CMD_MAP_HISTORY_UN_WAKEUP: case VoiceConstants.CMD_MAP_HISTORY: - mSearchManager.showSearch(); + onOpenNavi(); break; case VoiceConstants.CMD_MAP_STOP_NAVI_MODE_UN_WAKEUP: diff --git a/modules/mogo-module-search/src/main/java/com/mogo/module/navi/manager/MogoSearchManager.java b/modules/mogo-module-search/src/main/java/com/mogo/module/navi/manager/MogoSearchManager.java index 010ab585cd..75a749ba67 100644 --- a/modules/mogo-module-search/src/main/java/com/mogo/module/navi/manager/MogoSearchManager.java +++ b/modules/mogo-module-search/src/main/java/com/mogo/module/navi/manager/MogoSearchManager.java @@ -28,17 +28,11 @@ public class MogoSearchManager implements IMogoSearchManager { } @Override public void showSearch() { - SearchFragment searchFragment = new SearchFragment(); - SearchServiceHolder.INSTANCE.getFragmentManager() - .push(new FragmentDescriptor.Builder().fragment(searchFragment) - .tag( AMapConstants.PATH_FRAGMENT_SEARCH) - .notifyMainModule(true) - .build()); + AddressManager.INSTANCE.goSearch(); } @Override public void showMain() { - SearchServiceHolder.INSTANCE.getFragmentManager() - .clearAll(); + SearchServiceHolder.INSTANCE.getFragmentManager().clearAll(); } @Override public void speakDraft() { diff --git a/modules/mogo-module-search/src/main/java/com/mogo/module/navi/manager/NaviManager.kt b/modules/mogo-module-search/src/main/java/com/mogo/module/navi/manager/NaviManager.kt index 13428466a1..59bdc35972 100644 --- a/modules/mogo-module-search/src/main/java/com/mogo/module/navi/manager/NaviManager.kt +++ b/modules/mogo-module-search/src/main/java/com/mogo/module/navi/manager/NaviManager.kt @@ -34,9 +34,7 @@ object NaviManager { choosePath(intent, key_type) } else if (key_type == 10021) { SearchServiceHolder.getNavi().stopNavi() - } else if (key_type == 20009) { - SearchServiceHolder.mogoLauncher.backToLauncher(context) - } else if (key_type == 10005) { + } else if (key_type == 10005) { // * 仅在导航场景下,⽀持第三⽅进⾏路线偏好的重新选择。 // * `避免收费` |`1` `多策略算路` |`2` `不走高速` |`3` ` 躲避拥堵` |`4` `不走高速且避免收费` |`5` `不走高速且躲避拥堵` |`6`