From bb1de8acac9cf68129381d1522c6fa2b2c852dd1 Mon Sep 17 00:00:00 2001 From: wangcongtao Date: Thu, 26 Mar 2020 19:22:39 +0800 Subject: [PATCH] opt --- .../map/impl/amap/AMapNaviViewWrapper.java | 7 ++ .../com/mogo/map/impl/amap/hook/BnHooker.java | 3 +- .../amap/uicontroller/AMapUIController.java | 8 +++ .../uicontroller/IMogoMapUIController.java | 6 ++ .../com/mogo/map/MogoMapUIController.java | 8 +++ .../module/apps/AppNavigatorFragment.java | 3 +- .../mogo/module/apps/model/NavigatorApps.java | 43 +++++++++++-- .../mogo/module/common/utils/CarSeries.java | 64 +++++++++++++++++++ .../module/extensions/anim/AnimWrapper.java | 4 +- .../com/mogo/module/map/MapPresenter.java | 20 ++++-- .../com/mogo/module/service/MogoServices.java | 7 -- .../IMogoRefreshStrategyController.java | 3 - 12 files changed, 150 insertions(+), 26 deletions(-) create mode 100644 modules/mogo-module-common/src/main/java/com/mogo/module/common/utils/CarSeries.java diff --git a/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/AMapNaviViewWrapper.java b/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/AMapNaviViewWrapper.java index e6cb446a23..e6179a0971 100644 --- a/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/AMapNaviViewWrapper.java +++ b/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/AMapNaviViewWrapper.java @@ -83,6 +83,7 @@ public class AMapNaviViewWrapper implements IMogoMapView, // 自定义定位源的回调信息,前瞻线 private LocationSource.OnLocationChangedListener mOnLocationChangedListener; + private boolean mIsCarLockced = false; public AMapNaviViewWrapper( AMapNaviView mapView ) { this.mMapView = mapView; @@ -334,6 +335,7 @@ public class AMapNaviViewWrapper implements IMogoMapView, @Override public void onLockMap( boolean isLock ) { Logger.d( TAG, "lock status = %s", isLock ); + mIsCarLockced = isLock; Trace.beginSection( "timer.onCameraChangeFinish" ); MogoMapListenerHandler.getInstance().onLockMap( isLock ); Trace.endSection(); @@ -799,4 +801,9 @@ public class AMapNaviViewWrapper implements IMogoMapView, mOnLocationChangedListener.onLocationChanged( location ); } } + + @Override + public synchronized boolean isCarLocked() { + return mIsCarLockced; + } } diff --git a/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/hook/BnHooker.java b/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/hook/BnHooker.java index 06edf1be18..c4ae31a0c9 100644 --- a/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/hook/BnHooker.java +++ b/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/hook/BnHooker.java @@ -53,9 +53,10 @@ public class BnHooker implements InvocationHandler { @Override public Object invoke( Object proxy, Method method, Object[] args ) throws Throwable { if ( method.getName().equals( "setRenderFps" ) ) { + Logger.d( TAG, "setRenderFps" ); if ( !NaviClient.getInstance( mContext ).isNaviing() ) { - return method.invoke( host, 10 ); } + return method.invoke( host, 10 ); } if ( method.getName().equals( "drawFrame" ) ) { Logger.d( TAG, "drawFrame" ); diff --git a/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/uicontroller/AMapUIController.java b/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/uicontroller/AMapUIController.java index 2509ae321e..de5ccd64bf 100644 --- a/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/uicontroller/AMapUIController.java +++ b/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/uicontroller/AMapUIController.java @@ -241,4 +241,12 @@ public class AMapUIController implements IMogoMapUIController { mClient.changeMyLocation( location ); } } + + @Override + public boolean isCarLocked() { + if ( mClient != null ) { + return mClient.isCarLocked(); + } + return false; + } } diff --git a/libraries/mogo-map-api/src/main/java/com/mogo/map/uicontroller/IMogoMapUIController.java b/libraries/mogo-map-api/src/main/java/com/mogo/map/uicontroller/IMogoMapUIController.java index bd2d6aeef6..e29b5e938f 100644 --- a/libraries/mogo-map-api/src/main/java/com/mogo/map/uicontroller/IMogoMapUIController.java +++ b/libraries/mogo-map-api/src/main/java/com/mogo/map/uicontroller/IMogoMapUIController.java @@ -180,4 +180,10 @@ public interface IMogoMapUIController { * @return */ EnumMapUI getCurrentUiMode(); + + /** + * 锁车状态 + * @return + */ + boolean isCarLocked(); } diff --git a/libraries/mogo-map/src/main/java/com/mogo/map/MogoMapUIController.java b/libraries/mogo-map/src/main/java/com/mogo/map/MogoMapUIController.java index 83d2d655a8..2e9ab03a71 100644 --- a/libraries/mogo-map/src/main/java/com/mogo/map/MogoMapUIController.java +++ b/libraries/mogo-map/src/main/java/com/mogo/map/MogoMapUIController.java @@ -234,4 +234,12 @@ public class MogoMapUIController implements IMogoMapUIController { mDelegate.changeMyLocation( location ); } } + + @Override + public boolean isCarLocked() { + if ( mDelegate != null ) { + return mDelegate.isCarLocked(); + } + return false; + } } diff --git a/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/AppNavigatorFragment.java b/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/AppNavigatorFragment.java index 6fae9abca7..ef7e10856d 100644 --- a/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/AppNavigatorFragment.java +++ b/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/AppNavigatorFragment.java @@ -58,7 +58,7 @@ public class AppNavigatorFragment extends MvpFragment getApps() { List< NavigatorApp > apps = new ArrayList<>(); apps.add( new NavigatorApp( R.drawable.module_apps_ic_online_car,R.drawable.module_apps_ic_online_car_unchecked, "在线车辆", ModuleNames.CARD_TYPE_USER_DATA ) ); @@ -31,4 +26,38 @@ public class NavigatorApps { apps.add( new NavigatorApp( R.drawable.module_apps_ic_tanlu, R.drawable.module_apps_ic_tanlu_unchecked,"探路", ModuleNames.CARD_TYPE_ROAD_CONDITION ) ); return apps; } + +// public static List< NavigatorApp > getApps() { +// List< NavigatorApp > apps = new ArrayList<>(); +// List< MogoModule > modules = MogoModulePaths.getModules(); +// for ( MogoModule module : modules ) { +// NavigatorApp app = getApp( module ); +// if ( app == null ) { +// continue; +// } +// apps.add( app ); +// } +// return apps; +// } +// +// private static NavigatorApp getApp( MogoModule module ) { +// if ( module == null ) { +// return null; +// } +// switch ( module.getName() ) { +// case ModuleNames.CARD_TYPE_USER_DATA: +// return new NavigatorApp( R.drawable.module_apps_ic_online_car, R.drawable.module_apps_ic_online_car_unchecked, "在线车辆", ModuleNames.CARD_TYPE_USER_DATA ); +// case ModuleNames.CARD_TYPE_NOVELTY: +// return new NavigatorApp( R.drawable.module_apps_ic_interest, R.drawable.module_apps_ic_interest_unchecked, "新鲜事", ModuleNames.CARD_TYPE_NOVELTY ); +// case ModuleNames.CARD_TYPE_BUSINESS_OPERATION: +// return new NavigatorApp( R.drawable.module_apps_ic_news, R.drawable.module_apps_ic_news_unchecked, "首页", ModuleNames.CARD_TYPE_BUSINESS_OPERATION ); +// case ModuleNames.CARD_TYPE_SHARE_MUSIC: +// return new NavigatorApp( R.drawable.module_apps_ic_media_center, R.drawable.module_apps_ic_media_center_checked, "媒体中心", ModuleNames.CARD_TYPE_SHARE_MUSIC ); +// case ModuleNames.CARD_TYPE_CARS_CHATTING: +// return new NavigatorApp( R.drawable.module_apps_ic_chat_icon, R.drawable.module_apps_ic_chat_unchecked, "车聊聊", ModuleNames.CARD_TYPE_CARS_CHATTING ); +// case ModuleNames.CARD_TYPE_ROAD_CONDITION: +// return new NavigatorApp( R.drawable.module_apps_ic_tanlu, R.drawable.module_apps_ic_tanlu_unchecked, "探路", ModuleNames.CARD_TYPE_ROAD_CONDITION ); +// } +// return null; +// } } diff --git a/modules/mogo-module-common/src/main/java/com/mogo/module/common/utils/CarSeries.java b/modules/mogo-module-common/src/main/java/com/mogo/module/common/utils/CarSeries.java new file mode 100644 index 0000000000..0451406652 --- /dev/null +++ b/modules/mogo-module-common/src/main/java/com/mogo/module/common/utils/CarSeries.java @@ -0,0 +1,64 @@ +package com.mogo.module.common.utils; + +import java.lang.reflect.Method; + +/** + * @author congtaowang + * @since 2020-03-26 + *

