From 24aeb160ba79c89a48264455f5564026e4fbeac5 Mon Sep 17 00:00:00 2001 From: wangcongtao Date: Wed, 15 Jan 2020 22:48:50 +0800 Subject: [PATCH] opt --- .../map/impl/amap/AMapNaviViewWrapper.java | 3 + .../amap/navi/AMapNaviListenerAdapter.java | 11 +- .../impl/amap/navi/NaviListenerAdapter.java | 8 +- .../mogo/map/impl/amap/utils/ObjectUtils.java | 1 + .../java/com/mogo/map/navi/MogoNaviInfo.java | 17 +- .../module/main/cards/MogoModulesManager.java | 186 ++++++++++++++++-- .../module/service/MogoServiceProvider.java | 24 ++- 7 files changed, 223 insertions(+), 27 deletions(-) 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 ad33524ffe..f80491fafd 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 @@ -129,6 +129,7 @@ public class AMapNaviViewWrapper implements IMogoMapView, options.setNaviArrowVisible( false ); // 通过路线是否自动置灰,仅支持驾车导航 options.setAfterRouteAutoGray( true ); + options.setZoom( 16 ); options.setPointToCenter( 0.5D, 0.5D ); // 2D模式 options.setTilt( 0 ); @@ -456,6 +457,7 @@ public class AMapNaviViewWrapper implements IMogoMapView, public void onNaviStarted() { if ( checkAMapView() ) { mMapView.setCarOverlayVisible( true ); + showMyLocation( false ); } } @@ -463,6 +465,7 @@ public class AMapNaviViewWrapper implements IMogoMapView, public void onNaviStopped() { if ( checkAMapView() ) { mMapView.setCarOverlayVisible( false ); + showMyLocation( true ); } } diff --git a/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/navi/AMapNaviListenerAdapter.java b/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/navi/AMapNaviListenerAdapter.java index dfe0daa985..03d7ccb4d3 100644 --- a/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/navi/AMapNaviListenerAdapter.java +++ b/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/navi/AMapNaviListenerAdapter.java @@ -15,6 +15,7 @@ import com.amap.api.navi.model.AimLessModeCongestionInfo; import com.amap.api.navi.model.AimLessModeStat; import com.amap.api.navi.model.NaviInfo; import com.autonavi.tbt.TrafficFacilityInfo; +import com.mogo.utils.logger.Logger; /** * @author congtaowang @@ -24,6 +25,8 @@ import com.autonavi.tbt.TrafficFacilityInfo; */ public abstract class AMapNaviListenerAdapter implements AMapNaviListener { + private static final String TAG = "AMapNaviListenerAdapter"; + @Override public void onInitNaviFailure() { @@ -106,7 +109,13 @@ public abstract class AMapNaviListenerAdapter implements AMapNaviListener { @Override public void updateCameraInfo( AMapNaviCameraInfo[] aMapNaviCameraInfos ) { - + if ( aMapNaviCameraInfos != null ) { + for ( AMapNaviCameraInfo aMapNaviCameraInfo : aMapNaviCameraInfos ) { + if ( aMapNaviCameraInfo != null ) { + Logger.i( TAG, "current camera speed: %d", aMapNaviCameraInfo.getCameraSpeed() ); + } + } + } } @Override 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 b48d9ac07f..7330664e18 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 @@ -148,10 +148,10 @@ public class NaviListenerAdapter extends AMapNaviListenerAdapter { if ( mNaviOverlayHelper != null ) { mNaviOverlayHelper.handleClickedPolyline( polyline, isNaviing() ); mAMapNavi.selectRouteId( mNaviOverlayHelper.getSelectedPathId() ); - if ( isNaviing() ) { - mAMapNavi.stopNavi(); - mAMapNavi.startNavi( mClient.isRealNavi() ? NaviType.GPS : NaviType.EMULATOR ); - } +// if ( isNaviing() ) { +// mAMapNavi.stopNavi(); +// mAMapNavi.startNavi( mClient.isRealNavi() ? NaviType.GPS : NaviType.EMULATOR ); +// } } } diff --git a/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/utils/ObjectUtils.java b/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/utils/ObjectUtils.java index b035a4fdf3..fec2a14a02 100644 --- a/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/utils/ObjectUtils.java +++ b/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/utils/ObjectUtils.java @@ -636,6 +636,7 @@ public class ObjectUtils { mogoNaviInfo.setNextRoadName( naviInfo.getNextRoadName() ); mogoNaviInfo.setPathRetainDistance( naviInfo.getPathRetainDistance() ); mogoNaviInfo.setPathRetainTime( naviInfo.getPathRetainTime() ); + mogoNaviInfo.setCurrentSpeed( naviInfo.getLimitSpeed() ); return mogoNaviInfo; } } diff --git a/libraries/mogo-map-api/src/main/java/com/mogo/map/navi/MogoNaviInfo.java b/libraries/mogo-map-api/src/main/java/com/mogo/map/navi/MogoNaviInfo.java index 1da3f6d630..ee394bfef8 100644 --- a/libraries/mogo-map-api/src/main/java/com/mogo/map/navi/MogoNaviInfo.java +++ b/libraries/mogo-map-api/src/main/java/com/mogo/map/navi/MogoNaviInfo.java @@ -54,6 +54,11 @@ public class MogoNaviInfo implements Parcelable { */ private int pathRetainDistance; + /** + * 当前限速 + */ + private float currentLimitSpeed; + public String getCurrentRoadName() { return currentRoadName; } @@ -118,6 +123,14 @@ public class MogoNaviInfo implements Parcelable { this.pathRetainDistance = pathRetainDistance; } + public float getCurrentLimitSpeed() { + return currentLimitSpeed; + } + + public void setCurrentLimitSpeed( float currentLimitSpeed ) { + this.currentLimitSpeed = currentLimitSpeed; + } + @Override public int describeContents() { return 0; @@ -133,6 +146,7 @@ public class MogoNaviInfo implements Parcelable { dest.writeString( this.nextRoadName ); dest.writeInt( this.pathRetainTime ); dest.writeInt( this.pathRetainDistance ); + dest.writeFloat( this.currentLimitSpeed ); } public MogoNaviInfo() { @@ -147,9 +161,10 @@ public class MogoNaviInfo implements Parcelable { this.nextRoadName = in.readString(); this.pathRetainTime = in.readInt(); this.pathRetainDistance = in.readInt(); + this.currentLimitSpeed = in.readFloat(); } - public static final Parcelable.Creator< MogoNaviInfo > CREATOR = new Parcelable.Creator< MogoNaviInfo >() { + public static final Creator< MogoNaviInfo > CREATOR = new Creator< MogoNaviInfo >() { @Override public MogoNaviInfo createFromParcel( Parcel source ) { return new MogoNaviInfo( source ); diff --git a/modules/mogo-module-main/src/main/java/com/mogo/module/main/cards/MogoModulesManager.java b/modules/mogo-module-main/src/main/java/com/mogo/module/main/cards/MogoModulesManager.java index dec3600f87..5e2f28c330 100644 --- a/modules/mogo-module-main/src/main/java/com/mogo/module/main/cards/MogoModulesManager.java +++ b/modules/mogo-module-main/src/main/java/com/mogo/module/main/cards/MogoModulesManager.java @@ -212,96 +212,216 @@ public class MogoModulesManager implements MogoModulesHandler, mMapLoadedCallback = null; } Iterator< IMogoMapListener > iterator = MogoRegisterCenterHandler.getInstance().getMapListeners(); + if ( iterator == null ) { + return; + } while ( iterator.hasNext() ) { - iterator.next().onMapLoaded(); + IMogoMapListener listener = iterator.next(); + if ( listener != null ) { + try { + listener.onMapLoaded(); + } catch ( Exception e ) { + Logger.e( TAG, e, "error." ); + } + } } } @Override public void onTouch( MotionEvent motionEvent ) { Iterator< IMogoMapListener > iterator = MogoRegisterCenterHandler.getInstance().getMapListeners(); + if ( iterator == null ) { + return; + } while ( iterator.hasNext() ) { - iterator.next().onTouch( motionEvent ); + IMogoMapListener listener = iterator.next(); + if ( listener != null ) { + try { + listener.onTouch( motionEvent ); + } catch ( Exception e ) { + Logger.e( TAG, e, "error." ); + } + } } } @Override public void onPOIClick( MogoPoi poi ) { Iterator< IMogoMapListener > iterator = MogoRegisterCenterHandler.getInstance().getMapListeners(); + if ( iterator == null ) { + return; + } while ( iterator.hasNext() ) { - iterator.next().onPOIClick( poi ); + IMogoMapListener listener = iterator.next(); + if ( listener != null ) { + try { + listener.onPOIClick( poi ); + } catch ( Exception e ) { + Logger.e( TAG, e, "error." ); + } + } } } @Override public void onMapClick( MogoLatLng latLng ) { Iterator< IMogoMapListener > iterator = MogoRegisterCenterHandler.getInstance().getMapListeners(); + if ( iterator == null ) { + return; + } while ( iterator.hasNext() ) { - iterator.next().onMapClick( latLng ); + IMogoMapListener listener = iterator.next(); + if ( listener != null ) { + try { + listener.onMapClick( latLng ); + } catch ( Exception e ) { + Logger.e( TAG, e, "error." ); + } + } } } @Override public void onLockMap( boolean isLock ) { Iterator< IMogoMapListener > iterator = MogoRegisterCenterHandler.getInstance().getMapListeners(); + if ( iterator == null ) { + return; + } while ( iterator.hasNext() ) { - iterator.next().onLockMap( isLock ); + IMogoMapListener listener = iterator.next(); + if ( listener != null ) { + try { + listener.onLockMap( isLock ); + } catch ( Exception e ) { + Logger.e( TAG, e, "error." ); + } + } } } @Override public void onMapModeChanged( EnumMapUI ui ) { Iterator< IMogoMapListener > iterator = MogoRegisterCenterHandler.getInstance().getMapListeners(); + if ( iterator == null ) { + return; + } while ( iterator.hasNext() ) { - iterator.next().onMapModeChanged( ui ); + IMogoMapListener listener = iterator.next(); + if ( listener != null ) { + try { + listener.onMapModeChanged( ui ); + } catch ( Exception e ) { + Logger.e( TAG, e, "error." ); + } + } } } @Override public void onMapChanged( MogoLatLng location, float zoom, float tilt, float bearing ) { Iterator< IMogoMapListener > iterator = MogoRegisterCenterHandler.getInstance().getMapListeners(); + if ( iterator == null ) { + return; + } while ( iterator.hasNext() ) { - iterator.next().onMapChanged( location, zoom, tilt, bearing ); + IMogoMapListener listener = iterator.next(); + if ( listener != null ) { + try { + listener.onMapChanged( location, zoom, tilt, bearing ); + } catch ( Exception e ) { + Logger.e( TAG, e, "error." ); + } + } } } @Override public void onInitNaviFailure() { Iterator< IMogoNaviListener > iterator = MogoRegisterCenterHandler.getInstance().getNaviListeners(); + if ( iterator == null ) { + return; + } while ( iterator.hasNext() ) { - iterator.next().onInitNaviFailure(); + IMogoNaviListener listener = iterator.next(); + if ( listener != null ) { + try { + listener.onInitNaviFailure(); + } catch ( Exception e ) { + Logger.e( TAG, e, "error." ); + } + } } } @Override public void onInitNaviSuccess() { Iterator< IMogoNaviListener > iterator = MogoRegisterCenterHandler.getInstance().getNaviListeners(); + if ( iterator == null ) { + return; + } while ( iterator.hasNext() ) { - iterator.next().onInitNaviSuccess(); + IMogoNaviListener listener = iterator.next(); + if ( listener != null ) { + try { + listener.onInitNaviSuccess(); + } catch ( Exception e ) { + Logger.e( TAG, e, "error." ); + } + } } } @Override public void onNaviInfoUpdate( MogoNaviInfo naviinfo ) { Iterator< IMogoNaviListener > iterator = MogoRegisterCenterHandler.getInstance().getNaviListeners(); + if ( iterator == null ) { + return; + } while ( iterator.hasNext() ) { - iterator.next().onNaviInfoUpdate( naviinfo ); + IMogoNaviListener listener = iterator.next(); + if ( listener != null ) { + try { + listener.onNaviInfoUpdate( naviinfo ); + } catch ( Exception e ) { + Logger.e( TAG, e, "error." ); + } + } } } @Override public void onStartNavi() { Iterator< IMogoNaviListener > iterator = MogoRegisterCenterHandler.getInstance().getNaviListeners(); + if ( iterator == null ) { + return; + } while ( iterator.hasNext() ) { - iterator.next().onStartNavi(); + IMogoNaviListener listener = iterator.next(); + if ( listener != null ) { + try { + listener.onStartNavi(); + } catch ( Exception e ) { + Logger.e( TAG, e, "error." ); + } + } } } @Override public void onStopNavi() { Iterator< IMogoNaviListener > iterator = MogoRegisterCenterHandler.getInstance().getNaviListeners(); + if ( iterator == null ) { + return; + } while ( iterator.hasNext() ) { - iterator.next().onStopNavi(); + IMogoNaviListener listener = iterator.next(); + if ( listener != null ) { + try { + listener.onStopNavi(); + } catch ( Exception e ) { + Logger.e( TAG, e, "error." ); + } + } } } @@ -309,24 +429,54 @@ public class MogoModulesManager implements MogoModulesHandler, @Override public void onCalculateSuccess() { Iterator< IMogoNaviListener > iterator = MogoRegisterCenterHandler.getInstance().getNaviListeners(); + if ( iterator == null ) { + return; + } while ( iterator.hasNext() ) { - iterator.next().onCalculateSuccess(); + IMogoNaviListener listener = iterator.next(); + if ( listener != null ) { + try { + listener.onCalculateSuccess(); + } catch ( Exception e ) { + Logger.e( TAG, e, "error." ); + } + } } } @Override public void onoCalculateFailed() { Iterator< IMogoNaviListener > iterator = MogoRegisterCenterHandler.getInstance().getNaviListeners(); + if ( iterator == null ) { + return; + } while ( iterator.hasNext() ) { - iterator.next().onoCalculateFailed(); + IMogoNaviListener listener = iterator.next(); + if ( listener != null ) { + try { + listener.onoCalculateFailed(); + } catch ( Exception e ) { + Logger.e( TAG, e, "error." ); + } + } } } @Override public void onLocationChanged( MogoLocation location ) { Iterator< IMogoLocationListener > iterator = MogoRegisterCenterHandler.getInstance().getLocationListeners(); + if ( iterator == null ) { + return; + } while ( iterator.hasNext() ) { - iterator.next().onLocationChanged( location ); + IMogoLocationListener listener = iterator.next(); + if ( listener != null ) { + try { + listener.onLocationChanged( location ); + } catch ( Exception e ) { + Logger.e( TAG, e, "error." ); + } + } } } @@ -375,7 +525,11 @@ public class MogoModulesManager implements MogoModulesHandler, public void onMarkerReceive( IMogoMarker marker ) { IMogoMarkerClickListener listener = MogoRegisterCenterHandler.getInstance().getMarkerListener( marker.getOwner() ); if ( listener != null ) { - listener.onMarkerClicked( marker ); + try { + listener.onMarkerClicked( marker ); + } catch ( Exception e ) { + Logger.e( TAG, e, "error." ); + } } } diff --git a/modules/mogo-module-service/src/main/java/com/mogo/module/service/MogoServiceProvider.java b/modules/mogo-module-service/src/main/java/com/mogo/module/service/MogoServiceProvider.java index 6ba131ff28..2edca2b1d1 100644 --- a/modules/mogo-module-service/src/main/java/com/mogo/module/service/MogoServiceProvider.java +++ b/modules/mogo-module-service/src/main/java/com/mogo/module/service/MogoServiceProvider.java @@ -297,7 +297,11 @@ public class MogoServiceProvider implements IMogoModuleProvider, * @return */ private float getMapCameraFactWidth() { - return Utils.calculateLineDistance( mCameraNorthEastPosition, new MogoLatLng( mCameraNorthEastPosition.lat, mCameraSouthWestPosition.lng ) ); + try { + return Utils.calculateLineDistance( mCameraNorthEastPosition, new MogoLatLng( mCameraNorthEastPosition.lat, mCameraSouthWestPosition.lng ) ); + } catch ( Exception e ) { + return 1000f; + } } /** @@ -306,7 +310,11 @@ public class MogoServiceProvider implements IMogoModuleProvider, * @return */ private float getMapCameraFactHeight() { - return Utils.calculateLineDistance( mCameraSouthWestPosition, new MogoLatLng( mCameraNorthEastPosition.lat, mCameraSouthWestPosition.lng ) ); + try { + return Utils.calculateLineDistance( mCameraSouthWestPosition, new MogoLatLng( mCameraNorthEastPosition.lat, mCameraSouthWestPosition.lng ) ); + } catch ( Exception e ) { + return 1000f; + } } /** @@ -385,14 +393,15 @@ public class MogoServiceProvider implements IMogoModuleProvider, notifyRefreshData( latLng, getQueryRadius(), mCustomRefreshCallback ); mLastCustomRefreshCenterLocation = latLng; mLastZoomLevel = zoom; + } else if ( mLastZoomLevel - zoom < 0 ) { + mLastZoomLevel = zoom; + } else if ( mLastZoomLevel == zoom ) { // 手动平移 if ( invokeRefreshWhenTranslationByUser( latLng ) ) { notifyRefreshData( latLng, getQueryRadius(), mCustomRefreshCallback ); mLastCustomRefreshCenterLocation = latLng; } - } else { - mLastZoomLevel = zoom; } } @@ -452,6 +461,7 @@ public class MogoServiceProvider implements IMogoModuleProvider, return; } Logger.d( TAG, mAutoRefreshCallback == callback ? "触发自动刷新" : "触发手动刷新" ); + Logger.i( TAG, "刷新半径 = %d, 点 = %s", radius, latLng ); mRefreshModel.refreshData( latLng, radius, callback ); } @@ -467,7 +477,11 @@ public class MogoServiceProvider implements IMogoModuleProvider, @Override public void onNaviInfoUpdate( MogoNaviInfo naviinfo ) { - + // 发送当前限速到 adas + Intent intent = new Intent( "com.mogo.launcher.adas" ); + intent.putExtra( "adas_speed_limit", naviinfo.getCurrentLimitSpeed() ); + Logger.i( TAG, "send limit data to adas: limitspeed = %f", naviinfo.getCurrentLimitSpeed() ); + mContext.sendBroadcast( intent ); } @Override