diff --git a/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/AMapWrapper.java b/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/AMapWrapper.java index 94291f2c9e..c796d9134a 100644 --- a/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/AMapWrapper.java +++ b/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/AMapWrapper.java @@ -85,7 +85,9 @@ public class AMapWrapper implements IMogoMap { return null; } final IMogoMarker mogoMarker = new AMapMarkerWrapper( mAMap.addMarker( markerOptions ), options ); - MogoMarkersHandler.getInstance().add( tag, mogoMarker ); + if ( options.isAutoManager() ) { + MogoMarkersHandler.getInstance().add( tag, mogoMarker ); + } return mogoMarker; } diff --git a/libraries/mogo-map-api/src/main/java/com/mogo/map/marker/MogoMarkerOptions.java b/libraries/mogo-map-api/src/main/java/com/mogo/map/marker/MogoMarkerOptions.java index 4b96e430b3..f817138f3c 100644 --- a/libraries/mogo-map-api/src/main/java/com/mogo/map/marker/MogoMarkerOptions.java +++ b/libraries/mogo-map-api/src/main/java/com/mogo/map/marker/MogoMarkerOptions.java @@ -66,6 +66,11 @@ public class MogoMarkerOptions extends Observable { private Object mObject; + /** + * 是否加入marker管理 + */ + private boolean mAutoManager = true; + public MogoMarkerOptions position( MogoLatLng latLng ){ if ( latLng != null ) { latitude( latLng.lat ); @@ -294,4 +299,13 @@ public class MogoMarkerOptions extends Observable { public Object getObject() { return mObject; } + + public boolean isAutoManager() { + return mAutoManager; + } + + public MogoMarkerOptions autoManager( boolean autoManager ) { + this.mAutoManager = autoManager; + return this; + } } 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 54984cf853..8b72b40756 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 @@ -326,6 +326,8 @@ public class MogoServices implements IMogoMapListener, mCardManager = MarkerServiceHandler.getMogoCardManager(); mFragmentManager.addMainFragmentStackTransactionListener( this ); + + CarIconDisplayStrategy.getInstance().changeCarIconStatus( mStatusManager.isSeekHelping() ); } private void initWorkThread() { @@ -696,7 +698,7 @@ public class MogoServices implements IMogoMapListener, } break; case SEEK_HELPING: - CarIconDisplayStrategy.getInstance().changeCarIconStatus( mUiController, isTrue ); + CarIconDisplayStrategy.getInstance().changeCarIconStatus( isTrue ); notifySeekHelpingStatusChanged( isTrue ); break; } diff --git a/modules/mogo-module-service/src/main/java/com/mogo/module/service/marker/IMarkerView.java b/modules/mogo-module-service/src/main/java/com/mogo/module/service/marker/IMarkerView.java index 59b3b350fd..44388f2e8f 100644 --- a/modules/mogo-module-service/src/main/java/com/mogo/module/service/marker/IMarkerView.java +++ b/modules/mogo-module-service/src/main/java/com/mogo/module/service/marker/IMarkerView.java @@ -15,7 +15,7 @@ public interface IMarkerView { View getView(); - default Bitmap getBitmap(){ + default Bitmap getBitmap(int type){ return null; } 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 54b2ae042c..0298414d3b 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 @@ -53,7 +53,7 @@ import java.util.Map; * version: 1.0 */ public class MapMarkerManager implements IMogoMarkerClickListener, - IMogoOnMessageListener, IMogoCardChangedListener, + IMogoOnMessageListener< MarkerResponse >, IMogoCardChangedListener, IMogoBizActionDoneListener { private static final String TAG = "MapMarkerManager"; // 是否选中在线卡片及气泡,语音搜索触发 @@ -66,7 +66,7 @@ public class MapMarkerManager implements IMogoMarkerClickListener, private String mCurrentModuleName = ServiceConst.CARD_TYPE_BUSINESS_OPERATION; // 记录其它已经缩小的Marker - public ArrayList alreadySmallMarker = new ArrayList<>(); + public ArrayList< String > alreadySmallMarker = new ArrayList<>(); // 存储所有汽车marker // public ArrayList carMarkers = new ArrayList<>(); // 距离用户最近的Marker @@ -84,8 +84,8 @@ public class MapMarkerManager implements IMogoMarkerClickListener, } public static synchronized MapMarkerManager getInstance() { - synchronized (MapMarkerManager.class) { - if (mMarkerManager == null) { + synchronized ( MapMarkerManager.class ) { + if ( mMarkerManager == null ) { mMarkerManager = new MapMarkerManager(); } } @@ -98,38 +98,38 @@ public class MapMarkerManager implements IMogoMarkerClickListener, * * @param context */ - public void init(Context context) { + public void init( Context context ) { mContext = context; - mRefreshModel = new RefreshModel(mContext); + mRefreshModel = new RefreshModel( mContext ); // 长连接 - MarkerServiceHandler.getMogoSocketManager().registerOnMessageListener(401001, this); + MarkerServiceHandler.getMogoSocketManager().registerOnMessageListener( 401001, this ); MarkerServiceHandler.getMogoCardManager().registerCardChangedListener( - "LAUNCHER_MARKER_MODULE", this); - MarkerServiceHandler.getActionManager().registerBizActionDoneListener(this); + "LAUNCHER_MARKER_MODULE", this ); + MarkerServiceHandler.getActionManager().registerBizActionDoneListener( this ); } // ACC ON 的时候重置为true,ACC OFF 设置为 false // 保留 - 外部模块调用 - public void setCheckOn(boolean checkOnLineData) { - Logger.e(TAG, "do not invoke anymore."); + public void setCheckOn( boolean checkOnLineData ) { + Logger.e( TAG, "do not invoke anymore." ); } @Override - public void onSwitched(int position, String moduleName) { - Logger.d(TAG, "当前C位卡片:" + moduleName); - if ((TextUtils.isEmpty(mCurrentModuleName) || TextUtils.equals(mCurrentModuleName, - ServiceConst.CARD_TYPE_BUSINESS_OPERATION)) && mIsMarkerClicked) { + public void onSwitched( int position, String moduleName ) { + Logger.d( TAG, "当前C位卡片:" + moduleName ); + if ( ( TextUtils.isEmpty( mCurrentModuleName ) || TextUtils.equals( mCurrentModuleName, + ServiceConst.CARD_TYPE_BUSINESS_OPERATION ) ) && mIsMarkerClicked ) { mIsMarkerClicked = false; // 在广告位(默认位置)点击marker造成卡片切换的,还是现实全部marker 【需求:os2.0.2-2.5-4】 - highlightedMarker(moduleName, false); + highlightedMarker( moduleName, false ); mCurrentModuleName = moduleName; } else { mCurrentModuleName = moduleName; - runOnTargetThread(() -> { - MarkerServiceHandler.getMarkerManager().removeMarkersExcept(ModuleNames.CARD_TYPE_USER_DATA); - drawMarkerByCurrentType(mLastDataResult); - }); + runOnTargetThread( () -> { + MarkerServiceHandler.getMarkerManager().removeMarkersExcept( ModuleNames.CARD_TYPE_USER_DATA ); + drawMarkerByCurrentType( mLastDataResult ); + } ); } } @@ -137,15 +137,15 @@ public class MapMarkerManager implements IMogoMarkerClickListener, * 地图上的Marker点击回调 */ @Override - public boolean onMarkerClicked(IMogoMarker marker) { + public boolean onMarkerClicked( IMogoMarker marker ) { mIsMarkerClicked = true; - Logger.d(TAG, "onMarkerClicked 点击了大而全中的Marker:" + marker); + Logger.d( TAG, "onMarkerClicked 点击了大而全中的Marker:" + marker ); try { - boolean result = switchMarkerOpenStatus(marker); - if (!result) { + boolean result = switchMarkerOpenStatus( marker ); + if ( !result ) { return false; } - } catch (Exception e) { + } catch ( Exception e ) { e.printStackTrace(); } return false; @@ -157,103 +157,103 @@ public class MapMarkerManager implements IMogoMarkerClickListener, * @param marker * @return */ - private boolean switchMarkerOpenStatus(IMogoMarker marker) { - if (mLastCheckMarker != null) { + private boolean switchMarkerOpenStatus( IMogoMarker marker ) { + if ( mLastCheckMarker != null ) { // 判断点击的是否是同一个 - if (marker.equals(mLastCheckMarker)) { - Logger.d(TAG, "onMarkerClicked 与上一次点击的Marker一样,不做处理:" + marker); + if ( marker.equals( mLastCheckMarker ) ) { + Logger.d( TAG, "onMarkerClicked 与上一次点击的Marker一样,不做处理:" + marker ); return false; } // 将上次选中 Marker 设置为未选中状态 - closeMarker(mLastCheckMarker); + closeMarker( mLastCheckMarker ); } // 将当前的Marker设置为选中 - openMarker(marker); + openMarker( marker ); return true; } // 对指定类型高亮处理 - public synchronized void highlightedMarker(final String typeTag) { - highlightedMarker(typeTag, false); + public synchronized void highlightedMarker( final String typeTag ) { + highlightedMarker( typeTag, false ); } - public synchronized void highlightedMarker(final String typeTag, final boolean netDataRefresh) { + public synchronized void highlightedMarker( final String typeTag, final boolean netDataRefresh ) { try { - Logger.e(TAG, "上一次选中的卡片类型:mCurrentModuleName==" + mCurrentModuleName); - if (!TextUtils.isEmpty(mCurrentModuleName) && TextUtils.equals(mCurrentModuleName, - typeTag) && !netDataRefresh) { + Logger.e( TAG, "上一次选中的卡片类型:mCurrentModuleName==" + mCurrentModuleName ); + if ( !TextUtils.isEmpty( mCurrentModuleName ) && TextUtils.equals( mCurrentModuleName, + typeTag ) && !netDataRefresh ) { return; } // 从已经缩小的记录删除 - alreadySmallMarker.remove(typeTag); - List currentHighLightList = - MarkerServiceHandler.getMarkerManager().getMarkers(typeTag); + alreadySmallMarker.remove( typeTag ); + List< IMogoMarker > currentHighLightList = + MarkerServiceHandler.getMarkerManager().getMarkers( typeTag ); - if (currentHighLightList == null || currentHighLightList.size() == 0) { + if ( currentHighLightList == null || currentHighLightList.size() == 0 ) { alreadySmallMarker.clear(); // 放大所有的气泡 - Map> lastHighLightList = + Map< String, List< IMogoMarker > > lastHighLightList = MarkerServiceHandler.getMarkerManager().getAllMarkers(); - for (String markerName : lastHighLightList.keySet()) { - setMarkersBig(lastHighLightList.get(markerName)); + for ( String markerName : lastHighLightList.keySet() ) { + setMarkersBig( lastHighLightList.get( markerName ) ); } } else { // 缩小其他的气泡 - Map> lastHighLightList = + Map< String, List< IMogoMarker > > lastHighLightList = MarkerServiceHandler.getMarkerManager().getAllMarkers(); - for (String markerName : lastHighLightList.keySet()) { - if (!markerName.equals(typeTag)) { - if (!alreadySmallMarker.contains(markerName)) { - alreadySmallMarker.add(markerName); - setMarkersSmall(lastHighLightList.get(markerName)); + for ( String markerName : lastHighLightList.keySet() ) { + if ( !markerName.equals( typeTag ) ) { + if ( !alreadySmallMarker.contains( markerName ) ) { + alreadySmallMarker.add( markerName ); + setMarkersSmall( lastHighLightList.get( markerName ) ); } } } // 将当前卡片选中的气泡放大 - setMarkersBig(currentHighLightList); + setMarkersBig( currentHighLightList ); } - } catch (Exception e) { + } catch ( Exception e ) { e.printStackTrace(); } } - private static void setMarkersBig(List markers) { - if (markers == null || markers.isEmpty()) { + private static void setMarkersBig( List< IMogoMarker > markers ) { + if ( markers == null || markers.isEmpty() ) { return; } - for (IMogoMarker mogoMarker : markers) { - if (mogoMarker == null || mogoMarker.isDestroyed()) { + for ( IMogoMarker mogoMarker : markers ) { + if ( mogoMarker == null || mogoMarker.isDestroyed() ) { continue; } try { - mogoMarker.startScaleAnimation(0.6f, 1f, 0.6f, 1f, 1000, new BounceInterpolator()); - } catch (Exception e) { - Logger.e(TAG, e, "error."); + mogoMarker.startScaleAnimation( 0.6f, 1f, 0.6f, 1f, 1000, new BounceInterpolator() ); + } catch ( Exception e ) { + Logger.e( TAG, e, "error." ); } } } - private static void setMarkersSmall(List markers) { - if (markers == null || markers.isEmpty()) { + private static void setMarkersSmall( List< IMogoMarker > markers ) { + if ( markers == null || markers.isEmpty() ) { return; } - for (IMogoMarker mogoMarker : markers) { - smallMarker(mogoMarker); + for ( IMogoMarker mogoMarker : markers ) { + smallMarker( mogoMarker ); } } - private static void smallMarker(IMogoMarker mogoMarker) { - if (mogoMarker == null || mogoMarker.isDestroyed()) { + private static void smallMarker( IMogoMarker mogoMarker ) { + if ( mogoMarker == null || mogoMarker.isDestroyed() ) { return; } try { - mogoMarker.startScaleAnimation(1f, 0.6f, 1f, 0.6f, 300, new OvershootInterpolator()); - } catch (Exception e) { - Logger.e(TAG, e, "error."); + mogoMarker.startScaleAnimation( 1f, 0.6f, 1f, 0.6f, 300, new OvershootInterpolator() ); + } catch ( Exception e ) { + Logger.e( TAG, e, "error." ); } } @@ -262,25 +262,25 @@ public class MapMarkerManager implements IMogoMarkerClickListener, * * @param marker 要关闭的Marker */ - public synchronized void closeMarkerSelect(IMogoMarker marker) { + public synchronized void closeMarkerSelect( IMogoMarker marker ) { // 将上次选中 Marker 设置为未选中状态 - if (marker != null) { - Logger.i(TAG, "closeMarkerSelect 将出Marker详情关闭:" + marker); - closeMarker(marker); + if ( marker != null ) { + Logger.i( TAG, "closeMarkerSelect 将出Marker详情关闭:" + marker ); + closeMarker( marker ); mLastCheckMarker = null; } } // 展开气泡 - private void openMarker(IMogoMarker mogoMarker) { - if (mogoMarker == null) { + private void openMarker( IMogoMarker mogoMarker ) { + if ( mogoMarker == null ) { return; } mLastCheckMarker = mogoMarker; // 在线车辆点击使用infoWindow if ( TextUtils.equals( mogoMarker.getOwner(), ModuleNames.CARD_TYPE_USER_DATA ) ) { if ( !mogoMarker.isDestroyed() ) { - mogoMarker.setInfoWindowAdapter( UserDataMarkerInfoWindowAdapter.getInstance(mContext) ); + mogoMarker.setInfoWindowAdapter( UserDataMarkerInfoWindowAdapter.getInstance( mContext ) ); mogoMarker.showInfoWindow(); Logger.d( TAG, "打开info window" ); } @@ -291,7 +291,11 @@ public class MapMarkerManager implements IMogoMarkerClickListener, markerShowEntity.setChecked( true ); IMarkerView markerView = MapMarkerAdapter.getMarkerView( mContext, markerShowEntity, mogoMarker.getMogoMarkerOptions() ); if ( markerView instanceof OnlineCarMarkerView ) { - mogoMarker.setIcon( markerView.getBitmap() ); + try { + mogoMarker.setIcon( markerView.getBitmap( ( ( MarkerOnlineCar ) markerShowEntity.getBindObj() ).getCarInfo().getVehicleType() ) ); + } catch ( Exception e ) { + mogoMarker.setIcon( markerView.getBitmap( 0 ) ); + } } else { mogoMarker.setIcon( ViewUtils.fromView( markerView.getView() ) ); } @@ -301,8 +305,8 @@ public class MapMarkerManager implements IMogoMarkerClickListener, } // 折叠气泡 - private void closeMarker(IMogoMarker mogoMarker) { - if (mogoMarker == null) { + private void closeMarker( IMogoMarker mogoMarker ) { + if ( mogoMarker == null ) { return; } // 在线车辆点击使用infoWindow @@ -316,7 +320,11 @@ public class MapMarkerManager implements IMogoMarkerClickListener, markerShowEntity.setChecked( false ); IMarkerView markerView = MapMarkerAdapter.getMarkerView( mContext, markerShowEntity, mogoMarker.getMogoMarkerOptions() ); if ( markerView instanceof OnlineCarMarkerView ) { - mogoMarker.setIcon( markerView.getBitmap() ); + try { + mogoMarker.setIcon( markerView.getBitmap( ( ( MarkerOnlineCar ) markerShowEntity.getBindObj() ).getCarInfo().getVehicleType() ) ); + } catch ( Exception e ) { + mogoMarker.setIcon( markerView.getBitmap( 0 ) ); + } } else { mogoMarker.setIcon( ViewUtils.fromView( markerView.getView() ) ); } @@ -325,40 +333,40 @@ public class MapMarkerManager implements IMogoMarkerClickListener, } // 绘制Marker - public synchronized void drawMapMarker(MarkerResponse response) { + public synchronized void drawMapMarker( MarkerResponse response ) { - if (response == null || response.getResult() == null) { + if ( response == null || response.getResult() == null ) { return; } - if (MarkerServiceHandler.getMogoStatusManager().isSearchUIShow()) { + if ( MarkerServiceHandler.getMogoStatusManager().isSearchUIShow() ) { return; } // 解析不同的Marker类型,然后对应的进行绘制 - Logger.d(TAG, "draw marker"); + Logger.d( TAG, "draw marker" ); mLastDataResult = response.getResult(); - UiThreadHandler.post(() -> { + UiThreadHandler.post( () -> { dispatchDataToBiz(); - }); + } ); // 语音触发的在线车辆搜索,采用增量的形式绘制 - if (mIsAISearchOnlineData = isOnlineCarDataOnly(mLastDataResult)) { - MarkerServiceHandler.getMarkerManager().removeMarkers(ServiceConst.CARD_TYPE_USER_DATA); - MarkerServiceHandler.getMogoCardManager().switch2(ServiceConst.CARD_TYPE_USER_DATA); + if ( mIsAISearchOnlineData = isOnlineCarDataOnly( mLastDataResult ) ) { + MarkerServiceHandler.getMarkerManager().removeMarkers( ServiceConst.CARD_TYPE_USER_DATA ); + MarkerServiceHandler.getMogoCardManager().switch2( ServiceConst.CARD_TYPE_USER_DATA ); } else { mLastCheckMarker = null; // 清空所有地图上绘制的Marker MarkerServiceHandler.getMarkerManager().removeMarkers(); } - drawMarkerByCurrentType(mLastDataResult); + drawMarkerByCurrentType( mLastDataResult ); // 同步新绘制的气泡状态 alreadySmallMarker.clear(); // highlightedMarker( mCurrentModuleName, true ); - trackData(mLastDataResult); + trackData( mLastDataResult ); } /** @@ -367,8 +375,8 @@ public class MapMarkerManager implements IMogoMarkerClickListener, * @param markerCardResult * @return */ - private boolean isOnlineCarDataOnly(MarkerCardResult markerCardResult) { - if (markerCardResult != null && markerCardResult.getDataType() != null && markerCardResult.getDataType().size() == 1 && markerCardResult.getDataType().contains(ServiceConst.CARD_TYPE_USER_DATA)) { + private boolean isOnlineCarDataOnly( MarkerCardResult markerCardResult ) { + if ( markerCardResult != null && markerCardResult.getDataType() != null && markerCardResult.getDataType().size() == 1 && markerCardResult.getDataType().contains( ServiceConst.CARD_TYPE_USER_DATA ) ) { return true; } return false; @@ -379,42 +387,42 @@ public class MapMarkerManager implements IMogoMarkerClickListener, * * @param markerCardResult */ - private synchronized void drawMarkerByCurrentType(MarkerCardResult markerCardResult) { + private synchronized void drawMarkerByCurrentType( MarkerCardResult markerCardResult ) { - if (markerCardResult == null) { + if ( markerCardResult == null ) { return; } - if (MarkerServiceHandler.getMogoStatusManager().isSearchUIShow()) { + if ( MarkerServiceHandler.getMogoStatusManager().isSearchUIShow() ) { return; } - if (TextUtils.isEmpty(mCurrentModuleName)) { + if ( TextUtils.isEmpty( mCurrentModuleName ) ) { // 默认大而全 mCurrentModuleName = ServiceConst.CARD_TYPE_BUSINESS_OPERATION; } - List onlineCarList = markerCardResult.getOnlineCar(); - List exploreWayList = markerCardResult.getExploreWay(); - List shareMusicList = markerCardResult.getShareMusic(); - List noveltyInfoList = markerCardResult.getNoveltyInfo(); + List< MarkerOnlineCar > onlineCarList = markerCardResult.getOnlineCar(); + List< MarkerExploreWay > exploreWayList = markerCardResult.getExploreWay(); + List< MarkerShareMusic > shareMusicList = markerCardResult.getShareMusic(); + List< MarkerNoveltyInfo > noveltyInfoList = markerCardResult.getNoveltyInfo(); - switch (mCurrentModuleName) { + switch ( mCurrentModuleName ) { case ServiceConst.CARD_TYPE_BUSINESS_OPERATION: - drawAllMarker(markerCardResult); + drawAllMarker( markerCardResult ); break; case ServiceConst.CARD_TYPE_NOVELTY: - drawNoveltyMarker(noveltyInfoList, ServiceConst.MAX_AMOUNT_SINGLE_CARD); + drawNoveltyMarker( noveltyInfoList, ServiceConst.MAX_AMOUNT_SINGLE_CARD ); break; // case ServiceConst.CARD_TYPE_CARS_CHATTING: // case ServiceConst.CARD_TYPE_USER_DATA: // drawOnlineCarMarkers(onlineCarList, ServiceConst.MAX_AMOUNT_SINGLE_CARD); // break; case ServiceConst.CARD_TYPE_ROAD_CONDITION: - drawRoadConditionMarker(exploreWayList, ServiceConst.MAX_AMOUNT_SINGLE_CARD); + drawRoadConditionMarker( exploreWayList, ServiceConst.MAX_AMOUNT_SINGLE_CARD ); break; case ServiceConst.CARD_TYPE_SHARE_MUSIC: - drawShareMusicMarker(shareMusicList, ServiceConst.MAX_AMOUNT_SINGLE_CARD); + drawShareMusicMarker( shareMusicList, ServiceConst.MAX_AMOUNT_SINGLE_CARD ); break; } } @@ -424,16 +432,16 @@ public class MapMarkerManager implements IMogoMarkerClickListener, * * @param markerCardResult */ - private void drawAllMarker(MarkerCardResult markerCardResult) { + private void drawAllMarker( MarkerCardResult markerCardResult ) { // List onlineCarList = markerCardResult.getOnlineCar(); - List exploreWayList = markerCardResult.getExploreWay(); - List shareMusicList = markerCardResult.getShareMusic(); - List noveltyInfoList = markerCardResult.getNoveltyInfo(); + List< MarkerExploreWay > exploreWayList = markerCardResult.getExploreWay(); + List< MarkerShareMusic > shareMusicList = markerCardResult.getShareMusic(); + List< MarkerNoveltyInfo > noveltyInfoList = markerCardResult.getNoveltyInfo(); // drawOnlineCarMarkers(onlineCarList, ServiceConst.MAX_AMOUNT_ALL); - drawRoadConditionMarker(exploreWayList, ServiceConst.MAX_AMOUNT_ALL); - drawShareMusicMarker(shareMusicList, ServiceConst.MAX_AMOUNT_ALL); - drawNoveltyMarker(noveltyInfoList, ServiceConst.MAX_AMOUNT_ALL); + drawRoadConditionMarker( exploreWayList, ServiceConst.MAX_AMOUNT_ALL ); + drawShareMusicMarker( shareMusicList, ServiceConst.MAX_AMOUNT_ALL ); + drawNoveltyMarker( noveltyInfoList, ServiceConst.MAX_AMOUNT_ALL ); } /** @@ -441,30 +449,30 @@ public class MapMarkerManager implements IMogoMarkerClickListener, * * @param onlineCarList */ - private void drawOnlineCarMarkers(List onlineCarList, int maxAmount) { + private void drawOnlineCarMarkers( List< MarkerOnlineCar > onlineCarList, int maxAmount ) { // 将数据同步给在线车辆,避免每次 perform 的时候去拉取,造成消耗 - if (onlineCarList == null || onlineCarList.isEmpty()) { + if ( onlineCarList == null || onlineCarList.isEmpty() ) { return; } double nearlyDistance = Float.MAX_VALUE; - int size = getAppropriateSize(maxAmount, onlineCarList); - for (int i = 0; i < size; i++) { - MarkerOnlineCar markerOnlineCar = onlineCarList.get(i); + int size = getAppropriateSize( maxAmount, onlineCarList ); + for ( int i = 0; i < size; i++ ) { + MarkerOnlineCar markerOnlineCar = onlineCarList.get( i ); MarkerLocation markerLocation = markerOnlineCar.getLocation(); MarkerShowEntity markerShowEntity = new MarkerShowEntity(); - markerShowEntity.setBindObj(markerOnlineCar); - markerShowEntity.setMarkerLocation(markerLocation); - markerShowEntity.setMarkerType(markerOnlineCar.getType()); + markerShowEntity.setBindObj( markerOnlineCar ); + markerShowEntity.setMarkerLocation( markerLocation ); + markerShowEntity.setMarkerType( markerOnlineCar.getType() ); - if (markerOnlineCar.getCarInfo() != null) { - markerShowEntity.setTextContent(markerOnlineCar.getUserInfo().getUserName()); - markerShowEntity.setIconUrl(markerOnlineCar.getUserInfo().getUserHead()); + if ( markerOnlineCar.getCarInfo() != null ) { + markerShowEntity.setTextContent( markerOnlineCar.getUserInfo().getUserName() ); + markerShowEntity.setIconUrl( markerOnlineCar.getUserInfo().getUserHead() ); } - IMogoMarker iMogoMarker = drawMapMarker(markerShowEntity); + IMogoMarker iMogoMarker = drawMapMarker( markerShowEntity ); // iMogoMarker.setInfoWindowAdapter(this); - startSmooth(iMogoMarker, markerOnlineCar, markerLocation); + startSmooth( iMogoMarker, markerOnlineCar, markerLocation ); // 计算在线车辆距离当前车辆的距离,每次都与最后一次距离最近的进行比较,保留距离最近的车辆,进行卡片展示 try { @@ -473,22 +481,22 @@ public class MapMarkerManager implements IMogoMarkerClickListener, // 计算车辆距离指定气泡的距离 float calculateDistance = - Utils.calculateLineDistance(new MogoLatLng(markerLocation.getLat(), - markerLocation.getLon()), - new MogoLatLng(currentLocation.getLatitude(), - currentLocation.getLongitude())); + Utils.calculateLineDistance( new MogoLatLng( markerLocation.getLat(), + markerLocation.getLon() ), + new MogoLatLng( currentLocation.getLatitude(), + currentLocation.getLongitude() ) ); // 进行比较,保留最近的一个数据 - if (calculateDistance < nearlyDistance) { + if ( calculateDistance < nearlyDistance ) { nearlyDistance = calculateDistance; mNearlyMarker = iMogoMarker; } - } catch (Exception e) { + } catch ( Exception e ) { e.printStackTrace(); } } - Logger.d(TAG, "距离当前车辆位置最近的距离为:" + nearlyDistance); + Logger.d( TAG, "距离当前车辆位置最近的距离为:" + nearlyDistance ); try { // 在ACC on 之后第一次获取到了在线车辆数据,选中最近的一个Marker @@ -498,15 +506,15 @@ public class MapMarkerManager implements IMogoMarkerClickListener, if ( mNearlyMarker == null ) { return; } - Logger.d(TAG, "语音搜索触发,默认选中最近的在线车辆:" + mNearlyMarker); + Logger.d( TAG, "语音搜索触发,默认选中最近的在线车辆:" + mNearlyMarker ); // 移动地图到指定位置 - MarkerServiceHandler.getMogoStatusManager().setUserInteractionStatus(ServiceConst.TYPE, true, false); - MarkerServiceHandler.getMapUIController().moveToCenter(mNearlyMarker.getPosition()); - onMarkerClicked(mNearlyMarker); - MogoMarkersHandler.getInstance().onMarkerClicked(mNearlyMarker); + MarkerServiceHandler.getMogoStatusManager().setUserInteractionStatus( ServiceConst.TYPE, true, false ); + MarkerServiceHandler.getMapUIController().moveToCenter( mNearlyMarker.getPosition() ); + onMarkerClicked( mNearlyMarker ); + MogoMarkersHandler.getInstance().onMarkerClicked( mNearlyMarker ); mIsAISearchOnlineData = false; - } catch (Exception e) { + } catch ( Exception e ) { e.printStackTrace(); } } @@ -516,24 +524,24 @@ public class MapMarkerManager implements IMogoMarkerClickListener, * * @param exploreWayList */ - private void drawRoadConditionMarker(List exploreWayList, int maxAmount) { + private void drawRoadConditionMarker( List< MarkerExploreWay > exploreWayList, int maxAmount ) { // 将数据同步给探路,避免探路每次 perform 的时候去拉取,造成消耗 - if (exploreWayList == null || exploreWayList.isEmpty()) { + if ( exploreWayList == null || exploreWayList.isEmpty() ) { return; } - int size = getAppropriateSize(maxAmount, exploreWayList); - for (int i = 0; i < size; i++) { - MarkerExploreWay markerExploreWay = exploreWayList.get(i); - if (!markerExploreWay.getCanLive()) { + int size = getAppropriateSize( maxAmount, exploreWayList ); + for ( int i = 0; i < size; i++ ) { + MarkerExploreWay markerExploreWay = exploreWayList.get( i ); + if ( !markerExploreWay.getCanLive() ) { MarkerLocation markerLocation = markerExploreWay.getLocation(); MarkerShowEntity markerShowEntity = new MarkerShowEntity(); - markerShowEntity.setBindObj(markerExploreWay); - markerShowEntity.setMarkerLocation(markerLocation); - markerShowEntity.setMarkerType(markerExploreWay.getType()); - markerShowEntity.setTextContent(markerExploreWay.getAddr()); + markerShowEntity.setBindObj( markerExploreWay ); + markerShowEntity.setMarkerLocation( markerLocation ); + markerShowEntity.setMarkerType( markerExploreWay.getType() ); + markerShowEntity.setTextContent( markerExploreWay.getAddr() ); - drawMapMarker(markerShowEntity); + drawMapMarker( markerShowEntity ); } } } @@ -543,22 +551,22 @@ public class MapMarkerManager implements IMogoMarkerClickListener, * * @param shareMusicList */ - private void drawShareMusicMarker(List shareMusicList, int maxAmount) { - if (shareMusicList == null) { + private void drawShareMusicMarker( List< MarkerShareMusic > shareMusicList, int maxAmount ) { + if ( shareMusicList == null ) { return; } - int size = getAppropriateSize(maxAmount, shareMusicList); - for (int i = 0; i < size; i++) { - MarkerShareMusic markerShareMusic = shareMusicList.get(i); + int size = getAppropriateSize( maxAmount, shareMusicList ); + for ( int i = 0; i < size; i++ ) { + MarkerShareMusic markerShareMusic = shareMusicList.get( i ); MarkerLocation markerLocation = markerShareMusic.getLocation(); MarkerShowEntity markerShowEntity = new MarkerShowEntity(); - markerShowEntity.setBindObj(markerShareMusic); - markerShowEntity.setMarkerLocation(markerLocation); - markerShowEntity.setMarkerType(markerShareMusic.getType()); - markerShowEntity.setTextContent(markerShareMusic.getMediaName()); - markerShowEntity.setIconUrl(markerShareMusic.getMediaImg()); + markerShowEntity.setBindObj( markerShareMusic ); + markerShowEntity.setMarkerLocation( markerLocation ); + markerShowEntity.setMarkerType( markerShareMusic.getType() ); + markerShowEntity.setTextContent( markerShareMusic.getMediaName() ); + markerShowEntity.setIconUrl( markerShareMusic.getMediaImg() ); - drawMapMarker(markerShowEntity); + drawMapMarker( markerShowEntity ); } } @@ -567,25 +575,25 @@ public class MapMarkerManager implements IMogoMarkerClickListener, * * @param noveltyInfoList */ - private void drawNoveltyMarker(List noveltyInfoList, int maxAmount) { - if (noveltyInfoList == null) { + private void drawNoveltyMarker( List< MarkerNoveltyInfo > noveltyInfoList, int maxAmount ) { + if ( noveltyInfoList == null ) { return; } - int size = getAppropriateSize(maxAmount, noveltyInfoList); - for (int i = 0; i < size; i++) { - MarkerNoveltyInfo noveltyInfo = noveltyInfoList.get(i); + int size = getAppropriateSize( maxAmount, noveltyInfoList ); + for ( int i = 0; i < size; i++ ) { + MarkerNoveltyInfo noveltyInfo = noveltyInfoList.get( i ); MarkerLocation markerLocation = noveltyInfo.getLocation(); MarkerShowEntity markerShowEntity = new MarkerShowEntity(); - markerShowEntity.setBindObj(noveltyInfo); - markerShowEntity.setMarkerLocation(markerLocation); - markerShowEntity.setMarkerType(noveltyInfo.getType()); + markerShowEntity.setBindObj( noveltyInfo ); + markerShowEntity.setMarkerLocation( markerLocation ); + markerShowEntity.setMarkerType( noveltyInfo.getType() ); String address = noveltyInfo.getLocation().getAddress(); - if (!TextUtils.isEmpty(address)) { - markerShowEntity.setTextContent(address); + if ( !TextUtils.isEmpty( address ) ) { + markerShowEntity.setTextContent( address ); } else { - markerShowEntity.setTextContent(noveltyInfo.getContentData().getTitle()); + markerShowEntity.setTextContent( noveltyInfo.getContentData().getTitle() ); } - drawMapMarker(markerShowEntity); + drawMapMarker( markerShowEntity ); } } @@ -594,11 +602,11 @@ public class MapMarkerManager implements IMogoMarkerClickListener, * @param list * @return */ - private int getAppropriateSize(int maxAmount, List list) { - if (list == null) { + private int getAppropriateSize( int maxAmount, List list ) { + if ( list == null ) { return 0; } - return Math.min(maxAmount, list.size()); + return Math.min( maxAmount, list.size() ); } @@ -607,27 +615,27 @@ public class MapMarkerManager implements IMogoMarkerClickListener, * * @param markerCardResult */ - private void trackData(MarkerCardResult markerCardResult) { - if (markerCardResult == null) { + private void trackData( MarkerCardResult markerCardResult ) { + if ( markerCardResult == null ) { return; } JSONArray array = new JSONArray(); - List onlineCarList = markerCardResult.getOnlineCar(); - List exploreWayList = markerCardResult.getExploreWay(); - List shareMusicList = markerCardResult.getShareMusic(); - List noveltyInfoList = markerCardResult.getNoveltyInfo(); + List< MarkerOnlineCar > onlineCarList = markerCardResult.getOnlineCar(); + List< MarkerExploreWay > exploreWayList = markerCardResult.getExploreWay(); + List< MarkerShareMusic > shareMusicList = markerCardResult.getShareMusic(); + List< MarkerNoveltyInfo > noveltyInfoList = markerCardResult.getNoveltyInfo(); int size = onlineCarList == null ? 0 : onlineCarList.size(); - fillPoiTypeTrackBody(array, ModuleNames.CARD_TYPE_USER_DATA, size); + fillPoiTypeTrackBody( array, ModuleNames.CARD_TYPE_USER_DATA, size ); size = exploreWayList == null ? 0 : exploreWayList.size(); - fillPoiTypeTrackBody(array, ModuleNames.CARD_TYPE_ROAD_CONDITION, size); + fillPoiTypeTrackBody( array, ModuleNames.CARD_TYPE_ROAD_CONDITION, size ); size = noveltyInfoList == null ? 0 : noveltyInfoList.size(); - JSONObject novelty = fillPoiTypeTrackBody(array, ModuleNames.CARD_TYPE_NOVELTY, size); - if (noveltyInfoList != null) { - Map counter = new HashMap<>( ); - for (MarkerNoveltyInfo markerNoveltyInfo : noveltyInfoList) { - if (markerNoveltyInfo == null) { + JSONObject novelty = fillPoiTypeTrackBody( array, ModuleNames.CARD_TYPE_NOVELTY, size ); + if ( noveltyInfoList != null ) { + Map< String, Integer > counter = new HashMap<>(); + for ( MarkerNoveltyInfo markerNoveltyInfo : noveltyInfoList ) { + if ( markerNoveltyInfo == null ) { continue; } String childType = markerNoveltyInfo.getPoiType(); @@ -635,12 +643,12 @@ public class MapMarkerManager implements IMogoMarkerClickListener, counter.put( childType, 0 ); } int s = counter.get( childType ).intValue(); - counter.put( childType, s+1 ); + counter.put( childType, s + 1 ); } if ( !counter.isEmpty() ) { JSONArray onlineCarJsonArray = new JSONArray(); for ( Map.Entry< String, Integer > entry : counter.entrySet() ) { - fillPoiChildTypeTrackBody(onlineCarJsonArray, entry.getKey(), entry.getValue()); + fillPoiChildTypeTrackBody( onlineCarJsonArray, entry.getKey(), entry.getValue() ); } if ( onlineCarJsonArray.length() > 0 ) { try { @@ -653,24 +661,24 @@ public class MapMarkerManager implements IMogoMarkerClickListener, } size = shareMusicList == null ? 0 : shareMusicList.size(); - JSONObject shareMusic = fillPoiTypeTrackBody(array, ModuleNames.CARD_TYPE_SHARE_MUSIC, size); - if (shareMusicList != null) { - Map counter = new HashMap<>( ); - for (MarkerShareMusic markerShareMusic : shareMusicList) { - if (markerShareMusic == null) { + JSONObject shareMusic = fillPoiTypeTrackBody( array, ModuleNames.CARD_TYPE_SHARE_MUSIC, size ); + if ( shareMusicList != null ) { + Map< String, Integer > counter = new HashMap<>(); + for ( MarkerShareMusic markerShareMusic : shareMusicList ) { + if ( markerShareMusic == null ) { continue; } - String childType = markerShareMusic.getShareType()+""; + String childType = markerShareMusic.getShareType() + ""; if ( !counter.containsKey( childType ) ) { counter.put( childType, 0 ); } int s = counter.get( childType ).intValue(); - counter.put( childType, s+1 ); + counter.put( childType, s + 1 ); } if ( !counter.isEmpty() ) { JSONArray shareMusicJsonArray = new JSONArray(); for ( Map.Entry< String, Integer > entry : counter.entrySet() ) { - fillPoiChildTypeTrackBody(shareMusicJsonArray, entry.getKey(), entry.getValue()); + fillPoiChildTypeTrackBody( shareMusicJsonArray, entry.getKey(), entry.getValue() ); } if ( shareMusicJsonArray.length() > 0 ) { try { @@ -683,13 +691,13 @@ public class MapMarkerManager implements IMogoMarkerClickListener, } try { - if (array.length() == 0) { + if ( array.length() == 0 ) { return; } - final Map properties = new HashMap<>(); - properties.put("data", array.toString()); - MarkerServiceHandler.getMogoAnalytics().track("Launcher_Data_Get", properties); - } catch (Exception e) { + final Map< String, Object > properties = new HashMap<>(); + properties.put( "data", array.toString() ); + MarkerServiceHandler.getMogoAnalytics().track( "Launcher_Data_Get", properties ); + } catch ( Exception e ) { e.printStackTrace(); } } @@ -700,15 +708,15 @@ public class MapMarkerManager implements IMogoMarkerClickListener, * 仅在数据刷新的时候分发 */ private void dispatchDataToBiz() { - if (mLastDataResult == null) { + if ( mLastDataResult == null ) { return; } // List onlineCarList = mLastDataResult.getOnlineCar(); - List exploreWayList = mLastDataResult.getExploreWay(); - List noveltyInfoList = mLastDataResult.getNoveltyInfo(); + List< MarkerExploreWay > exploreWayList = mLastDataResult.getExploreWay(); + List< MarkerNoveltyInfo > noveltyInfoList = mLastDataResult.getNoveltyInfo(); // dispatchDataToBis(ServiceConst.CARD_TYPE_USER_DATA, onlineCarList == null ?new ArrayList<>() : onlineCarList); - dispatchDataToBis(ServiceConst.CARD_TYPE_ROAD_CONDITION, exploreWayList == null ? new ArrayList<>() : exploreWayList); - dispatchDataToBis(ServiceConst.CARD_TYPE_NOVELTY, noveltyInfoList == null ? new ArrayList<>() : noveltyInfoList); + dispatchDataToBis( ServiceConst.CARD_TYPE_ROAD_CONDITION, exploreWayList == null ? new ArrayList<>() : exploreWayList ); + dispatchDataToBis( ServiceConst.CARD_TYPE_NOVELTY, noveltyInfoList == null ? new ArrayList<>() : noveltyInfoList ); } /** @@ -717,14 +725,14 @@ public class MapMarkerManager implements IMogoMarkerClickListener, * @param biz * @param object */ - private void dispatchDataToBis(String biz, Object object) { - if (TextUtils.isEmpty(biz)) { + private void dispatchDataToBis( String biz, Object object ) { + if ( TextUtils.isEmpty( biz ) ) { return; } try { - Logger.d(TAG, "dispatch data to %s", biz); - MarkerServiceHandler.getDataManager().syncData(biz, object); - } catch (Exception e) { + Logger.d( TAG, "dispatch data to %s", biz ); + MarkerServiceHandler.getDataManager().syncData( biz, object ); + } catch ( Exception e ) { e.printStackTrace(); } } @@ -732,30 +740,30 @@ public class MapMarkerManager implements IMogoMarkerClickListener, /** * 大而全数据计数埋点 */ - private synchronized static JSONObject fillPoiTypeTrackBody( JSONArray arr, String poiType, int poiTypeNum) { + private synchronized static JSONObject fillPoiTypeTrackBody( JSONArray arr, String poiType, int poiTypeNum ) { JSONObject object = new JSONObject(); try { - object.put("poitype", poiType); - object.put("num", poiTypeNum); - if (arr != null) { - arr.put(object); + object.put( "poitype", poiType ); + object.put( "num", poiTypeNum ); + if ( arr != null ) { + arr.put( object ); } return object; - } catch (JSONException e) { + } catch ( JSONException e ) { e.printStackTrace(); } return null; } - private synchronized static void fillPoiChildTypeTrackBody(JSONArray arr, String childType, int childTypeNum){ + private synchronized static void fillPoiChildTypeTrackBody( JSONArray arr, String childType, int childTypeNum ) { JSONObject object = new JSONObject(); try { - object.put("contenttype", childType); - object.put("num", childTypeNum); - if (arr != null) { - arr.put(object); + object.put( "contenttype", childType ); + object.put( "num", childTypeNum ); + if ( arr != null ) { + arr.put( object ); } - } catch (JSONException e) { + } catch ( JSONException e ) { e.printStackTrace(); } } @@ -766,71 +774,75 @@ public class MapMarkerManager implements IMogoMarkerClickListener, * @param markerShowEntity marker 绘制数据实体 * @return 绘制的Marker */ - public synchronized IMogoMarker drawMapMarker(MarkerShowEntity markerShowEntity) { + public synchronized IMogoMarker drawMapMarker( MarkerShowEntity markerShowEntity ) { try { - return drawMapMarker(markerShowEntity, isSmallType()); - } catch (Exception e) { + return drawMapMarker( markerShowEntity, isSmallType() ); + } catch ( Exception e ) { e.printStackTrace(); return null; } } private boolean isSmallType() { - return !TextUtils.isEmpty(mCurrentModuleName) && mLastCheckMarker != null && !mLastCheckMarker.isDestroyed() && TextUtils.equals(mCurrentModuleName, mLastCheckMarker.getOwner()); + return !TextUtils.isEmpty( mCurrentModuleName ) && mLastCheckMarker != null && !mLastCheckMarker.isDestroyed() && TextUtils.equals( mCurrentModuleName, mLastCheckMarker.getOwner() ); } - private IMogoMarker drawMapMarker(MarkerShowEntity markerShowEntity, boolean isSmall) { - if (markerShowEntity == null || markerShowEntity.getMarkerLocation() == null) { + private IMogoMarker drawMapMarker( MarkerShowEntity markerShowEntity, boolean isSmall ) { + if ( markerShowEntity == null || markerShowEntity.getMarkerLocation() == null ) { return null; } - MogoMarkerOptions options = new MogoMarkerOptions().owner(markerShowEntity.getMarkerType()).object(markerShowEntity).latitude(markerShowEntity.getMarkerLocation().getLat()).longitude(markerShowEntity.getMarkerLocation().getLon()); - IMarkerView markerView = MapMarkerAdapter.getMarkerView(mContext, markerShowEntity, options); + MogoMarkerOptions options = new MogoMarkerOptions().owner( markerShowEntity.getMarkerType() ).object( markerShowEntity ).latitude( markerShowEntity.getMarkerLocation().getLat() ).longitude( markerShowEntity.getMarkerLocation().getLon() ); + IMarkerView markerView = MapMarkerAdapter.getMarkerView( mContext, markerShowEntity, options ); if ( markerView instanceof OnlineCarMarkerView ) { - options.icon(markerView.getBitmap()); + try { + options.icon( markerView.getBitmap( ( ( MarkerOnlineCar ) markerShowEntity.getBindObj() ).getCarInfo().getVehicleType() ) ); + } catch ( Exception e ) { + options.icon( markerView.getBitmap( 0 ) ); + } options.anchor( 0.5f, 0.5f ); } else { - options.icon(markerView.getView()); + options.icon( markerView.getView() ); } - IMogoMarker marker = MarkerServiceHandler.getMarkerManager().addMarker(markerShowEntity.getMarkerType(), options); - marker.setOwner(markerShowEntity.getMarkerType()); - markerView.setMarker(marker); - marker.setOnMarkerClickListener(this); + IMogoMarker marker = MarkerServiceHandler.getMarkerManager().addMarker( markerShowEntity.getMarkerType(), options ); + marker.setOwner( markerShowEntity.getMarkerType() ); + markerView.setMarker( marker ); + marker.setOnMarkerClickListener( this ); - if (isSmall) { - List markers = new ArrayList<>(); - markers.add(marker); - setMarkersSmall(markers); + if ( isSmall ) { + List< IMogoMarker > markers = new ArrayList<>(); + markers.add( marker ); + setMarkersSmall( markers ); } - markerShowEntity.setMarker(marker); + markerShowEntity.setMarker( marker ); return marker; } @Override - public Class target() { + public Class< MarkerResponse > target() { return MarkerResponse.class; } @Override - public void onMsgReceived(final MarkerResponse response) { - if (ignoreDrawRequest()) { + public void onMsgReceived( final MarkerResponse response ) { + if ( ignoreDrawRequest() ) { return; } - Logger.d(TAG, "接收到了地图大而全数据"); - runOnTargetThread(() -> { - drawMapMarker(response); - }); + Logger.d( TAG, "接收到了地图大而全数据" ); + runOnTargetThread( () -> { + drawMapMarker( response ); + } ); } - public void syncLocation(double lon, double lat){ + public void syncLocation( double lon, double lat ) { mCarLatLng = new MogoLatLng( lat, lon ); } - public void getOnlineCarData(MogoLatLng latlng) { + public void getOnlineCarData( MogoLatLng latlng ) { mCarLatLng = latlng; getOnlineCarList(); - UiThreadHandler.removeCallbacks(runnable); + UiThreadHandler.removeCallbacks( runnable ); UiThreadHandler.postDelayed( runnable, SMOOTH_DURATION * 1000 ); } @@ -849,20 +861,20 @@ public class MapMarkerManager implements IMogoMarkerClickListener, return; } - mRefreshModel.queryOnLineCarWithRoute(mCarLatLng, false, false, new RefreshCallback() { + mRefreshModel.queryOnLineCarWithRoute( mCarLatLng, false, false, new RefreshCallback() { @Override - public void onSuccess(Object o) { - MarkerResponse data = (MarkerResponse) o; + public void onSuccess( Object o ) { + MarkerResponse data = ( MarkerResponse ) o; MarkerCardResult result = data.getResult(); - if (result == null) { + if ( result == null ) { return; } removeCarMarkers(); - List onlineCarList = result.getOnlineCar(); + List< MarkerOnlineCar > onlineCarList = result.getOnlineCar(); if ( !MarkerServiceHandler.getMogoStatusManager().isADASShow() ) { - dispatchDataToBis(ServiceConst.CARD_TYPE_USER_DATA, onlineCarList == null ? new ArrayList<>() : onlineCarList); + dispatchDataToBis( ServiceConst.CARD_TYPE_USER_DATA, onlineCarList == null ? new ArrayList<>() : onlineCarList ); } - if (MarkerServiceHandler.getMogoStatusManager().isSearchUIShow() ){ + if ( MarkerServiceHandler.getMogoStatusManager().isSearchUIShow() ) { return; } runOnTargetThread( () -> { @@ -874,14 +886,15 @@ public class MapMarkerManager implements IMogoMarkerClickListener, public void onFail() { } - }); + } ); } /** * 忽略在线车辆请求策略 + * * @return */ - private boolean ignoreOnlineCarRequest(){ + private boolean ignoreOnlineCarRequest() { if ( MarkerServiceHandler.getMogoStatusManager().isSearchUIShow() ) { return true; } @@ -896,13 +909,13 @@ public class MapMarkerManager implements IMogoMarkerClickListener, return true; } - private void removeCarMarkers(){ + private void removeCarMarkers() { MarkerServiceHandler.getMarkerManager().removeMarkers( ModuleNames.CARD_TYPE_USER_DATA ); } // 平滑移动 - private void startSmooth(IMogoMarker iMogoMarker, MarkerOnlineCar markerOnlineCar, - MarkerLocation markerLocation) { + private void startSmooth( IMogoMarker iMogoMarker, MarkerOnlineCar markerOnlineCar, + MarkerLocation markerLocation ) { List< MarkerCarPois > poiList = markerOnlineCar.getPois(); if ( filterErrorPoint( poiList ) ) { return; @@ -911,7 +924,7 @@ public class MapMarkerManager implements IMogoMarkerClickListener, return; } - List points = new ArrayList<>(); + List< MogoLatLng > points = new ArrayList<>(); for ( int j = 0; j < poiList.size(); j++ ) { MarkerCarPois poi = poiList.get( j ); if ( poi == null || poi.getCoordinates() == null && poi.getCoordinates().size() != 2 ) { @@ -920,20 +933,22 @@ public class MapMarkerManager implements IMogoMarkerClickListener, try { double lat = Double.valueOf( poi.getCoordinates().get( 1 ) + "" ); double lng = Double.valueOf( poi.getCoordinates().get( 0 ) + "" ); - points.add(new MogoLatLng(lat, lng)); - } catch ( Exception e ) { } - } - if (points.size() >= 1){ - points.add(new MogoLatLng(markerLocation.getLat(), markerLocation.getLon())); - iMogoMarker.startSmooth( points, SMOOTH_DURATION ); + points.add( new MogoLatLng( lat, lng ) ); + } catch ( Exception e ) { } } + if ( points.size() >= 1 ) { + points.add( new MogoLatLng( markerLocation.getLat(), markerLocation.getLon() ) ); + iMogoMarker.startSmooth( points, SMOOTH_DURATION ); + } + } /** * 有可能出现终点到起点跳跃的情况,需要用"500M"约束起点和终点 + * * @param poiList */ - private boolean filterErrorPoint(List< MarkerCarPois > poiList){ + private boolean filterErrorPoint( List< MarkerCarPois > poiList ) { if ( poiList == null || poiList.size() < 2 ) { return false; } @@ -958,11 +973,11 @@ public class MapMarkerManager implements IMogoMarkerClickListener, return MarkerServiceHandler.getMogoStatusManager().isSearchUIShow() || MarkerServiceHandler.getMogoStatusManager().isADASShow(); } - private void runOnTargetThread(Runnable runnable) { - if (runnable == null) { + private void runOnTargetThread( Runnable runnable ) { + if ( runnable == null ) { return; } - ThreadPoolService.execute(runnable); + ThreadPoolService.execute( runnable ); } public String getCurrentModuleName() { @@ -970,19 +985,19 @@ public class MapMarkerManager implements IMogoMarkerClickListener, } @Override - public void onBizActionDone(String biz, int position, Object data) { - Logger.d(TAG, "biz = %s, position = %s", biz, position); - if (data instanceof MarkerShowEntity && ((MarkerShowEntity) data).getMarker() != null) { - switchMarkerOpenStatus(((MarkerShowEntity) data).getMarker()); + public void onBizActionDone( String biz, int position, Object data ) { + Logger.d( TAG, "biz = %s, position = %s", biz, position ); + if ( data instanceof MarkerShowEntity && ( ( MarkerShowEntity ) data ).getMarker() != null ) { + switchMarkerOpenStatus( ( ( MarkerShowEntity ) data ).getMarker() ); } else { IMogoMarkerManager markerManager = MarkerServiceHandler.getMarkerManager(); - List markers = markerManager.getMarkers(biz); - if (markers != null) { + List< IMogoMarker > markers = markerManager.getMarkers( biz ); + if ( markers != null ) { try { - IMogoMarker marker = markers.get(position); - switchMarkerOpenStatus(marker); - } catch (Exception e) { - Logger.e(TAG, e, "occur error."); + IMogoMarker marker = markers.get( position ); + switchMarkerOpenStatus( marker ); + } catch ( Exception e ) { + Logger.e( TAG, e, "occur error." ); } } } diff --git a/modules/mogo-module-service/src/main/java/com/mogo/module/service/marker/OnlineCarMarkerView.java b/modules/mogo-module-service/src/main/java/com/mogo/module/service/marker/OnlineCarMarkerView.java index f93a8461b4..b47fc1f616 100644 --- a/modules/mogo-module-service/src/main/java/com/mogo/module/service/marker/OnlineCarMarkerView.java +++ b/modules/mogo-module-service/src/main/java/com/mogo/module/service/marker/OnlineCarMarkerView.java @@ -21,23 +21,23 @@ import java.util.Map; */ public class OnlineCarMarkerView implements IMarkerView { - private static Map< String, SoftReference< Bitmap > > sRef = new HashMap<>(); + private static Map< Integer, SoftReference< Bitmap > > sRef = new HashMap<>(); - private OnlineCarMarkerView(){ + private OnlineCarMarkerView() { // private constructor } - private static final class InstanceHolder{ - private static final OnlineCarMarkerView INSTANCE = new OnlineCarMarkerView(); + private static final class InstanceHolder { + private static final OnlineCarMarkerView INSTANCE = new OnlineCarMarkerView(); } - public static OnlineCarMarkerView getInstance(){ - return InstanceHolder.INSTANCE; + public static OnlineCarMarkerView getInstance() { + return InstanceHolder.INSTANCE; } - private Object readResolve(){ - // 阻止反序列化,必须实现 Serializable 接口 - return InstanceHolder.INSTANCE; + private Object readResolve() { + // 阻止反序列化,必须实现 Serializable 接口 + return InstanceHolder.INSTANCE; } @Override @@ -46,12 +46,18 @@ public class OnlineCarMarkerView implements IMarkerView { } @Override - public Bitmap getBitmap() { - if ( sRef.get( ModuleNames.CARD_TYPE_USER_DATA ) == null || sRef.get( ModuleNames.CARD_TYPE_USER_DATA ).get() == null - || sRef.get( ModuleNames.CARD_TYPE_USER_DATA ).get().isRecycled() ) { - sRef.put( ModuleNames.CARD_TYPE_USER_DATA, new SoftReference<>( BitmapFactory.decodeResource( AbsMogoApplication.getApp().getResources(), R.drawable.icon_map_marker_car_gray ) ) ); + public Bitmap getBitmap( int vehicleType ) { + if ( sRef.get( vehicleType ) == null || sRef.get( vehicleType ).get() == null + || sRef.get( vehicleType ).get().isRecycled() ) { + switch ( vehicleType ) { + case 2: + sRef.put( vehicleType, new SoftReference<>( BitmapFactory.decodeResource( AbsMogoApplication.getApp().getResources(), R.drawable.icon_map_marker_car_type2 ) ) ); + break; + default: + sRef.put( vehicleType, new SoftReference<>( BitmapFactory.decodeResource( AbsMogoApplication.getApp().getResources(), R.drawable.icon_map_marker_car_gray ) ) ); + } } - return sRef.get( ModuleNames.CARD_TYPE_USER_DATA ).get(); + return sRef.get( vehicleType ).get(); } @Override diff --git a/modules/mogo-module-service/src/main/java/com/mogo/module/service/strategy/CarIconDisplayStrategy.java b/modules/mogo-module-service/src/main/java/com/mogo/module/service/strategy/CarIconDisplayStrategy.java index 2dc942e40d..538999bbea 100644 --- a/modules/mogo-module-service/src/main/java/com/mogo/module/service/strategy/CarIconDisplayStrategy.java +++ b/modules/mogo-module-service/src/main/java/com/mogo/module/service/strategy/CarIconDisplayStrategy.java @@ -1,14 +1,22 @@ package com.mogo.module.service.strategy; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; import android.os.Handler; import android.os.Message; +import com.mogo.commons.AbsMogoApplication; +import com.mogo.map.marker.IMogoMarker; +import com.mogo.map.marker.MogoMarkerOptions; import com.mogo.map.uicontroller.CarCursorOption; -import com.mogo.map.uicontroller.IMogoMapUIController; import com.mogo.module.common.utils.CarSeries; +import com.mogo.module.service.MarkerServiceHandler; import com.mogo.module.service.R; import com.mogo.utils.WorkThreadHandler; +import java.util.ArrayList; +import java.util.List; + /** * @author congtaowang @@ -18,7 +26,10 @@ import com.mogo.utils.WorkThreadHandler; */ public class CarIconDisplayStrategy { + private static final String TAG = "CarIconDisplayStrategy"; + public static final int MSG_SEEK_HELPING_ANIM = 2000; + public static final int MSG_STOP_SEEK_HELPING_ANIM = 2001; // F 系列才有这个帧动画 public static final int[] sFrame = { @@ -90,7 +101,9 @@ public class CarIconDisplayStrategy { }; private static volatile CarIconDisplayStrategy sInstance; - private IMogoMapUIController mController; + + private IMogoMarker mSeekHelpingMarker; + private ArrayList< Bitmap > mBitmapFrames = new ArrayList<>(); private CarIconDisplayStrategy() { mOption = new CarCursorOption.Builder().carCursorRes( R.drawable.module_service_ic_seek_helping ).build(); @@ -112,12 +125,9 @@ public class CarIconDisplayStrategy { } private Handler mSeekHelpingHandler; - private int mCounter = 0; - private boolean mStopStatus = true; private CarCursorOption mOption; - public void changeCarIconStatus( IMogoMapUIController controller, boolean seekHelpingStatus ) { - mController = controller; + public void changeCarIconStatus( boolean seekHelpingStatus ) { if ( CarSeries.getSeries() == CarSeries.CAR_SERIES_F80X ) { if ( seekHelpingStatus ) { playSeekHelpingAnim(); @@ -126,20 +136,18 @@ public class CarIconDisplayStrategy { } } else { if ( seekHelpingStatus ) { - controller.setCarCursorOption( mOption ); + MarkerServiceHandler.getMapUIController().setCarCursorOption( mOption ); } else { - controller.setCarCursorOption( null ); + MarkerServiceHandler.getMapUIController().setCarCursorOption( null ); } } } private void playSeekHelpingAnim() { initHandler(); - mStopStatus = false; Message msg = Message.obtain(); msg.what = MSG_SEEK_HELPING_ANIM; - msg.arg1 = mCounter++; - mSeekHelpingHandler.sendMessageDelayed( msg, 100 ); + mSeekHelpingHandler.sendMessageDelayed( msg, 0 ); } private void initHandler() { @@ -150,17 +158,20 @@ public class CarIconDisplayStrategy { @Override public void handleMessage( Message msg ) { super.handleMessage( msg ); - if ( mStopStatus ) { - mSeekHelpingHandler.removeMessages( MSG_SEEK_HELPING_ANIM ); - mCounter = 0; - mController.setCarCursorOption( null ); - return; - } switch ( msg.what ) { case MSG_SEEK_HELPING_ANIM: - mOption.setCarCursorRes( sFrame[msg.arg1 % sFrame.length] ); - mController.setCarCursorOption( mOption ); - playSeekHelpingAnim(); + try { + playAnim(); + } catch ( Exception e ) { + e.printStackTrace(); + } + break; + case MSG_STOP_SEEK_HELPING_ANIM: + try { + stopAnim(); + } catch ( Exception e ) { + e.printStackTrace(); + } break; } } @@ -168,12 +179,39 @@ public class CarIconDisplayStrategy { } private void stopSeekHelpingAnim() { - mStopStatus = true; - if ( mSeekHelpingHandler == null ) { - return; + initHandler(); + Message msg = Message.obtain(); + msg.what = MSG_STOP_SEEK_HELPING_ANIM; + mSeekHelpingHandler.sendMessageDelayed( msg, 0 ); + } + + private void playAnim() { + for ( int i : sFrame ) { + mBitmapFrames.add( BitmapFactory.decodeResource( AbsMogoApplication.getApp().getResources(), i ) ); } - mCounter = 0; - mSeekHelpingHandler.removeMessages( MSG_SEEK_HELPING_ANIM ); - mController.setCarCursorOption( null ); + mSeekHelpingMarker = MarkerServiceHandler.getMarkerManager().addMarker( TAG, new MogoMarkerOptions() + .icons( mBitmapFrames ) + .period( 1 ) + .zIndex( 1000 ) + .autoManager( false ) + .anchor( 0.5f, 0.5f ) + .position( MarkerServiceHandler.getMapService().getNavi( AbsMogoApplication.getApp() ).getCarLocation2() ) ); + MarkerServiceHandler.getMapUIController().showMyLocation( false ); + } + + private void stopAnim() { + if ( mSeekHelpingMarker != null ) { + mSeekHelpingMarker.destroy(); + mSeekHelpingMarker = null; + } + if ( !mBitmapFrames.isEmpty() ) { + for ( Bitmap bitmapFrame : mBitmapFrames ) { + if ( bitmapFrame != null && !bitmapFrame.isRecycled() ) { + bitmapFrame.recycle(); + } + } + mBitmapFrames.clear(); + } + MarkerServiceHandler.getMapUIController().showMyLocation( true ); } }