From 8cc40f1d79662a5363283db7c389e3eefdcea19d Mon Sep 17 00:00:00 2001 From: wangcongtao Date: Mon, 26 Oct 2020 14:52:23 +0800 Subject: [PATCH] dev --- app/build.gradle | 2 +- libraries/map-custom/build.gradle | 2 +- .../mogo/map/impl/custom/CustomMapView.java | 2 +- .../main/java/com/mogo/map/MogoMapView.java | 71 +++++----- .../common/map/MapCenterPointStrategy.java | 130 +++++++++++++++--- .../extensions/entrance/EntranceFragment.java | 5 +- .../module/map/MapControlCommandHandler.java | 7 + .../java/com/mogo/module/map/MapFragment.java | 90 +++++++----- .../mogo/module/map/MapFrameController.java | 8 ++ .../com/mogo/module/map/MapPresenter.java | 22 +-- .../java/com/mogo/module/map/MapView.java | 7 - .../com/mogo/module/map/VoiceConstants.java | 16 +++ .../com/mogo/module/service/MogoServices.java | 13 +- .../intent/AppOperationIntentHandler.java | 16 +++ .../service/marker/MapMarkerManager.java | 7 +- .../service/map/IMogoMapFrameController.java | 2 + .../service/impl/adas/AdasObjectUtils.java | 2 +- .../service/impl/adas/MogoADASController.java | 4 + 18 files changed, 294 insertions(+), 112 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index bb1d862a4d..bd66e4d9cc 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -23,7 +23,7 @@ android { externalNativeBuild { ndk { // 设置支持的SO库架构 - abiFilters "armeabi-v7a" + abiFilters "armeabi-v7a", 'arm64-v8a' } } } diff --git a/libraries/map-custom/build.gradle b/libraries/map-custom/build.gradle index b8a4271f39..2cad65489a 100644 --- a/libraries/map-custom/build.gradle +++ b/libraries/map-custom/build.gradle @@ -55,7 +55,7 @@ dependencies { implementation project(':foudations:mogo-commons') } - implementation 'com.zhidaoauto.machine:map:1.0.0-online-13' + implementation 'com.zhidaoauto.machine:map:1.0.0-online-14' } apply from: new File(rootProject.rootDir, "gradle/upload.gradle").toString() diff --git a/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/CustomMapView.java b/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/CustomMapView.java index 83adcb164d..2a3d8d24ff 100644 --- a/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/CustomMapView.java +++ b/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/CustomMapView.java @@ -23,7 +23,7 @@ public class CustomMapView implements IMogoMapViewCreator { @Override public IMogoMapView create( Context context ) { - MapAutoApi.INSTANCE.init( context, MapParams.Companion.init().setDebugMode( DebugConfig.isDebug() ) + MapAutoApi.INSTANCE.init( context, MapParams.Companion.init().setDebugMode( false ) .setCoordinateType( MapParams.COORDINATETYPE_GCJ02 ) .setPerspectiveMode( MapParams.MAP_PERSPECTIVE_2D ) .setZoom( 16 ) diff --git a/libraries/mogo-map/src/main/java/com/mogo/map/MogoMapView.java b/libraries/mogo-map/src/main/java/com/mogo/map/MogoMapView.java index 1695f4010e..81094a3d4b 100644 --- a/libraries/mogo-map/src/main/java/com/mogo/map/MogoMapView.java +++ b/libraries/mogo-map/src/main/java/com/mogo/map/MogoMapView.java @@ -36,47 +36,54 @@ public class MogoMapView extends MogoBaseMapView implements ILifeCycle { super( context, attrs, defStyleAttr ); } - private boolean mIsFirstDisplayVRMode = true; + private boolean mIsVrMode = false; @Override protected void addDleMaps() { if ( !MogoMapDelegateFactory.isUseCustom() ) { - mAMapView = new AMapBaseMapView().create( getContext() ); - if ( mAMapView != null ) { - final View mapView = mAMapView.getMapView(); - if ( mapView != null ) { - addView( mapView, new FrameLayout.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT ) ); - } else { - Logger.e( TAG, "create MapView instance failed." ); - } - } else { - Logger.e( TAG, "create IMogoMapView instance failed." ); - } - mMapView = mAMapView; + } else { - mCustomMapView = new CustomMapView().create( getContext() ); - if ( mCustomMapView != null ) { - final View mapView = mCustomMapView.getMapView(); - if ( mapView != null ) { - addView( mapView, new FrameLayout.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT ) ); - } else { - Logger.e( TAG, "create MapView instance failed." ); - } - } else { - Logger.e( TAG, "create IMogoMapView instance failed." ); - } - mMapView = mCustomMapView; + } + mCustomMapView = new CustomMapView().create( getContext() ); + if ( mCustomMapView != null ) { + final View mapView = mCustomMapView.getMapView(); + if ( mapView != null ) { + addView( mapView, new FrameLayout.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT ) ); + } else { + Logger.e( TAG, "create MapView instance failed." ); + } + } else { + Logger.e( TAG, "create IMogoMapView instance failed." ); + } + + mAMapView = new AMapBaseMapView().create( getContext() ); + if ( mAMapView != null ) { + final View mapView = mAMapView.getMapView(); + if ( mapView != null ) { + addView( mapView, new FrameLayout.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT ) ); + } else { + Logger.e( TAG, "create MapView instance failed." ); + } + } else { + Logger.e( TAG, "create IMogoMapView instance failed." ); + } + mMapView = mAMapView; + + mCustomMapView.getMapView().setVisibility( View.GONE ); + MogoMap.getInstance().init( getContext(), mMapView.getMap() ); } @Override public void display2DMap( boolean invokeCreateAuto, boolean invokeResumeAuto ) { + mIsVrMode = false; + mMapView = mAMapView; + MogoMarkerManager.getInstance( getContext() ).removeMarkers(); MogoMap.getInstance().init( getContext(), mAMapView.getMap() ); MogoMapUIController.getInstance().setDelegate( AMapUIController.getInstance() ); - MogoMarkerManager.getInstance( getContext() ).removeMarkers(); mCustomMapView.onPause(); mCustomMapView.getMapView().setVisibility( View.GONE ); mAMapView.onResume(); @@ -85,19 +92,21 @@ public class MogoMapView extends MogoBaseMapView implements ILifeCycle { @Override public void displayVRMap( boolean invokeCreateAuto, boolean invokeResumeAuto ) { - if ( mIsFirstDisplayVRMode ) { - mCustomMapView.onCreate( null ); - mIsFirstDisplayVRMode = false; - } + mIsVrMode = true; + mMapView = mCustomMapView; + MogoMarkerManager.getInstance( getContext() ).removeMarkers(); MogoMap.getInstance().init( getContext(), mCustomMapView.getMap() ); MogoMapUIController.getInstance().setDelegate( com.mogo.map.impl.custom.uicontroller.AMapUIController.getInstance() ); - MogoMarkerManager.getInstance( getContext() ).removeMarkers(); mCustomMapView.onResume(); mCustomMapView.getMapView().setVisibility( View.VISIBLE ); mAMapView.onPause(); mAMapView.getMapView().setVisibility( View.GONE ); } + public boolean isVrMode() { + return mIsVrMode; + } + @Override public void onCreate( Bundle bundle ) { super.onCreate( bundle ); diff --git a/modules/mogo-module-common/src/main/java/com/mogo/module/common/map/MapCenterPointStrategy.java b/modules/mogo-module-common/src/main/java/com/mogo/module/common/map/MapCenterPointStrategy.java index c117f81214..57beb4ef2b 100644 --- a/modules/mogo-module-common/src/main/java/com/mogo/module/common/map/MapCenterPointStrategy.java +++ b/modules/mogo-module-common/src/main/java/com/mogo/module/common/map/MapCenterPointStrategy.java @@ -2,6 +2,7 @@ package com.mogo.module.common.map; import com.mogo.commons.debug.DebugConfig; import com.mogo.map.uicontroller.IMogoMapUIController; +import com.mogo.module.common.MogoApisHandler; import com.mogo.utils.UiThreadHandler; import com.mogo.utils.logger.Logger; @@ -18,7 +19,8 @@ public class MapCenterPointStrategy { private static final String TAG = "MapCenterPointStrategy"; - private static Map< Integer, Map< String, MapCenterPoint > > sStrategies = new HashMap<>(); + private static Map< Integer, Map< String, MapCenterPoint > > sCommonStrategies = new HashMap<>(); + private static Map< Integer, Map< String, MapCenterPoint > > sVrStrategies = new HashMap<>(); public static final MapCenterPoint DEFAULT = new MapCenterPoint( 0.677734D, 0.5733333D ); @@ -32,7 +34,7 @@ public class MapCenterPointStrategy { choosePoint.put( "e8xx", new MapCenterPoint( 0.5D, 0.5D ) ); choosePoint.put( "f80x", new MapCenterPoint( 0.5D, 0.5D ) ); choosePoint.put( "f8xx", new MapCenterPoint( 0.5D, 0.5D ) ); - sStrategies.put( Scene.CHOOSE_POINT, choosePoint ); + sCommonStrategies.put( Scene.CHOOSE_POINT, choosePoint ); } { @@ -43,7 +45,7 @@ public class MapCenterPointStrategy { navi.put( "e8xx", new MapCenterPoint( 0.734375D, 0.573333333333D ) ); navi.put( "f80x", new MapCenterPoint( 0.705208333D, 0.575D ) ); navi.put( "f8xx", new MapCenterPoint( 0.705208333D, 0.575D ) ); - sStrategies.put( Scene.NAVI, navi ); + sCommonStrategies.put( Scene.NAVI, navi ); } { @@ -54,7 +56,7 @@ public class MapCenterPointStrategy { naviWithRoadEvent.put( "e8xx", new MapCenterPoint( 0.734375D, 0.73936170212766D ) ); naviWithRoadEvent.put( "f80x", new MapCenterPoint( 0.705208333D, 0.683333333333D ) ); naviWithRoadEvent.put( "f8xx", new MapCenterPoint( 0.705208333D, 0.683333333333D ) ); - sStrategies.put( Scene.NAVI_WITH_ROAD_EVENT, naviWithRoadEvent ); + sCommonStrategies.put( Scene.NAVI_WITH_ROAD_EVENT, naviWithRoadEvent ); } { @@ -65,7 +67,7 @@ public class MapCenterPointStrategy { aimless.put( "e8xx", new MapCenterPoint( 0.734375D, 0.5D ) ); aimless.put( "f80x", new MapCenterPoint( 0.705208333D, 0.5D ) ); aimless.put( "f8xx", new MapCenterPoint( 0.705208333D, 0.5D ) ); - sStrategies.put( Scene.AIMLESS, aimless ); + sCommonStrategies.put( Scene.AIMLESS, aimless ); } { @@ -76,7 +78,7 @@ public class MapCenterPointStrategy { aimlessWithRoadEvent.put( "e8xx", new MapCenterPoint( 0.734375D, 0.68617 ) ); aimlessWithRoadEvent.put( "f80x", new MapCenterPoint( 0.705208333D, 0.599074074D ) ); aimlessWithRoadEvent.put( "f8xx", new MapCenterPoint( 0.705208333D, 0.599074074D ) ); - sStrategies.put( Scene.AIMLESS_WITH_ROAD_EVENT, aimlessWithRoadEvent ); + sCommonStrategies.put( Scene.AIMLESS_WITH_ROAD_EVENT, aimlessWithRoadEvent ); } { @@ -87,7 +89,7 @@ public class MapCenterPointStrategy { calculatePath.put( "e8xx", new MapCenterPoint( 0.733398D, 0.610833D ) ); calculatePath.put( "f80x", new MapCenterPoint( 0.703125D, 0.6083333D ) ); calculatePath.put( "f8xx", new MapCenterPoint( 0.703125D, 0.6083333D ) ); - sStrategies.put( Scene.CALCULATE_PATH, calculatePath ); + sCommonStrategies.put( Scene.CALCULATE_PATH, calculatePath ); } { @@ -98,7 +100,7 @@ public class MapCenterPointStrategy { categorySearch.put( "e8xx", new MapCenterPoint( 0.733398D, 0.5D ) ); categorySearch.put( "f80x", new MapCenterPoint( 0.733594D, 0.5D ) ); categorySearch.put( "f8xx", new MapCenterPoint( 0.733594D, 0.5D ) ); - sStrategies.put( Scene.CATEGORY_SEARCH, categorySearch ); + sCommonStrategies.put( Scene.CATEGORY_SEARCH, categorySearch ); } { @@ -109,19 +111,103 @@ public class MapCenterPointStrategy { categoryV2XEvent.put( "e8xx", new MapCenterPoint( 0.677734375D, 0.7D ) ); categoryV2XEvent.put( "f80x", new MapCenterPoint( 0.6963541D, 0.65D ) ); categoryV2XEvent.put( "f8xx", new MapCenterPoint( 0.6963541D, 0.65D ) ); - sStrategies.put( Scene.CATEGORY_V2X_EVENT, categoryV2XEvent ); + sCommonStrategies.put( Scene.CATEGORY_V2X_EVENT, categoryV2XEvent ); + } + + // --vr mode + + { + // 选点场景,定位中心点 + Map< String, MapCenterPoint > choosePoint = new HashMap<>(); + choosePoint.put( "d80x", new MapCenterPoint( 0.5D, 0.5D ) ); + choosePoint.put( "em4", new MapCenterPoint( 0.5D, 0.5D ) ); + choosePoint.put( "e8xx", new MapCenterPoint( 0.5D, 0.5D ) ); + choosePoint.put( "f80x", new MapCenterPoint( 0.5D, 0.5D ) ); + choosePoint.put( "f8xx", new MapCenterPoint( 0.5D, 0.5D ) ); + sVrStrategies.put( Scene.CHOOSE_POINT, choosePoint ); + } + + { + // 导航场景,定位视图右下角偏下 + Map< String, MapCenterPoint > navi = new HashMap<>(); + navi.put( "d80x", new MapCenterPoint( 0.5D, 0.573333333333D ) ); + navi.put( "em4", new MapCenterPoint( 0.5D, 0.573333333333D ) ); + navi.put( "e8xx", new MapCenterPoint( 0.5D, 0.573333333333D ) ); + navi.put( "f80x", new MapCenterPoint( 0.5D, 0.575D ) ); + navi.put( "f8xx", new MapCenterPoint( 0.5D, 0.575D ) ); + sVrStrategies.put( Scene.NAVI, navi ); + } + + { + // 导航场景 vs 道路事件展示场景,定位视图右下角偏下 + Map< String, MapCenterPoint > naviWithRoadEvent = new HashMap<>(); + naviWithRoadEvent.put( "d80x", new MapCenterPoint( 0.5D, 0.73936170212766D ) ); + naviWithRoadEvent.put( "em4", new MapCenterPoint( 0.5D, 0.73936170212766D ) ); + naviWithRoadEvent.put( "e8xx", new MapCenterPoint( 0.5D, 0.73936170212766D ) ); + naviWithRoadEvent.put( "f80x", new MapCenterPoint( 0.5D, 0.683333333333D ) ); + naviWithRoadEvent.put( "f8xx", new MapCenterPoint( 0.5D, 0.683333333333D ) ); + sVrStrategies.put( Scene.NAVI_WITH_ROAD_EVENT, naviWithRoadEvent ); + } + + { + // 巡航场景 + Map< String, MapCenterPoint > aimless = new HashMap<>(); + aimless.put( "d80x", new MapCenterPoint( 0.5D, 0.5D ) ); + aimless.put( "em4", new MapCenterPoint( 0.5D, 0.5D ) ); + aimless.put( "e8xx", new MapCenterPoint( 0.5D, 0.5D ) ); + aimless.put( "f80x", new MapCenterPoint( 0.5D, 0.5D ) ); + aimless.put( "f8xx", new MapCenterPoint( 0.5D, 0.5D ) ); + sVrStrategies.put( Scene.AIMLESS, aimless ); + } + + { + // 巡航场景 vs 道路事件展示场景 + Map< String, MapCenterPoint > aimlessWithRoadEvent = new HashMap<>(); + aimlessWithRoadEvent.put( "d80x", new MapCenterPoint( 0.5D, 0.68617 ) ); + aimlessWithRoadEvent.put( "em4", new MapCenterPoint( 0.5D, 0.68617 ) ); + aimlessWithRoadEvent.put( "e8xx", new MapCenterPoint( 0.5D, 0.68617 ) ); + aimlessWithRoadEvent.put( "f80x", new MapCenterPoint( 0.5D, 0.599074074D ) ); + aimlessWithRoadEvent.put( "f8xx", new MapCenterPoint( 0.5D, 0.599074074D ) ); + sVrStrategies.put( Scene.AIMLESS_WITH_ROAD_EVENT, aimlessWithRoadEvent ); + } + + { + // 规划路线,定位视图右边 + Map< String, MapCenterPoint > calculatePath = new HashMap<>(); + calculatePath.put( "d80x", new MapCenterPoint( 0.5D, 0.610833D ) ); + calculatePath.put( "em4", new MapCenterPoint( 0.5D, 0.610833D ) ); + calculatePath.put( "e8xx", new MapCenterPoint( 0.5D, 0.610833D ) ); + calculatePath.put( "f80x", new MapCenterPoint( 0.5D, 0.6083333D ) ); + calculatePath.put( "f8xx", new MapCenterPoint( 0.5D, 0.6083333D ) ); + sVrStrategies.put( Scene.CALCULATE_PATH, calculatePath ); + } + + { + // 分类搜索,定位视图右边 + Map< String, MapCenterPoint > categorySearch = new HashMap<>(); + categorySearch.put( "d80x", new MapCenterPoint( 0.5D, 0.5D ) ); + categorySearch.put( "em4", new MapCenterPoint( 0.5D, 0.5D ) ); + categorySearch.put( "e8xx", new MapCenterPoint( 0.5D, 0.5D ) ); + categorySearch.put( "f80x", new MapCenterPoint( 0.5D, 0.5D ) ); + categorySearch.put( "f8xx", new MapCenterPoint( 0.5D, 0.5D ) ); + sVrStrategies.put( Scene.CATEGORY_SEARCH, categorySearch ); + } + + { + // V2X,场景视图右边 + Map< String, MapCenterPoint > categoryV2XEvent = new HashMap<>(); + categoryV2XEvent.put( "d80x", new MapCenterPoint( 0.5, 0.7D ) ); + categoryV2XEvent.put( "em4", new MapCenterPoint( 0.5, 0.7D ) ); + categoryV2XEvent.put( "e8xx", new MapCenterPoint( 0.5, 0.7D ) ); + categoryV2XEvent.put( "f80x", new MapCenterPoint( 0.5, 0.65D ) ); + categoryV2XEvent.put( "f8xx", new MapCenterPoint( 0.5, 0.65D ) ); + sVrStrategies.put( Scene.CATEGORY_V2X_EVENT, categoryV2XEvent ); } } - public static void addScene( int scene, Map< String, MapCenterPoint > config ) { - if ( sStrategies.containsKey( scene ) ) { - Logger.w( TAG, "scene has already defined, append config..." ); - } - if ( sStrategies.get( scene ) != null ) { - sStrategies.get( scene ).putAll( config ); - } else { - sStrategies.put( scene, config ); - } + public static void resetByChangeMode(){ + setMapCenterPointByScene( MogoApisHandler.getInstance().getApis().getMapServiceApi().getMapUIController(), + Scene.AIMLESS); } /** @@ -134,12 +220,16 @@ public class MapCenterPointStrategy { if ( controller == null ) { return; } - if ( !sStrategies.containsKey( scene ) ) { + Map> strategies = sCommonStrategies; + if ( MogoApisHandler.getInstance().getApis().getMapFrameControllerApi().isVrMode() ) { + strategies = sVrStrategies; + } + if ( !strategies.containsKey( scene ) ) { Logger.w( TAG, "no strategy for scene: %s, use DEFAULT", scene ); controller.setPointToCenter( DEFAULT.x, DEFAULT.y ); return; } - Map< String, MapCenterPoint > points = sStrategies.get( scene ); + Map< String, MapCenterPoint > points = strategies.get( scene ); String car = DebugConfig.getProductFlavor(); if ( !points.containsKey( car ) ) { Logger.w( TAG, "no strategy for series: %s, use DEFAULT", scene ); diff --git a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/entrance/EntranceFragment.java b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/entrance/EntranceFragment.java index 3b22ee2826..25062a36c4 100644 --- a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/entrance/EntranceFragment.java +++ b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/entrance/EntranceFragment.java @@ -399,12 +399,14 @@ public class EntranceFragment extends MvpFragment{ // 进入vr模式 enterVrMode(); + mApis.getMapFrameControllerApi().changeToVRMode(); }); tvExitVrMode = findViewById(R.id.module_ext_exit_vr_mode); tvExitVrMode.setOnClickListener((v)->{ // 退出vr模式 exitVrMode(); + mApis.getMapFrameControllerApi().changeTo2dMode(); }); dealWeatherContainer(); @@ -734,8 +736,7 @@ public class EntranceFragment extends MvpFragment implements @Override public void changeTo2dMode() { + if ( !isVrMode() ) { + return; + } mMogoMapView.display2DMap( false, true ); + afterMapModeChanged(); + MogoApisHandler.getInstance().getApis().getAdasControllerApi().showADAS(); + MogoApisHandler.getInstance().getApis().getStatusManagerApi().setVrMode( TAG, false ); } @Override public void changeToVRMode() { + if ( isVrMode() ) { + return; + } mMogoMapView.displayVRMap( mIsFirstLoadCustomMap, true ); if ( mIsFirstLoadCustomMap ) { + initMapView(); + mMogoMap = mMogoMapView.getMap(); + if ( mMogoMap.getUIController() != null ) { + mMogoMap.getUIController().showMyLocation( true ); + mMogoMap.getUIController().recoverLockMode();// 启动锁车 + } mIsFirstLoadCustomMap = false; } + afterMapModeChanged(); + MogoApisHandler.getInstance().getApis().getAdasControllerApi().closeADAS(); + MogoApisHandler.getInstance().getApis().getStatusManagerApi().setVrMode( TAG, true ); + } + + private void afterMapModeChanged() { + MapCenterPointStrategy.resetByChangeMode(); + final EnumMapUI mapUI = MogoApisHandler.getInstance().getApis().getAdasControllerApi().getCurrentSkinMode(); + MogoApisHandler.getInstance().getApis().getMapServiceApi().getMapUIController().changeMapMode( mapUI ); + MogoApisHandler.getInstance().getApis().getRefreshStrategyControllerApi().restartAutoRefreshAtTime( 0 ); + } + + @Override + public boolean isVrMode() { + return mMogoMapView.isVrMode(); } @Override @@ -137,32 +168,34 @@ public class MapFragment extends MvpFragment< MapView, MapPresenter > implements } private void initMapView() { - if ( mMogoMap != null ) { - IMogoUiSettings uiSettings = mMogoMap.getUiSettings(); - if ( uiSettings != null ) { - //设置所有手势是否可用 - uiSettings.setAllGesturesEnabled( true ); - //设置指南针是否可见。 - uiSettings.setCompassEnabled( false ); - //设置室内地图楼层切换控件是否可见。 - uiSettings.setIndoorSwitchEnabled( true ); - //设置定位按钮是否可见。 - uiSettings.setMyLocationButtonEnabled( false ); - //设置旋转手势是否可用。 - uiSettings.setRotateGesturesEnabled( false ); - //设置比例尺控件是否可见 - uiSettings.setScaleControlsEnabled( true ); - //设置拖拽手势是否可用。 - uiSettings.setScrollGesturesEnabled( true ); - //设置倾斜手势是否可用。 - uiSettings.setTiltGesturesEnabled( true ); - //设置缩放按钮是否可见。 - uiSettings.setZoomControlsEnabled( false ); - //设置双指缩放手势是否可用。 - uiSettings.setZoomGesturesEnabled( true ); - if ( mMogoMap.getUIController() != null ) { - mMogoMap.getUIController().changeMapMode( EnumMapUI.NorthUP_2D ); - } + mMogoMap = mMogoMapView.getMap(); + if ( mMogoMap == null ) { + return; + } + IMogoUiSettings uiSettings = mMogoMap.getUiSettings(); + if ( uiSettings != null ) { + //设置所有手势是否可用 + uiSettings.setAllGesturesEnabled( true ); + //设置指南针是否可见。 + uiSettings.setCompassEnabled( false ); + //设置室内地图楼层切换控件是否可见。 + uiSettings.setIndoorSwitchEnabled( true ); + //设置定位按钮是否可见。 + uiSettings.setMyLocationButtonEnabled( false ); + //设置旋转手势是否可用。 + uiSettings.setRotateGesturesEnabled( false ); + //设置比例尺控件是否可见 + uiSettings.setScaleControlsEnabled( true ); + //设置拖拽手势是否可用。 + uiSettings.setScrollGesturesEnabled( true ); + //设置倾斜手势是否可用。 + uiSettings.setTiltGesturesEnabled( true ); + //设置缩放按钮是否可见。 + uiSettings.setZoomControlsEnabled( false ); + //设置双指缩放手势是否可用。 + uiSettings.setZoomGesturesEnabled( true ); + if ( mMogoMap.getUIController() != null ) { + mMogoMap.getUIController().changeMapMode( EnumMapUI.NorthUP_2D ); } } } @@ -172,11 +205,6 @@ public class MapFragment extends MvpFragment< MapView, MapPresenter > implements MogoApisHandler.getInstance().getApis().getMapFrameControllerApi().destroy(); } - @Override - public IMogoMapUIController getUIController() { - return mMogoMap.getUIController(); - } - @Override public void onDestroyView() { super.onDestroyView(); diff --git a/modules/mogo-module-map/src/main/java/com/mogo/module/map/MapFrameController.java b/modules/mogo-module-map/src/main/java/com/mogo/module/map/MapFrameController.java index 76970d36aa..beceedd146 100644 --- a/modules/mogo-module-map/src/main/java/com/mogo/module/map/MapFrameController.java +++ b/modules/mogo-module-map/src/main/java/com/mogo/module/map/MapFrameController.java @@ -44,6 +44,14 @@ class MapFrameController implements IMogoMapFrameController { } + @Override + public boolean isVrMode() { + if ( mController != null ) { + return mController.isVrMode(); + } + return false; + } + @Override public void destroy() { mController = null; 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 f96ca3c162..529f384551 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 @@ -73,7 +73,7 @@ public class MapPresenter extends Presenter< MapView > implements return; } mStatusManager.setDisplayOverview( TAG, false ); - mView.getUIController().recoverLockMode(); + mMogoMapService.getMapUIController().recoverLockMode(); } }; private AutoNaviBroadcastIntentHandler mAutoNaviReceiver; @@ -86,24 +86,24 @@ public class MapPresenter extends Presenter< MapView > implements @Override public void onTrafficModeChanged( boolean open ) { - mView.getUIController().setTrafficEnabled( open ); + mMogoMapService.getMapUIController().setTrafficEnabled( open ); } @Override public void onCameraModeChanged( EnumMapUI mode ) { - mView.getUIController().changeMapMode( mode ); + mMogoMapService.getMapUIController().changeMapMode( mode ); mApis.getAdasControllerApi().changeAdasControlMode( mode ); } @Override public void onDayNightModeChanged( EnumMapUI mode ) { - mView.getUIController().changeMapMode( mode ); + mMogoMapService.getMapUIController().changeMapMode( mode ); mApis.getAdasControllerApi().changeAdasControlMode( mode ); } @Override public void onMapUiModeChanged( EnumMapUI mapUI ) { - mView.getUIController().changeMapMode( mapUI ); + mMogoMapService.getMapUIController().changeMapMode( mapUI ); } @Override @@ -113,7 +113,7 @@ public class MapPresenter extends Presenter< MapView > implements } if ( mStatusManager.isMainPageOnResume() ) { mStatusManager.setDisplayOverview( TAG, false ); - mView.getUIController().recoverLockMode(); + mMogoMapService.getMapUIController().recoverLockMode(); AIAssist.getInstance( getContext() ).speakTTSVoice( "已为您继续导航" ); UiThreadHandler.removeCallbacks( mLockCarRunnable ); } else { @@ -121,7 +121,7 @@ public class MapPresenter extends Presenter< MapView > implements UiThreadHandler.postDelayed( () -> { try { mStatusManager.setDisplayOverview( TAG, false ); - mView.getUIController().recoverLockMode(); + mMogoMapService.getMapUIController().recoverLockMode(); AIAssist.getInstance( getContext() ).speakTTSVoice( "已为您继续导航" ); UiThreadHandler.removeCallbacks( mLockCarRunnable ); } catch ( Exception e ) { @@ -200,14 +200,14 @@ public class MapPresenter extends Presenter< MapView > implements if ( !mStatusManager.isMainPageOnResume() ) { mStatusManager.setUserInteractionStatus( TAG, true, false ); mStatusManager.setDisplayOverview( TAG, true ); - mView.getUIController().displayOverview( mDisplayOverviewBounds ); + mMogoMapService.getMapUIController().displayOverview( mDisplayOverviewBounds ); AIAssist.getInstance( getContext() ).speakTTSVoice( "展示全程路线" ); } else { mLauncher.backToLauncher( getContext() ); UiThreadHandler.postDelayed( () -> { mStatusManager.setUserInteractionStatus( TAG, true, false ); mStatusManager.setDisplayOverview( TAG, true ); - mView.getUIController().displayOverview( mDisplayOverviewBounds ); + mMogoMapService.getMapUIController().displayOverview( mDisplayOverviewBounds ); AIAssist.getInstance( getContext() ).speakTTSVoice( "展示全程路线" ); }, 2_000L ); } @@ -218,7 +218,7 @@ public class MapPresenter extends Presenter< MapView > implements @Override public void onZoomMap( boolean zoomIn ) { boolean isLocked = mMogoMapService.getMapUIController().isCarLocked(); - MapControlResult result = mView.getUIController().changeZoom( zoomIn ); + MapControlResult result = mMogoMapService.getMapUIController().changeZoom( zoomIn ); if ( !CustomNaviInterrupter.getInstance().interrupt() ) { if ( result == MapControlResult.TARGET ) { UiThreadHandler.postDelayed( () -> { @@ -234,7 +234,7 @@ public class MapPresenter extends Presenter< MapView > implements if ( isLocked ) { // 保持锁车状态 UiThreadHandler.postDelayed( () -> { - mView.getUIController().setLockZoom( ( ( int ) mMogoMapService.getMapUIController().getZoomLevel() ) ); + mMogoMapService.getMapUIController().setLockZoom( ( ( int ) mMogoMapService.getMapUIController().getZoomLevel() ) ); mMogoMapService.getMapUIController().recoverLockMode();//缩放地图会导致锁车发生改变,这里强制锁车 }, 1_000 ); } else { diff --git a/modules/mogo-module-map/src/main/java/com/mogo/module/map/MapView.java b/modules/mogo-module-map/src/main/java/com/mogo/module/map/MapView.java index 8bb8ae2a88..6c23731575 100644 --- a/modules/mogo-module-map/src/main/java/com/mogo/module/map/MapView.java +++ b/modules/mogo-module-map/src/main/java/com/mogo/module/map/MapView.java @@ -10,11 +10,4 @@ import com.mogo.map.uicontroller.IMogoMapUIController; * 地图view */ public interface MapView extends IView { - - /** - * 地图控制接口 - * - * @return - */ - IMogoMapUIController getUIController(); } diff --git a/modules/mogo-module-map/src/main/java/com/mogo/module/map/VoiceConstants.java b/modules/mogo-module-map/src/main/java/com/mogo/module/map/VoiceConstants.java index 1cf7743744..3009a94f71 100644 --- a/modules/mogo-module-map/src/main/java/com/mogo/module/map/VoiceConstants.java +++ b/modules/mogo-module-map/src/main/java/com/mogo/module/map/VoiceConstants.java @@ -57,6 +57,20 @@ public class VoiceConstants { 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模式 */ @@ -191,6 +205,8 @@ public class VoiceConstants { 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 ); diff --git a/modules/mogo-module-service/src/main/java/com/mogo/module/service/MogoServices.java b/modules/mogo-module-service/src/main/java/com/mogo/module/service/MogoServices.java index 8439eff2f8..ef09770307 100644 --- a/modules/mogo-module-service/src/main/java/com/mogo/module/service/MogoServices.java +++ b/modules/mogo-module-service/src/main/java/com/mogo/module/service/MogoServices.java @@ -54,6 +54,7 @@ import com.mogo.module.service.refresh.CustomRefreshStrategy; import com.mogo.module.service.refresh.RefreshObject; import com.mogo.module.service.strategy.CarIconDisplayStrategy; import com.mogo.module.service.websocket.LocationResult; +import com.mogo.module.service.websocket.OnePerSecondSendContent; import com.mogo.service.adas.IMogoADASController; import com.mogo.service.adas.entity.ADASRecognizedResult; import com.mogo.service.fragmentmanager.FragmentStackTransactionListener; @@ -428,7 +429,7 @@ public class MogoServices implements IMogoMapListener, AutoPilotRemoteController.getInstance().start(); - mThreadHandler.sendEmptyMessageDelayed( ServiceConst.MSG_SEND_CAR_LOCATION_AND_ADAS_RECOGNIZED_RESULT_2_SERVER, 0 ); +// mThreadHandler.sendEmptyMessageDelayed( ServiceConst.MSG_SEND_CAR_LOCATION_AND_ADAS_RECOGNIZED_RESULT_2_SERVER, 0 ); } private void initLocationServiceProcess( Context context ) { @@ -445,8 +446,9 @@ public class MogoServices implements IMogoMapListener, private void startSendCarLocationAndAdasRecognizedResult2Server() { Location lastCarLocation = mLastCarLocation; + LocationResult locationResult = null; if ( lastCarLocation != null ) { - LocationResult locationResult = new LocationResult(); + locationResult = new LocationResult(); locationResult.alt = lastCarLocation.getAltitude(); locationResult.heading = lastCarLocation.getBearing(); locationResult.lat = lastCarLocation.getLatitude(); @@ -454,10 +456,15 @@ public class MogoServices implements IMogoMapListener, locationResult.satelliteTime = lastCarLocation.getTime(); locationResult.systemTime = System.currentTimeMillis(); locationResult.speed = lastCarLocation.getSpeed(); + locationResult.sn = com.mogo.commons.network.Utils.getSn(); locationResult.mortonCode = MortonCode.wrapEncodeMorton( locationResult.lon, locationResult.lat ); } List< ADASRecognizedResult > recognizedResults = MarkerServiceHandler.getADASController().getLastADASRecognizedResult(); - + OnePerSecondSendContent content = new OnePerSecondSendContent(); + content.self = locationResult; + content.adas = recognizedResults; + //todo 通过 websocket 发送内容 + Logger.d( TAG, GsonUtil.jsonFromObject( content ) ); } private void initWorkThread() { diff --git a/modules/mogo-module-service/src/main/java/com/mogo/module/service/intent/AppOperationIntentHandler.java b/modules/mogo-module-service/src/main/java/com/mogo/module/service/intent/AppOperationIntentHandler.java index e02c90a89e..508adabc3f 100644 --- a/modules/mogo-module-service/src/main/java/com/mogo/module/service/intent/AppOperationIntentHandler.java +++ b/modules/mogo-module-service/src/main/java/com/mogo/module/service/intent/AppOperationIntentHandler.java @@ -4,6 +4,8 @@ import android.content.Context; import android.content.Intent; import android.text.TextUtils; +import com.mogo.module.common.MogoApisHandler; +import com.mogo.module.service.MarkerServiceHandler; import com.mogo.module.service.ServiceConst; import com.mogo.utils.LaunchUtils; import com.mogo.utils.TipToast; @@ -26,6 +28,7 @@ public class AppOperationIntentHandler implements IntentHandler { public AppOperationIntentHandler() { sAppPackages.put( "车聊聊", "com.zhidao.imdemo" ); + sAppPackages.put( "VR模式", "" ); } @Override @@ -35,6 +38,12 @@ public class AppOperationIntentHandler implements IntentHandler { String app = object.optString( "object" ); String operation = object.optString( "operation" ); if ( TextUtils.equals( "打开", operation ) ) { + if ( TextUtils.equals( "VR模式", app ) ) { + if ( MarkerServiceHandler.getApis().getStatusManagerApi().isMainPageOnResume() ) { + MarkerServiceHandler.getApis().getMapFrameControllerApi().changeToVRMode(); + } + return; + } if ( TextUtils.isEmpty( sAppPackages.get( app ) ) ) { return; } @@ -43,6 +52,13 @@ public class AppOperationIntentHandler implements IntentHandler { } catch ( Exception e ) { TipToast.shortTip( "应用程序未安装" ); } + } else if ( TextUtils.equals( "关闭", operation ) ) { + if ( TextUtils.equals( "VR模式", app ) ) { + if ( MarkerServiceHandler.getApis().getStatusManagerApi().isMainPageOnResume() ) { + MarkerServiceHandler.getApis().getMapFrameControllerApi().changeTo2dMode(); + } + return; + } } } catch ( Exception e ) { e.printStackTrace(); diff --git a/modules/mogo-module-service/src/main/java/com/mogo/module/service/marker/MapMarkerManager.java b/modules/mogo-module-service/src/main/java/com/mogo/module/service/marker/MapMarkerManager.java index b4a0fc530b..2f24d3757c 100644 --- a/modules/mogo-module-service/src/main/java/com/mogo/module/service/marker/MapMarkerManager.java +++ b/modules/mogo-module-service/src/main/java/com/mogo/module/service/marker/MapMarkerManager.java @@ -35,7 +35,6 @@ import com.mogo.module.service.utils.ViewUtils; import com.mogo.service.adas.IMogoADASControlStatusChangedListener; import com.mogo.service.connection.IMogoOnMessageListener; import com.mogo.service.module.IMogoBizActionDoneListener; -import com.mogo.utils.AppUtils; import com.mogo.utils.ResourcesHelper; import com.mogo.utils.ThreadPoolService; import com.mogo.utils.UiThreadHandler; @@ -216,8 +215,10 @@ public class MapMarkerManager implements IMogoMarkerClickListener, mogoMarker.setToTop(); } } - MarkerServiceHandler.getMogoStatusManager().setUserInteractionStatus( TAG, true, false ); - MarkerServiceHandler.getMapUIController().moveToCenter( mogoMarker.getPosition(), DebugConfig.isRoadEventAnimated() ); + if ( !MarkerServiceHandler.getApis().getMapFrameControllerApi().isVrMode() ) { + MarkerServiceHandler.getMogoStatusManager().setUserInteractionStatus( TAG, true, false ); + MarkerServiceHandler.getMapUIController().moveToCenter( mogoMarker.getPosition(), DebugConfig.isRoadEventAnimated() ); + } } private void updateCarUserInfoWindow( IMogoMarker marker ) { diff --git a/services/mogo-service-api/src/main/java/com/mogo/service/map/IMogoMapFrameController.java b/services/mogo-service-api/src/main/java/com/mogo/service/map/IMogoMapFrameController.java index 6bc08593b5..834c4802db 100644 --- a/services/mogo-service-api/src/main/java/com/mogo/service/map/IMogoMapFrameController.java +++ b/services/mogo-service-api/src/main/java/com/mogo/service/map/IMogoMapFrameController.java @@ -23,4 +23,6 @@ interface IMogoMapFrameController extends IProvider, IDestroyable { * 切换到自研vr */ void changeToVRMode(); + + boolean isVrMode(); } diff --git a/services/mogo-service/src/main/java/com/mogo/service/impl/adas/AdasObjectUtils.java b/services/mogo-service/src/main/java/com/mogo/service/impl/adas/AdasObjectUtils.java index 008b89b892..066d36a29d 100644 --- a/services/mogo-service/src/main/java/com/mogo/service/impl/adas/AdasObjectUtils.java +++ b/services/mogo-service/src/main/java/com/mogo/service/impl/adas/AdasObjectUtils.java @@ -71,7 +71,7 @@ class AdasObjectUtils { result.color = rectBean.getColor(); result.speed = rectBean.getSpeed(); result.cardId = rectBean.getCarId(); - result.mortonCode = MortonCode.encodeMorton( result.lon, result.lat ); + result.mortonCode = MortonCode.wrapEncodeMorton( result.lon, result.lat ); return result; } } diff --git a/services/mogo-service/src/main/java/com/mogo/service/impl/adas/MogoADASController.java b/services/mogo-service/src/main/java/com/mogo/service/impl/adas/MogoADASController.java index 8ed426c02b..abd9f7838a 100644 --- a/services/mogo-service/src/main/java/com/mogo/service/impl/adas/MogoADASController.java +++ b/services/mogo-service/src/main/java/com/mogo/service/impl/adas/MogoADASController.java @@ -9,6 +9,7 @@ import android.util.Log; import com.alibaba.android.arouter.facade.annotation.Route; import com.mogo.commons.AbsMogoApplication; import com.mogo.map.uicontroller.EnumMapUI; +import com.mogo.module.common.MogoApisHandler; import com.mogo.module.common.utils.CarSeries; import com.mogo.service.MogoServicePaths; import com.mogo.service.adas.IMogoADASController; @@ -163,6 +164,9 @@ public class MogoADASController implements IMogoADASController { if ( !SharedPrefsMgr.getInstance( AbsMogoApplication.getApp() ).getBoolean( getSpGuide(), false ) ) { return; } + if ( MogoApisHandler.getInstance().getApis().getMapFrameControllerApi().isVrMode() ) { + return; + } Logger.d( TAG, Log.getStackTraceString( new Throwable() ) ); init( AbsMogoApplication.getApp() ); AutopilotServiceManage.getInstance().registerAutopilotServiceStatusListener( new IAutopilotServiceStatusListener() {