+ * 车机类型 + */ +public class CarSeries { + + public static final int CAR_SERIES_C80X = 10; + public static final int CAR_SERIES_D80X = 20; + public static final int CAR_SERIES_D81X = 21; + public static final int CAR_SERIES_D82X = 22; + public static final int CAR_SERIES_D84X = 23; + public static final int CAR_SERIES_F80X = 30; + public static final int CAR_SERIES_G80X = 40; + + public static int CAR_SERIES = 0; + + public static int getSeries() { + if ( CAR_SERIES != 0 ) { + return CAR_SERIES; + } + synchronized ( CarSeries.class ) { + if ( CAR_SERIES != 0 ) { + return CAR_SERIES; + } + String device = get( "ro.fota.device" ); + if ( "FG166".equals( device ) ) { + CAR_SERIES = CAR_SERIES_C80X; + } else if ( "D801-802".equals( device ) ) { + CAR_SERIES = CAR_SERIES_D80X; + } else if ( "D811-812".equals( device ) ) { + CAR_SERIES = CAR_SERIES_D81X; + } else if ( "D821-822".equals( device ) ) { + CAR_SERIES = CAR_SERIES_D82X; + } else if ( "D841-842".equals( device ) ) { + CAR_SERIES = CAR_SERIES_D84X; + } else if ( "G801-802".equals( device ) ) { + CAR_SERIES = CAR_SERIES_G80X; + } else if ( "F801-802".equals( device ) ) { + CAR_SERIES = CAR_SERIES_F80X; + } else { + CAR_SERIES = CAR_SERIES_F80X; + } + return CAR_SERIES; + } + } + + private static String get( String key ) { + String value = ""; + try { + Class< ? > c = Class.forName( "android.os.SystemProperties" ); + Method get = c.getMethod( "get", new Class[]{String.class, String.class} ); + value = ( String ) get.invoke( c, new Object[]{key, "unknown"} ); + } catch ( Exception e ) { + value = ""; + } + return value; + } +} diff --git a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/anim/AnimWrapper.java b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/anim/AnimWrapper.java index 6c31ce895e..3ff87e8e4e 100644 --- a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/anim/AnimWrapper.java +++ b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/anim/AnimWrapper.java @@ -1,9 +1,9 @@ package com.mogo.module.extensions.anim; import android.graphics.drawable.AnimationDrawable; -import android.os.Build; import android.widget.ImageView; +import com.mogo.module.common.utils.CarSeries; import com.mogo.module.extensions.R; import com.mogo.utils.ThreadPoolService; import com.mogo.utils.UiThreadHandler; @@ -27,7 +27,7 @@ public class AnimWrapper implements Anim { public void initAnim( ImageView target ) { mTarget = target; - if ( Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP ) { + if ( CarSeries.getSeries() == CarSeries.CAR_SERIES_F80X ) { ThreadPoolService.execute( () -> { final AnimationDrawable drawable = new AnimationDrawable(); for ( int i = 0; i < AnimRes.sRes.length; i++ ) { 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 f5f51f3a35..3b845b98ce 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 @@ -23,6 +23,7 @@ import com.mogo.service.intent.IMogoIntentListener; import com.mogo.service.intent.IMogoIntentManager; import com.mogo.service.map.IMogoMapService; import com.mogo.service.module.IMogoSearchManager; +import com.mogo.service.strategy.IMogoRefreshStrategyController; import com.mogo.service.voice.IMogoVoiceListener; import com.mogo.service.voice.IMogoVoiceManager; import com.mogo.utils.ResourcesHelper; @@ -48,6 +49,7 @@ public class MapPresenter extends Presenter implements private IMogoMapService mMogoMapService; private IMogoIntentManager mMogoIntentManager; private IMogoSearchManager mSearchManager; + private IMogoRefreshStrategyController mRefreshStrategyController; public MapPresenter(MapView view) { super(view); @@ -72,12 +74,19 @@ public class MapPresenter extends Presenter implements if (type == 0) { mView.getUIController().setTrafficEnabled(opera_type == 0); } else if (type == 1) { + boolean isLocked = mMogoMapService.getMapUIController().isCarLocked(); mView.getUIController().changeZoom(opera_type == 0); - UiThreadHandler.postDelayed( ()->{ - int lockZoomLevel = opera_type == 0 ? ( ( int ) mView.getUIController().getZoomLevel() ) : ( ( int ) (mView.getUIController().getZoomLevel() + 0.5 )); - mView.getUIController().setLockZoom( lockZoomLevel ); - mMogoMapService.getMapUIController().recoverLockMode();//缩放地图会导致锁车发生改变,这里强制锁车 - }, 1_000 ); + if ( isLocked ) { + // 保持锁车状态 + UiThreadHandler.postDelayed( ()->{ + int lockZoomLevel = opera_type == 0 ? ( ( int ) mView.getUIController().getZoomLevel() ) : ( ( int ) (mView.getUIController().getZoomLevel() + 0.5 )); + mView.getUIController().setLockZoom( lockZoomLevel ); + mMogoMapService.getMapUIController().recoverLockMode();//缩放地图会导致锁车发生改变,这里强制锁车 + }, 1_000 ); + } else { + // 30s后锁车刷新 + mRefreshStrategyController.restartAutoRefreshAtTime( 30 ); + } } else if (type == 2) { if (opera_type == 0) { mView.getUIController().changeMapMode(EnumMapUI.CarUp_2D); @@ -161,6 +170,7 @@ public class MapPresenter extends Presenter implements mMogoMapService = apis.getMapServiceApi(); mMogoIntentManager = apis.getIntentManagerApi(); mSearchManager = apis.getSearchManagerApi(); + mRefreshStrategyController = apis.getRefreshStrategyControllerApi(); IMogoNavi mogoNavi = mMogoMapService.getNavi(getContext()); mogoNavi.setCalculatePathDisplayBounds(new Rect( 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 65e4a298f7..698944eb93 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 @@ -743,13 +743,6 @@ public class MogoServices implements IMogoMapListener, } int status = intent.getIntExtra( MogoReceiver.PARAM_ADAS_STATUS, 0 ); mStatusManager.setADASUIShow( ServiceConst.TYPE, status == 1 ); - if ( status != 1 ) { // adas 关闭 - mUiController.setLockZoom( ServiceConst.DEFAULT_LOCK_CAR_ZOOM_LEVEL ); - // 延时两秒执行是为了让其它事物完成 - UiThreadHandler.postDelayed( () -> { - mUiController.showMyLocation( true ); - }, 2_000L ); - } } else if ( Intent.ACTION_POWER_CONNECTED.equals( command ) ) { mStatusManager.setAccStatus( ServiceConst.TYPE, true ); } else if ( Intent.ACTION_POWER_DISCONNECTED.equals( command ) ) { diff --git a/services/mogo-service-api/src/main/java/com/mogo/service/strategy/IMogoRefreshStrategyController.java b/services/mogo-service-api/src/main/java/com/mogo/service/strategy/IMogoRefreshStrategyController.java index 7c3f6f89ca..0cc09c1221 100644 --- a/services/mogo-service-api/src/main/java/com/mogo/service/strategy/IMogoRefreshStrategyController.java +++ b/services/mogo-service-api/src/main/java/com/mogo/service/strategy/IMogoRefreshStrategyController.java @@ -16,7 +16,4 @@ public interface IMogoRefreshStrategyController extends IProvider { * @param delay 单位(ms) 0 为则立即刷新,为负值则忽略 */ void restartAutoRefreshAtTime( int delay ); - - - } \ No newline at end of file