From 0b0ac71d22e5d22b27200dc810283e086dba8e6d Mon Sep 17 00:00:00 2001 From: wangcongtao Date: Tue, 31 Mar 2020 16:07:30 +0800 Subject: [PATCH] opt --- .../map/impl/amap/AMapNaviViewWrapper.java | 5 ++ .../impl/amap/message/AMapMessageConsts.java | 4 ++ .../amap/message/AMapMessageListener.java | 2 + .../impl/amap/message/AMapMessageManager.java | 16 +++++ .../impl/amap/navi/NaviListenerAdapter.java | 12 +++- .../map/impl/amap/navi/NaviOverlayHelper.java | 45 +++++++++++--- .../com/mogo/module/apps/model/AppEnum.java | 43 +++++++------ .../module_apps_ic_personal_center.png | Bin 0 -> 8083 bytes .../module_apps_ic_personal_center.png | Bin 0 -> 23061 bytes .../com/mogo/module/service/MogoServices.java | 58 +++++++----------- 10 files changed, 119 insertions(+), 66 deletions(-) create mode 100755 modules/mogo-module-apps/src/main/res/drawable-ldpi/module_apps_ic_personal_center.png create mode 100755 modules/mogo-module-apps/src/main/res/drawable-xhdpi/module_apps_ic_personal_center.png 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 5701f3f316..54cc9a4266 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 @@ -640,6 +640,11 @@ public class AMapNaviViewWrapper implements IMogoMapView, } + @Override + public void onCalculateSuccess() { + loseLockMode(); + } + @Override public void onCameraChange( CameraPosition cameraPosition ) { } diff --git a/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/message/AMapMessageConsts.java b/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/message/AMapMessageConsts.java index fc2c3c7a5a..37fb4c056f 100644 --- a/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/message/AMapMessageConsts.java +++ b/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/message/AMapMessageConsts.java @@ -22,5 +22,9 @@ public class AMapMessageConsts { * 取消导航 */ public static final int MSG_NAVI_STOP = 1001; + /** + * 规划路线成功 + */ + public static final int MSG_CALCULATE_SUCCESS = 1002; } diff --git a/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/message/AMapMessageListener.java b/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/message/AMapMessageListener.java index cac4fa5a8a..d183bd1124 100644 --- a/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/message/AMapMessageListener.java +++ b/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/message/AMapMessageListener.java @@ -15,4 +15,6 @@ public interface AMapMessageListener { void onNaviStopped(); void onNaviInfoUpdat( NaviInfo naviInfo ); + + void onCalculateSuccess(); } diff --git a/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/message/AMapMessageManager.java b/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/message/AMapMessageManager.java index 1083f5a520..dc3782aadc 100644 --- a/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/message/AMapMessageManager.java +++ b/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/message/AMapMessageManager.java @@ -84,6 +84,10 @@ public class AMapMessageManager { sendMessage( AMapMessageConsts.MSG_NAVI_STOP ); } + public void postCalculateSuccess() { + sendMessage( AMapMessageConsts.MSG_CALCULATE_SUCCESS ); + } + private synchronized void handleMessage( Message msg ) { if ( msg == null ) { return; @@ -95,6 +99,9 @@ public class AMapMessageManager { case AMapMessageConsts.MSG_NAVI_STOP: handleNaviStoppedMsg(); break; + case AMapMessageConsts.MSG_CALCULATE_SUCCESS: + handleCalculateSuccessMsg(); + break; } } @@ -115,4 +122,13 @@ public class AMapMessageManager { listener.onNaviStopped(); } } + + private void handleCalculateSuccessMsg() { + if ( mListeners == null ) { + return; + } + for ( AMapMessageListener listener : mListeners ) { + listener.onCalculateSuccess(); + } + } } diff --git a/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/navi/NaviListenerAdapter.java b/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/navi/NaviListenerAdapter.java index d52c05fb59..6d694a51fa 100644 --- a/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/navi/NaviListenerAdapter.java +++ b/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/navi/NaviListenerAdapter.java @@ -27,6 +27,7 @@ import com.mogo.map.navi.MogoNaviListenerHandler; import com.mogo.map.navi.MogoTraffic; import com.mogo.map.navi.OnCalculatePathItemClickInteraction; import com.mogo.utils.UiThreadHandler; +import com.mogo.utils.WorkThreadHandler; import com.mogo.utils.logger.Logger; import java.util.List; @@ -222,8 +223,14 @@ public class NaviListenerAdapter extends AMapNaviListenerAdapter { super.onCalculateRouteSuccess( aMapCalcRouteResult ); Logger.i( TAG, "导航规划成功" ); setStopped( false ); - mNaviOverlayHelper.showCalculatedPaths(); - MogoNaviListenerHandler.getInstance().onCalculateSuccess(); + WorkThreadHandler.getInstance().post( ()->{ + mNaviOverlayHelper.showCalculatedPaths(()->{ + UiThreadHandler.post( ()->{ + MogoNaviListenerHandler.getInstance().onCalculateSuccess(); + AMapMessageManager.getInstance().postCalculateSuccess(); + } ); + }); + } ); } @Override @@ -247,6 +254,7 @@ public class NaviListenerAdapter extends AMapNaviListenerAdapter { if ( mNaviOverlayHelper != null ) { mNaviOverlayHelper.handleClickedPolyline( polyline, isNaviing() ); mAMapNavi.selectRouteId( mNaviOverlayHelper.getSelectedPathId() ); + mNaviOverlayHelper.showBounds(); } } diff --git a/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/navi/NaviOverlayHelper.java b/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/navi/NaviOverlayHelper.java index 106fd6a073..ffc5caa62f 100644 --- a/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/navi/NaviOverlayHelper.java +++ b/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/navi/NaviOverlayHelper.java @@ -86,18 +86,22 @@ public class NaviOverlayHelper implements OnCalculatePathItemClickInteraction { /** * 显示规划的路径 */ - public void showCalculatedPaths() { + public void showCalculatedPaths( Runnable after ) { clearCalculatedOverlay(); mCalculatePathItems = getSortedPaths(); if ( mCalculatePathItems == null || mCalculatePathItems.isEmpty() ) { return; } - addEndPoints(); - showPathsBound( getBounds() ); - renderPathOverlay( mCalculatePathItems ); + showPathsBound( getBounds(), () -> { + addEndPoints(); + renderPathOverlay( mCalculatePathItems ); + if ( after != null ) { + after.run(); + } + } ); } - private LatLngBounds getBounds(){ + private LatLngBounds getBounds() { if ( mCalculatePathItems == null ) { return null; } @@ -164,17 +168,39 @@ public class NaviOverlayHelper implements OnCalculatePathItemClickInteraction { } } + public void showBounds() { + showPathsBound( getBounds(), null ); + } + /** * 将规划好的路径显示在视野内 */ - private void showPathsBound( LatLngBounds bounds ) { + private void showPathsBound( LatLngBounds bounds, Runnable after ) { if ( bounds == null ) { return; } checkAMapInstance(); - mAMap.animateCamera( - CameraUpdateFactory.newLatLngBoundsRect( bounds, mBoundRect.left, mBoundRect.right, - mBoundRect.top, mBoundRect.bottom ) ); + mAMap.animateCamera( CameraUpdateFactory.newLatLngBoundsRect( + bounds, + mBoundRect.left, + mBoundRect.right, + mBoundRect.top, + mBoundRect.bottom ), + new AMap.CancelableCallback() { + @Override + public void onFinish() { + if ( after != null ) { + after.run(); + } + } + + @Override + public void onCancel() { + if ( after != null ) { + after.run(); + } + } + } ); } private void checkAMapInstance() { @@ -414,6 +440,7 @@ public class NaviOverlayHelper implements OnCalculatePathItemClickInteraction { public void onItemClicked( String tagId ) { handleClickedPolyline( tagId ); mAMapNavi.selectRouteId( getSelectedPathId() ); + showBounds(); } public OnCalculatePathItemClickInteraction getItemClickInteraction() { diff --git a/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/model/AppEnum.java b/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/model/AppEnum.java index bd3ddcddcc..a68b98eb01 100644 --- a/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/model/AppEnum.java +++ b/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/model/AppEnum.java @@ -16,62 +16,65 @@ import com.mogo.module.apps.R; public enum AppEnum { //"QQ音乐", - QQMusic( "QQ音乐","com.pvetec.musics", R.drawable.module_apps_ic_qq_music ), + QQMusic( "QQ音乐", "com.pvetec.musics", R.drawable.module_apps_ic_qq_music ), //"车聊聊", - Im( "车聊聊","com.zhidao.imdemo", R.drawable.module_apps_ic_im ), + Im( "车聊聊", "com.zhidao.imdemo", R.drawable.module_apps_ic_im ), //"探路", - RoadCondition( "探路","com.zhidao.roadcondition", R.drawable.module_apps_ic_road_condition ), - RoadConditionSlit( "探路","com.zhidao.roadcondition.split", R.drawable.module_apps_ic_road_condition ), + RoadCondition( "探路", "com.zhidao.roadcondition", R.drawable.module_apps_ic_road_condition ), + RoadConditionSlit( "探路", "com.zhidao.roadcondition.split", R.drawable.module_apps_ic_road_condition ), //"福利", - Welfare( "福利","com.zhidaohulian.welfare.car", R.drawable.module_apps_ic_welfare ), + Welfare( "福利", "com.zhidaohulian.welfare.car", R.drawable.module_apps_ic_welfare ), //"蘑菇小队", - Fleet( "蘑菇小队","com.zhidao.fleet", R.drawable.module_apps_ic_fleet ), + Fleet( "蘑菇小队", "com.zhidao.fleet", R.drawable.module_apps_ic_fleet ), //"行车记录仪", - CarCorder( "行车记录仪","com.zhidao.carcorder", R.drawable.module_apps_ic_carcorder ), + CarCorder( "行车记录仪", "com.zhidao.carcorder", R.drawable.module_apps_ic_carcorder ), //"懒人听书", - Lrts( "懒人听书","com.zhidao.lrts", R.drawable.module_apps_ic_lrts ), + Lrts( "懒人听书", "com.zhidao.lrts", R.drawable.module_apps_ic_lrts ), //"一键清理", - CleanMaster( "一键清理","com.zhidao.cleanmaster", R.drawable.module_apps_ic_clean_master ), + CleanMaster( "一键清理", "com.zhidao.cleanmaster", R.drawable.module_apps_ic_clean_master ), //"系统升级", - Fota( "系统升级","com.abupdate.fota_demo_iot", R.drawable.module_apps_ic_fota ), + Fota( "系统升级", "com.abupdate.fota_demo_iot", R.drawable.module_apps_ic_fota ), //"微信车机助手", - WechatHelper( "微信车机助手","com.zhidao.wechathelper", R.drawable.module_apps_ic_wechat ), + WechatHelper( "微信车机助手", "com.zhidao.wechathelper", R.drawable.module_apps_ic_wechat ), //"爱奇艺HD", - Qiyi( "爱奇艺HD","com.qiyi.video.pad", R.drawable.module_apps_ic_qiyi ), + Qiyi( "爱奇艺HD", "com.qiyi.video.pad", R.drawable.module_apps_ic_qiyi ), //"喜马拉雅", - Ximalaya( "喜马拉雅","com.ximalaya.ting.android.car", R.drawable.module_apps_ic_ximalaya ), + Ximalaya( "喜马拉雅", "com.ximalaya.ting.android.car", R.drawable.module_apps_ic_ximalaya ), //"均衡器", - Equlizer( "均衡器","com.zhidao.equalizer", R.drawable.module_apps_ic_equlizer ), + Equlizer( "均衡器", "com.zhidao.equalizer", R.drawable.module_apps_ic_equlizer ), //"方控学习", - SteerProduct( "方控学习","com.zd.steerproduct", R.drawable.module_apps_ic_stee_product ), + SteerProduct( "方控学习", "com.zd.steerproduct", R.drawable.module_apps_ic_stee_product ), //"蓝牙音乐", - BTMusic( "蓝牙音乐","com.nwd.bt.music", R.drawable.module_apps_ic_bt ), + BTMusic( "蓝牙音乐", "com.nwd.bt.music", R.drawable.module_apps_ic_bt ), //"车载设置", - CarSettings( "车载设置","com.zhidao.settings", R.drawable.module_apps_ic_car_setting ), + CarSettings( "车载设置", "com.zhidao.settings", R.drawable.module_apps_ic_car_setting ), //"AUX", - AUX( "AUX","com.nwd.auxin", R.drawable.module_apps_ic_aux ), + AUX( "AUX", "com.nwd.auxin", R.drawable.module_apps_ic_aux ), //FM - FM( "FM","com.nwd.radio", R.drawable.module_apps_ic_fm ), + FM( "FM", "com.nwd.radio", R.drawable.module_apps_ic_fm ), // 新鲜事 - FreshThings( "新鲜事","com.zhidao.fresh.things", R.drawable.module_apps_ic_fresh_things ), + FreshThings( "新鲜事", "com.zhidao.fresh.things", R.drawable.module_apps_ic_fresh_things ), + + // 个人中心 + PersonCenter( "个人中心", "com.zhidao.auto.personal ", R.drawable.module_apps_ic_fresh_things ), ; private String mName; diff --git a/modules/mogo-module-apps/src/main/res/drawable-ldpi/module_apps_ic_personal_center.png b/modules/mogo-module-apps/src/main/res/drawable-ldpi/module_apps_ic_personal_center.png new file mode 100755 index 0000000000000000000000000000000000000000..41ec3ad07d55d091f367fb9dc89decd25b81d3bf GIT binary patch literal 8083 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 hz;*?;E3hRM_&7faCxG002ovPDHLkV1mf@5 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 literal 0 HcmV?d00001 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 ec0eb11b62..428d24b228 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 @@ -8,7 +8,6 @@ import android.content.IntentFilter; import android.location.Location; import android.location.LocationManager; import android.os.Handler; -import android.os.HandlerThread; import android.os.Looper; import android.os.Message; import android.os.Trace; @@ -19,7 +18,6 @@ import android.view.View; import androidx.annotation.NonNull; -import com.alibaba.android.arouter.launcher.ARouter; import com.mogo.commons.debug.DebugConfig; import com.mogo.commons.voice.AIAssist; import com.mogo.commons.voice.IMogoVoiceCmdCallBack; @@ -46,8 +44,6 @@ import com.mogo.module.service.receiver.MogoReceiver; import com.mogo.module.service.refresh.AutoRefreshStrategy; import com.mogo.module.service.refresh.CustomRefreshStrategy; import com.mogo.module.service.refresh.RefreshObject; -import com.mogo.service.IMogoServiceApis; -import com.mogo.service.MogoServicePaths; import com.mogo.service.adas.IMogoADASController; import com.mogo.service.cardmanager.IMogoCardManager; import com.mogo.service.fragmentmanager.FragmentStackTransactionListener; @@ -258,8 +254,7 @@ public class MogoServices implements IMogoMapListener, public void onFail() { if ( mLoopRequest ) { Logger.d( TAG, "onFail and loop" ); - mHandler.sendEmptyMessageDelayed( ServiceConst.MSG_LOOP_REQUEST, - ServiceConst.LOOP_INTERVAL ); + mHandler.sendEmptyMessageDelayed( ServiceConst.MSG_LOOP_REQUEST, ServiceConst.LOOP_INTERVAL ); } else { invokeAutoRefreshStrategy(); } @@ -271,8 +266,7 @@ public class MogoServices implements IMogoMapListener, } mRefreshRemainingTime = mAutoRefreshStrategy.getInterval(); mHandler.removeMessages( ServiceConst.MSG_TYPE_REFRESH_DECREASE ); - mHandler.sendEmptyMessageDelayed( ServiceConst.MSG_TYPE_REFRESH_DECREASE, - ServiceConst.DECREASE_INTERVAL ); + mHandler.sendEmptyMessageDelayed( ServiceConst.MSG_TYPE_REFRESH_DECREASE, ServiceConst.DECREASE_INTERVAL ); } }; @@ -287,14 +281,10 @@ public class MogoServices implements IMogoMapListener, mUiController = mMogoMapService.getMapUIController(); mNavi = mMogoMapService.getNavi( context ); mStatusManager = MarkerServiceHandler.getMogoStatusManager(); - mStatusManager.registerStatusChangedListener( ServiceConst.TYPE, - StatusDescriptor.USER_INTERACTED, this ); - mStatusManager.registerStatusChangedListener( ServiceConst.TYPE, StatusDescriptor.SEARCH_UI, - this ); - mStatusManager.registerStatusChangedListener( ServiceConst.TYPE, StatusDescriptor.ADAS_UI, - this ); - mStatusManager.registerStatusChangedListener( ServiceConst.TYPE, - StatusDescriptor.MAIN_PAGE_RESUME, this ); + mStatusManager.registerStatusChangedListener( ServiceConst.TYPE, StatusDescriptor.USER_INTERACTED, this ); + mStatusManager.registerStatusChangedListener( ServiceConst.TYPE, StatusDescriptor.SEARCH_UI, this ); + mStatusManager.registerStatusChangedListener( ServiceConst.TYPE, StatusDescriptor.ADAS_UI, this ); + mStatusManager.registerStatusChangedListener( ServiceConst.TYPE, StatusDescriptor.MAIN_PAGE_RESUME, this ); registerMogoReceiver( context ); registerInternalUnWakeupWords(); @@ -336,7 +326,7 @@ public class MogoServices implements IMogoMapListener, @Override public void handleMessage( Message msg ) { super.handleMessage( msg ); - Logger.d( TAG, "current thread: %s", Thread.currentThread() ); + Logger.d( TAG, "current thread: %s, msg = %s", Thread.currentThread(), msg.what ); if ( msg.what == ServiceConst.MSG_MAP_CHANGED ) { if ( msg.obj instanceof RefreshObject ) { RefreshObject ro = ( ( RefreshObject ) msg.obj ); @@ -349,8 +339,7 @@ public class MogoServices implements IMogoMapListener, if ( msg.obj instanceof RefreshObject ) { RefreshObject ro = ( ( RefreshObject ) msg.obj ); mRefreshModel.refreshData( ro.mLonLat, ro.mRadius, ro.mAmount, ro.mCallback ); - Logger.i( TAG, "刷新半径 = %s, 点 = %s, zoomLevel = %s, amount = %s", ro.mRadius, - ro.mLonLat, mLastZoomLevel, ro.mAmount ); + Logger.i( TAG, "刷新半径 = %s, 点 = %s, zoomLevel = %s, amount = %s", ro.mRadius, ro.mLonLat, mLastZoomLevel, ro.mAmount ); } } } @@ -419,8 +408,7 @@ public class MogoServices implements IMogoMapListener, */ private float getMapCameraFactWidth() { try { - return Utils.calculateLineDistance( mCameraNorthEastPosition, - new MogoLatLng( mCameraNorthEastPosition.lat, mCameraSouthWestPosition.lng ) ); + return Utils.calculateLineDistance( mCameraNorthEastPosition, new MogoLatLng( mCameraNorthEastPosition.lat, mCameraSouthWestPosition.lng ) ); } catch ( Exception e ) { return ServiceConst.DEFAULT_AUTO_REFRESH_DATA_RADIUS; } @@ -507,6 +495,13 @@ public class MogoServices implements IMogoMapListener, return; } + // 搜索页面显示时不做任何策略 + if ( mStatusManager.isSearchUIShow() ) { + mLastCustomRefreshCenterLocation = latLng; + mLastZoomLevel = zoom; + return; + } + // 手动刷新触发 if ( mLastZoomLevel - zoom > mCustomRefreshStrategy.getZoomOutLevel() ) { // 缩放级别缩小 @@ -981,28 +976,21 @@ public class MogoServices implements IMogoMapListener, @Override public void onTransaction( int size ) { if ( size == 0 ) { + mUiController.showMyLocation( !mNavi.isNaviing() ); + AIAssist.getInstance( mContext ).unregisterUnWakeupCommand( ServiceConst.CMD_BACK ); + // 控制SearchUIShow 打点逻辑 + mStatusManager.setSearchUIShow( TAG, false ); if ( mNavi.isNaviing() ) { mUiController.setPointToCenter( 0.675926, 0.77552 ); } else { mUiController.setPointToCenter( 0.66145, 0.661094 ); } - mUiController.showMyLocation( !mNavi.isNaviing() ); - AIAssist.getInstance( mContext ).unregisterUnWakeupCommand( ServiceConst.CMD_BACK ); - // 控制SearchUIShow 打点逻辑 - setMarkerStatus(false); + mUiController.recoverLockMode(); } else { mUiController.showMyLocation( false ); - AIAssist.getInstance( mContext ) - .registerUnWakeupCommand( ServiceConst.CMD_BACK, ServiceConst.CMD_BACK_WORDS, this ); + AIAssist.getInstance( mContext ).registerUnWakeupCommand( ServiceConst.CMD_BACK, ServiceConst.CMD_BACK_WORDS, this ); + mStatusManager.setSearchUIShow( TAG, true ); mUiController.setPointToCenter( 0.5, 0.5 ); - setMarkerStatus(true); - } } - - protected void setMarkerStatus( boolean show ) { - mStatusManager.setSearchUIShow( - MogoModulePaths.PATH_FRAGMENT_SEARCH_CATEGORY, show - ); - } }