From 0e02d045b841b88fdf203f7fdebbee0490d6aba7 Mon Sep 17 00:00:00 2001 From: wangcongtao Date: Thu, 30 Apr 2020 14:27:16 +0800 Subject: [PATCH] opt --- .../service/marker/MapMarkerManager.java | 695 +++++++++--------- 1 file changed, 359 insertions(+), 336 deletions(-) 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 61a591128c..9ed4cc6b70 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 @@ -52,7 +52,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"; // 是否选中在线卡片及气泡,语音搜索触发 @@ -65,7 +65,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 @@ -74,16 +74,18 @@ public class MapMarkerManager implements IMogoMarkerClickListener, private MarkerCardResult mLastDataResult; private boolean mIsMarkerClicked = false; + private RefreshModel mRefreshModel; private MogoLatLng mCarLatLng; - private int mCarSmoothDuration = 15; + // 平滑移动事件间隔(单位:秒) + private static final int SMOOTH_DURATION = 15; private MapMarkerManager() { } public static synchronized MapMarkerManager getInstance() { - synchronized (MapMarkerManager.class) { - if (mMarkerManager == null) { + synchronized ( MapMarkerManager.class ) { + if ( mMarkerManager == null ) { mMarkerManager = new MapMarkerManager(); } } @@ -96,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 ); + } ); } } @@ -135,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; @@ -155,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." ); } } @@ -260,47 +262,47 @@ 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" ); } } else { - Object object = mogoMarker.getObject(); - if (object != null) { - MarkerShowEntity markerShowEntity = (MarkerShowEntity) object; - markerShowEntity.setChecked(true); - IMarkerView markerView = MapMarkerAdapter.getMarkerView(mContext, markerShowEntity, mogoMarker.getMogoMarkerOptions()); - if ( markerView instanceof OnlineCarMarkerView ) { - mogoMarker.setIcon(markerView.getBitmap()); - } else { - mogoMarker.setIcon(ViewUtils.fromView(markerView.getView())); + Object object = mogoMarker.getObject(); + if ( object != null ) { + MarkerShowEntity markerShowEntity = ( MarkerShowEntity ) object; + markerShowEntity.setChecked( true ); + IMarkerView markerView = MapMarkerAdapter.getMarkerView( mContext, markerShowEntity, mogoMarker.getMogoMarkerOptions() ); + if ( markerView instanceof OnlineCarMarkerView ) { + mogoMarker.setIcon( markerView.getBitmap() ); + } else { + mogoMarker.setIcon( ViewUtils.fromView( markerView.getView() ) ); + } + mogoMarker.setToTop(); } - mogoMarker.setToTop(); } } - } // 折叠气泡 - private void closeMarker(IMogoMarker mogoMarker) { - if (mogoMarker == null) { + private void closeMarker( IMogoMarker mogoMarker ) { + if ( mogoMarker == null ) { return; } // 在线车辆点击使用infoWindow @@ -308,55 +310,55 @@ public class MapMarkerManager implements IMogoMarkerClickListener, // mogoMarker.hideInfoWindow(); Logger.d( TAG, "关闭info window" ); } else { - Object object = mogoMarker.getObject(); - if (object != null) { - MarkerShowEntity markerShowEntity = (MarkerShowEntity) object; - markerShowEntity.setChecked(false); - IMarkerView markerView = MapMarkerAdapter.getMarkerView(mContext, markerShowEntity, mogoMarker.getMogoMarkerOptions()); - if ( markerView instanceof OnlineCarMarkerView ) { - mogoMarker.setIcon(markerView.getBitmap()); - } else { - mogoMarker.setIcon(ViewUtils.fromView(markerView.getView())); + Object object = mogoMarker.getObject(); + if ( object != null ) { + MarkerShowEntity markerShowEntity = ( MarkerShowEntity ) object; + markerShowEntity.setChecked( false ); + IMarkerView markerView = MapMarkerAdapter.getMarkerView( mContext, markerShowEntity, mogoMarker.getMogoMarkerOptions() ); + if ( markerView instanceof OnlineCarMarkerView ) { + mogoMarker.setIcon( markerView.getBitmap() ); + } else { + mogoMarker.setIcon( ViewUtils.fromView( markerView.getView() ) ); + } } } } - } // 绘制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 ); } /** @@ -365,8 +367,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; @@ -377,42 +379,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; } } @@ -422,16 +424,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 ); } /** @@ -439,70 +441,67 @@ 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 { // 当前车辆的位置 - MogoLocation currentLocation = - MarkerServiceHandler.getMogoLocationClient().getLastKnowLocation(); - + MogoLocation currentLocation = MarkerServiceHandler.getMogoLocationClient().getLastKnowLocation(); // 计算车辆距离指定气泡的距离 - float calculateDistance = - Utils.calculateLineDistance(new MogoLatLng(markerLocation.getLat(), - markerLocation.getLon()), - new MogoLatLng(currentLocation.getLatitude(), - currentLocation.getLongitude())); - + float calculateDistance = 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 - if (mIsAISearchOnlineData) { - if (mNearlyMarker != null) { - Logger.d(TAG, "语音搜索触发,默认选中最近的在线车辆:" + mNearlyMarker); - // 移动地图到指定位置 - MarkerServiceHandler.getMogoStatusManager().setUserInteractionStatus(ServiceConst.TYPE, true, false); - MarkerServiceHandler.getMapUIController().moveToCenter(mNearlyMarker.getPosition()); - onMarkerClicked(mNearlyMarker); - MogoMarkersHandler.getInstance().onMarkerClicked(mNearlyMarker); - mIsAISearchOnlineData = false; - } + if ( !mIsAISearchOnlineData ) { + return; } - } catch (Exception e) { + if ( mNearlyMarker == null ) { + return; + } + Logger.d( TAG, "语音搜索触发,默认选中最近的在线车辆:" + mNearlyMarker ); + // 移动地图到指定位置 + MarkerServiceHandler.getMogoStatusManager().setUserInteractionStatus( ServiceConst.TYPE, true, false ); + MarkerServiceHandler.getMapUIController().moveToCenter( mNearlyMarker.getPosition() ); + onMarkerClicked( mNearlyMarker ); + MogoMarkersHandler.getInstance().onMarkerClicked( mNearlyMarker ); + mIsAISearchOnlineData = false; + } catch ( Exception e ) { e.printStackTrace(); } } @@ -512,24 +511,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 ); } } } @@ -539,22 +538,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 ); } } @@ -563,25 +562,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 ); } } @@ -590,11 +589,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() ); } @@ -603,27 +602,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(); @@ -631,12 +630,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 { @@ -649,24 +648,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 { @@ -679,13 +678,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(); } } @@ -696,18 +695,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(); -// 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); + 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 ); } /** @@ -716,14 +712,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(); } } @@ -731,30 +727,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(); } } @@ -765,154 +761,181 @@ 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()); + options.icon( markerView.getBitmap() ); 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 getOnlineCarData(MogoLatLng latlng) { + public void getOnlineCarData( MogoLatLng latlng ) { mCarLatLng = latlng; getOnlineCarList(); - UiThreadHandler.removeCallbacks(runnable); - UiThreadHandler.postDelayed(runnable, mCarSmoothDuration * 1000); + UiThreadHandler.removeCallbacks( runnable ); + UiThreadHandler.postDelayed( runnable, SMOOTH_DURATION * 1000 ); } private Runnable runnable = new Runnable() { @Override public void run() { getOnlineCarList(); - UiThreadHandler.postDelayed(this, mCarSmoothDuration * 1000); + UiThreadHandler.postDelayed( this, SMOOTH_DURATION * 1000 ); } }; private void getOnlineCarList() { - if (MarkerServiceHandler.getMogoStatusManager().isSearchUIShow()){ - return; - } + if ( MarkerServiceHandler.getMogoStatusManager().isSearchUIShow() ) { + return; + } if ( TextUtils.equals( ServiceConst.CARD_TYPE_USER_DATA, mCurrentModuleName ) || TextUtils.equals( ServiceConst.CARD_TYPE_BUSINESS_OPERATION, mCurrentModuleName ) - || TextUtils.equals( ServiceConst.CARD_TYPE_CARS_CHATTING, mCurrentModuleName )) { + || TextUtils.equals( ServiceConst.CARD_TYPE_CARS_CHATTING, mCurrentModuleName ) ) { - 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(); - dispatchDataToBis(ServiceConst.CARD_TYPE_USER_DATA, onlineCarList == null ? new ArrayList<>() : onlineCarList); - if (MarkerServiceHandler.getMogoStatusManager().isSearchUIShow() ){ + List< MarkerOnlineCar > onlineCarList = result.getOnlineCar(); + dispatchDataToBis( ServiceConst.CARD_TYPE_USER_DATA, onlineCarList == null ? new ArrayList<>() : onlineCarList ); + if ( MarkerServiceHandler.getMogoStatusManager().isSearchUIShow() ) { return; } - drawOnlineCarMarkers(onlineCarList, ServiceConst.MAX_AMOUNT_SINGLE_CARD); + runOnTargetThread( () -> { + drawOnlineCarMarkers( onlineCarList, ServiceConst.MAX_AMOUNT_SINGLE_CARD ); + } ); } @Override public void onFail() { } - }); - }else { + } ); + } else { removeCarMarkers(); } } - private void removeCarMarkers(){ + private void removeCarMarkers() { MarkerServiceHandler.getMarkerManager().removeMarkers( ModuleNames.CARD_TYPE_USER_DATA ); } // 平滑移动 - private void startSmooth(IMogoMarker iMogoMarker, MarkerOnlineCar markerOnlineCar, - MarkerLocation markerLocation) { - List poisList = markerOnlineCar.getPois(); + private void startSmooth( IMogoMarker iMogoMarker, MarkerOnlineCar markerOnlineCar, + MarkerLocation markerLocation ) { + List< MarkerCarPois > poiList = markerOnlineCar.getPois(); + filterErrorPoint( poiList ); + if ( poiList == null || poiList.size() < 2 ) { + return; + } - if (poisList != null && poisList.size() > 0) { -// Logger.d(TAG, "坐标------"+markerLocation.getLon()+", "+markerLocation.getLat()); - - List points = new ArrayList<>(); - for (int j = 0; j < poisList.size(); j++) { - MarkerCarPois pois = poisList.get(j); - if (pois != null && pois.getCoordinates() != null && pois.getCoordinates().size() >= 2) { -// Logger.d(TAG, "坐标点:" + pois.getCoordinates().toString()); - double lat = Double.valueOf(pois.getCoordinates().get(1) + ""); - double lng = Double.valueOf(pois.getCoordinates().get(0) + ""); - points.add(new MogoLatLng(lat, lng)); - } + 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 ) { + continue; } - if (points.size() >= 1){ - points.add(new MogoLatLng(markerLocation.getLat(), markerLocation.getLon())); - iMogoMarker.startSmooth(points, mCarSmoothDuration); + 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 ); + } } + /** + * 有可能出现终点到起点跳跃的情况,需要用"500M"约束起点和终点 + * @param poiList + */ + private void filterErrorPoint(List< MarkerCarPois > poiList){ + if ( poiList == null || poiList.size() < 2 ) { + return; + } + MarkerCarPois start = poiList.get( 0 ); + MarkerCarPois end = poiList.get( poiList.size() - 1 ); + + try { + double lat1 = Double.valueOf( start.getCoordinates().get( 1 ) + "" ); + double lng1 = Double.valueOf( start.getCoordinates().get( 0 ) + "" ); + double lat2 = Double.valueOf( end.getCoordinates().get( 1 ) + "" ); + double lng2 = Double.valueOf( end.getCoordinates().get( 0 ) + "" ); + if ( Utils.calculateLineDistance( new MogoLatLng( lat1, lng1 ), new MogoLatLng( lat2, lng2 ) ) >= 500 ) { + poiList.remove( poiList.size() - 1 ); + } + } catch ( Exception e ) { + } + } private boolean ignoreDrawRequest() { 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() { @@ -920,19 +943,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." ); } } }