优化显示逻辑

This commit is contained in:
wangcongtao
2021-03-19 10:22:34 +08:00
parent 73bd8e771e
commit 6cce553987
3 changed files with 244 additions and 216 deletions

View File

@@ -2,6 +2,8 @@ package com.mogo.module.service.marker;
import android.content.Context;
import android.graphics.Rect;
import android.os.Handler;
import android.os.Message;
import android.text.TextUtils;
import android.util.Log;
@@ -44,6 +46,7 @@ import com.mogo.utils.ResourcesHelper;
import com.mogo.utils.ThreadPoolService;
import com.mogo.utils.UiThreadHandler;
import com.mogo.utils.ViewUtils;
import com.mogo.utils.WorkThreadHandler;
import com.mogo.utils.logger.Logger;
import com.zhidao.carchattingprovider.ICallChatResponse;
@@ -64,7 +67,7 @@ import java.util.Map;
* version: 1.0
*/
public class MapMarkerManager implements IMogoMarkerClickListener,
IMogoOnMessageListener<MarkerResponse>,
IMogoOnMessageListener< MarkerResponse >,
IMogoBizActionDoneListener,
IMogoADASControlStatusChangedListener {
private static final String TAG = "MapMarkerManager";
@@ -88,8 +91,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();
}
}
@@ -102,88 +105,102 @@ public class MapMarkerManager implements IMogoMarkerClickListener,
*
* @param context 上下文对象
*/
public void init(Context context) {
public void init( Context context ) {
if (mContext != null) {
if ( mContext != null ) {
return;
}
mContext = context.getApplicationContext();
mRefreshModel = new RefreshModel(mContext);
CloudPoiManager.getInstance().updateFromConfig(context);
MarkerServiceHandler.getActionManager().registerBizActionDoneListener(this);
MarkerServiceHandler.getApis().getRegisterCenterApi().registerADASControlStatusChangedListener(TAG, this);
mRefreshModel = new RefreshModel( mContext );
CloudPoiManager.getInstance().updateFromConfig( context );
MarkerServiceHandler.getActionManager().registerBizActionDoneListener( this );
MarkerServiceHandler.getApis().getRegisterCenterApi().registerADASControlStatusChangedListener( TAG, this );
if (CallChatApi.getInstance().getApiProvider() != null) {
CallChatApi.getInstance().getApiProvider().registerUserWindowStatusListener(TAG, mContext, new ICallChatResponse() {
if ( CallChatApi.getInstance().getApiProvider() != null ) {
CallChatApi.getInstance().getApiProvider().registerUserWindowStatusListener( TAG, mContext, new ICallChatResponse() {
@Override
public void userWindowStatus(boolean show) {
public void userWindowStatus( boolean show ) {
try {
if (mLastCheckMarker == null) {
if ( mLastCheckMarker == null ) {
return;
}
if (TextUtils.equals(mLastCheckMarker.getOwner(), ModuleNames.CARD_TYPE_USER_DATA)
&& !show) {
closeMarker(mLastCheckMarker);
if ( TextUtils.equals( mLastCheckMarker.getOwner(), ModuleNames.CARD_TYPE_USER_DATA )
&& !show ) {
closeMarker( mLastCheckMarker );
}
} catch (Exception e) {
} catch ( Exception e ) {
e.printStackTrace();
}
}
});
} );
}
// 下发的数据
MoGoAiCloudRealTime.registerOnMsgListener(new IMogoCloudOnMsgListener() {
MoGoAiCloudRealTime.registerOnMsgListener( new IMogoCloudOnMsgListener() {
@Override
public void onMsgSend(long id) {
public void onMsgSend( long id ) {
DebugConfig.setStatus( DebugConfig.sDownloadLink, true );
}
@Override
public void onMsgReceived(MogoSnapshotSetData mogoSnapshotSetData) {
public void onMsgReceived( MogoSnapshotSetData mogoSnapshotSetData ) {
DebugConfig.setStatus( DebugConfig.sDownloadSnapshot, true );
SnapshotSetDataDrawer.getInstance().renderSnapshotData(mogoSnapshotSetData);
Message msg = mSnapshotHandler.obtainMessage();
msg.obj = mogoSnapshotSetData;
msg.sendToTarget();
}
});
} );
// adas 每隔一秒传递的数据
MarkerServiceHandler.getApis().getAdasControllerApi().addAdasRecognizedDataCallback(resultList -> {
MarkerServiceHandler.getApis().getAdasControllerApi().addAdasRecognizedDataCallback( resultList -> {
// 绘制近景识别到的车辆
AdasRecognizedResultDrawer.getInstance().renderAdasRecognizedResult(resultList);
});
AdasRecognizedResultDrawer.getInstance().renderAdasRecognizedResult( resultList );
} );
}
private Handler mSnapshotHandler = new Handler( WorkThreadHandler.newInstance( "snapshot-thread" ).getLooper() ) {
@Override
public void handleMessage( Message msg ) {
super.handleMessage( msg );
if ( msg.obj instanceof MogoSnapshotSetData ) {
SnapshotSetDataDrawer.getInstance().renderSnapshotData( ( ( MogoSnapshotSetData ) msg.obj ) );
} else if ( msg.obj == null ) {
SnapshotSetDataDrawer.getInstance().renderSnapshotData( null );
}
}
};
/**
* 地图上的Marker点击回调
*/
@Override
public boolean onMarkerClicked(IMogoMarker marker) {
public boolean onMarkerClicked( IMogoMarker marker ) {
try {
boolean result = switchMarkerOpenStatus(marker);
if (!result) {
updateCarUserInfoWindow(marker);
boolean result = switchMarkerOpenStatus( marker );
if ( !result ) {
updateCarUserInfoWindow( marker );
return false;
}
Map<String, Object> properties = new HashMap<>();
Map< String, Object > properties = new HashMap<>();
if (marker.getObject() instanceof MarkerShowEntity) {
final String sn = MarkerDrawer.getInstance().getCarSnFromMarker(marker);
if (TextUtils.isEmpty(sn)) {
if ( marker.getObject() instanceof MarkerShowEntity ) {
final String sn = MarkerDrawer.getInstance().getCarSnFromMarker( marker );
if ( TextUtils.isEmpty( sn ) ) {
return false;
}
properties.put("sn", sn);
if (((MarkerShowEntity) marker.getObject()).getBindObj() instanceof MarkerExploreWay) {
MarkerExploreWay exploreWay = (MarkerExploreWay) ((MarkerShowEntity) marker.getObject()).getBindObj();
properties.put("dbid", exploreWay.getInfoId());
properties.put("type", exploreWay.getPoiType());
} else if (((MarkerShowEntity) marker.getObject()).getBindObj() instanceof MarkerOnlineCar) {
properties.put("type", "10000");
properties.put( "sn", sn );
if ( ( ( MarkerShowEntity ) marker.getObject() ).getBindObj() instanceof MarkerExploreWay ) {
MarkerExploreWay exploreWay = ( MarkerExploreWay ) ( ( MarkerShowEntity ) marker.getObject() ).getBindObj();
properties.put( "dbid", exploreWay.getInfoId() );
properties.put( "type", exploreWay.getPoiType() );
} else if ( ( ( MarkerShowEntity ) marker.getObject() ).getBindObj() instanceof MarkerOnlineCar ) {
properties.put( "type", "10000" );
}
}
MarkerServiceHandler.getMogoAnalytics().track("v2x_road_click", properties);
} catch (Exception e) {
MarkerServiceHandler.getMogoAnalytics().track( "v2x_road_click", properties );
} catch ( Exception e ) {
e.printStackTrace();
}
return false;
@@ -195,105 +212,106 @@ public class MapMarkerManager implements IMogoMarkerClickListener,
* @param marker 地图marker抽象对象
* @return markerOpenStatus
*/
private boolean switchMarkerOpenStatus(IMogoMarker marker) {
if (mLastCheckMarker != null) {
private boolean switchMarkerOpenStatus( IMogoMarker marker ) {
if ( mLastCheckMarker != null ) {
// 判断点击的是否是同一个
if (marker.equals(mLastCheckMarker)) {
if ( marker.equals( mLastCheckMarker ) ) {
return false;
}
// 将上次选中 Marker 设置为未选中状态
closeMarker(mLastCheckMarker);
closeMarker( mLastCheckMarker );
}
// 将当前的Marker设置为选中
openMarker(marker);
openMarker( marker );
return true;
}
// 展开气泡
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)) {
updateCarUserInfoWindow(mogoMarker);
if ( TextUtils.equals( mogoMarker.getOwner(), ModuleNames.CARD_TYPE_USER_DATA ) ) {
updateCarUserInfoWindow( mogoMarker );
} else {
Object object = mogoMarker.getObject();
if (object instanceof MarkerShowEntity) {
MarkerShowEntity markerShowEntity = (MarkerShowEntity) object;
markerShowEntity.setChecked(true);
IMarkerView markerView = MapMarkerAdapter.getMarkerView(mContext, markerShowEntity, mogoMarker.getMogoMarkerOptions());
markerView.setMarker(mogoMarker);
if (markerView instanceof OnlineCarMarkerView) {
if ( object instanceof MarkerShowEntity ) {
MarkerShowEntity markerShowEntity = ( MarkerShowEntity ) object;
markerShowEntity.setChecked( true );
IMarkerView markerView = MapMarkerAdapter.getMarkerView( mContext, markerShowEntity, mogoMarker.getMogoMarkerOptions() );
markerView.setMarker( mogoMarker );
if ( markerView instanceof OnlineCarMarkerView ) {
try {
mogoMarker.setIcon(markerView.getBitmap(((MarkerOnlineCar) markerShowEntity.getBindObj()).getCarInfo().getVehicleType()));
} catch (Exception e) {
mogoMarker.setIcon(markerView.getBitmap(0));
mogoMarker.setIcon( markerView.getBitmap( ( ( MarkerOnlineCar ) markerShowEntity.getBindObj() ).getCarInfo().getVehicleType() ) );
} catch ( Exception e ) {
mogoMarker.setIcon( markerView.getBitmap( 0 ) );
}
} else {
if (MarkerServiceHandler.getApis().getStatusManagerApi().isVrMode()) {
if ( MarkerServiceHandler.getApis().getStatusManagerApi().isVrMode() ) {
mogoMarker.hideInfoWindow();
mogoMarker.showInfoWindow();
} else {
mogoMarker.setIcon(ViewUtils.fromView(markerView.getView()));
mogoMarker.setIcon( ViewUtils.fromView( markerView.getView() ) );
}
}
mogoMarker.setToTop();
}
}
if (!MarkerServiceHandler.getApis().getStatusManagerApi().isVrMode()) {
MarkerServiceHandler.getMogoStatusManager().setUserInteractionStatus(TAG, true, false);
MarkerServiceHandler.getMapUIController().moveToCenter(mogoMarker.getPosition(), DebugConfig.isRoadEventAnimated());
if ( !MarkerServiceHandler.getApis().getStatusManagerApi().isVrMode() ) {
MarkerServiceHandler.getMogoStatusManager().setUserInteractionStatus( TAG, true, false );
MarkerServiceHandler.getMapUIController().moveToCenter( mogoMarker.getPosition(), DebugConfig.isRoadEventAnimated() );
}
}
/**
* 根据点击 marker 更新用户信息面板内容
*
* @param marker
*/
private void updateCarUserInfoWindow(IMogoMarker marker) {
if (marker != null && !marker.isDestroyed()) {
private void updateCarUserInfoWindow( IMogoMarker marker ) {
if ( marker != null && !marker.isDestroyed() ) {
try {
if (!TextUtils.equals(marker.getOwner(), ModuleNames.CARD_TYPE_USER_DATA)) {
if ( !TextUtils.equals( marker.getOwner(), ModuleNames.CARD_TYPE_USER_DATA ) ) {
return;
}
marker.setIcon(OnlineCarMarkerView.getInstance().getSelectedBitmap(getCarVehicleType(marker)));
MarkerOnlineCar onlineCar = (MarkerOnlineCar) ((MarkerShowEntity) marker.getObject()).getBindObj();
CallChatApi.getInstance().showUserWindow(mContext, onlineCar);
} catch (Exception e) {
marker.setIcon( OnlineCarMarkerView.getInstance().getSelectedBitmap( getCarVehicleType( marker ) ) );
MarkerOnlineCar onlineCar = ( MarkerOnlineCar ) ( ( MarkerShowEntity ) marker.getObject() ).getBindObj();
CallChatApi.getInstance().showUserWindow( mContext, onlineCar );
} catch ( Exception e ) {
}
}
}
// 折叠气泡
private void closeMarker(IMogoMarker mogoMarker) {
if (mogoMarker == null) {
private void closeMarker( IMogoMarker mogoMarker ) {
if ( mogoMarker == null ) {
return;
}
// 在线车辆点击使用infoWindow
if (TextUtils.equals(mogoMarker.getOwner(), ModuleNames.CARD_TYPE_USER_DATA)) {
mogoMarker.setIcon(OnlineCarMarkerView.getInstance().getBitmap(getCarVehicleType(mogoMarker)));
if ( TextUtils.equals( mogoMarker.getOwner(), ModuleNames.CARD_TYPE_USER_DATA ) ) {
mogoMarker.setIcon( OnlineCarMarkerView.getInstance().getBitmap( getCarVehicleType( mogoMarker ) ) );
} else {
Object object = mogoMarker.getObject();
if (object != null) {
MarkerShowEntity markerShowEntity = (MarkerShowEntity) object;
markerShowEntity.setChecked(false);
IMarkerView markerView = MapMarkerAdapter.getMarkerView(mContext, markerShowEntity, mogoMarker.getMogoMarkerOptions());
markerView.setMarker(mogoMarker);
if (markerView instanceof OnlineCarMarkerView) {
if ( object != null ) {
MarkerShowEntity markerShowEntity = ( MarkerShowEntity ) object;
markerShowEntity.setChecked( false );
IMarkerView markerView = MapMarkerAdapter.getMarkerView( mContext, markerShowEntity, mogoMarker.getMogoMarkerOptions() );
markerView.setMarker( mogoMarker );
if ( markerView instanceof OnlineCarMarkerView ) {
try {
mogoMarker.setIcon(markerView.getBitmap(((MarkerOnlineCar) markerShowEntity.getBindObj()).getCarInfo().getVehicleType()));
} catch (Exception e) {
mogoMarker.setIcon(markerView.getBitmap(0));
mogoMarker.setIcon( markerView.getBitmap( ( ( MarkerOnlineCar ) markerShowEntity.getBindObj() ).getCarInfo().getVehicleType() ) );
} catch ( Exception e ) {
mogoMarker.setIcon( markerView.getBitmap( 0 ) );
}
} else {
if (MarkerServiceHandler.getApis().getStatusManagerApi().isVrMode()) {
if ( MarkerServiceHandler.getApis().getStatusManagerApi().isVrMode() ) {
mogoMarker.hideInfoWindow();
mogoMarker.showInfoWindow();
} else {
mogoMarker.setIcon(ViewUtils.fromView(markerView.getView()));
mogoMarker.setIcon( ViewUtils.fromView( markerView.getView() ) );
}
}
}
@@ -302,41 +320,42 @@ public class MapMarkerManager implements IMogoMarkerClickListener,
/**
* 获取特殊车辆类型
*
* @param marker
* @return
*/
private int getCarVehicleType(IMogoMarker marker) {
private int getCarVehicleType( IMogoMarker marker ) {
try {
return ((MarkerOnlineCar)
((MarkerShowEntity) marker.getObject()).getBindObj())
return ( ( MarkerOnlineCar )
( ( MarkerShowEntity ) marker.getObject() ).getBindObj() )
.getCarInfo()
.getVehicleType();
} catch (Exception e) {
} catch ( Exception e ) {
return 0;
}
}
// 绘制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类型然后对应的进行绘制
mLastDataResult = response.getResult();
UiThreadHandler.post(this::dispatchDataToBiz);
UiThreadHandler.post( this::dispatchDataToBiz );
drawMarkerByCurrentType(mLastDataResult);
drawMarkerByCurrentType( mLastDataResult );
// 在首页时才埋点
if (MarkerServiceHandler.getMogoStatusManager().isMainPageOnResume()) {
trackData(mLastDataResult);
if ( MarkerServiceHandler.getMogoStatusManager().isMainPageOnResume() ) {
trackData( mLastDataResult );
}
}
@@ -345,17 +364,17 @@ 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;
}
drawAllMarker(markerCardResult);
drawAllMarker( markerCardResult );
}
/**
@@ -363,9 +382,9 @@ public class MapMarkerManager implements IMogoMarkerClickListener,
*
* @param markerCardResult
*/
private void drawAllMarker(MarkerCardResult markerCardResult) {
List<MarkerExploreWay> exploreWayList = markerCardResult.getExploreWay();
RoadConditionDrawer.getInstance().drawRoadConditionMarker(exploreWayList, ServiceConst.MAX_AMOUNT_ALL, this);
private void drawAllMarker( MarkerCardResult markerCardResult ) {
List< MarkerExploreWay > exploreWayList = markerCardResult.getExploreWay();
RoadConditionDrawer.getInstance().drawRoadConditionMarker( exploreWayList, ServiceConst.MAX_AMOUNT_ALL, this );
}
/**
@@ -373,51 +392,51 @@ public class MapMarkerManager implements IMogoMarkerClickListener,
*
* @param markerCardResult
*/
private void trackData(MarkerCardResult markerCardResult) {
if (markerCardResult == null) {
private void trackData( MarkerCardResult markerCardResult ) {
if ( markerCardResult == null ) {
return;
}
List<MarkerExploreWay> exploreWayList = markerCardResult.getExploreWay();
List< MarkerExploreWay > exploreWayList = markerCardResult.getExploreWay();
JSONArray array = new JSONArray();
int size = 0;
size = exploreWayList == null ? 0 : exploreWayList.size();
final Map<String, Integer> typeCounterMap = new HashMap<>();
for (int i = 0; i < size; i++) {
MarkerExploreWay exploreWay = exploreWayList.get(i);
final Map< String, Integer > typeCounterMap = new HashMap<>();
for ( int i = 0; i < size; i++ ) {
MarkerExploreWay exploreWay = exploreWayList.get( i );
String poiType = exploreWay.getPoiType();
int counter = 0;
if (!typeCounterMap.containsKey(poiType)) {
if ( !typeCounterMap.containsKey( poiType ) ) {
counter = 0;
} else {
counter = typeCounterMap.get(poiType);
counter = typeCounterMap.get( poiType );
}
typeCounterMap.put(poiType, counter + 1);
typeCounterMap.put( poiType, counter + 1 );
}
if (!typeCounterMap.isEmpty()) {
for (Map.Entry<String, Integer> entry : typeCounterMap.entrySet()) {
if (entry == null || entry.getKey() == null) {
if ( !typeCounterMap.isEmpty() ) {
for ( Map.Entry< String, Integer > entry : typeCounterMap.entrySet() ) {
if ( entry == null || entry.getKey() == null ) {
continue;
}
JSONObject object = new JSONObject();
try {
object.put("type", entry.getKey());
object.put("num", entry.getValue());
array.put(object);
} catch (JSONException e) {
object.put( "type", entry.getKey() );
object.put( "num", entry.getValue() );
array.put( object );
} catch ( JSONException e ) {
e.printStackTrace();
}
}
}
try {
if (array.length() == 0) {
if ( array.length() == 0 ) {
return;
}
final Map<String, Object> properties = new HashMap<>();
properties.put("data", array.toString());
MarkerServiceHandler.getMogoAnalytics().track("v2x_data_get", properties);
} catch (Exception e) {
final Map< String, Object > properties = new HashMap<>();
properties.put( "data", array.toString() );
MarkerServiceHandler.getMogoAnalytics().track( "v2x_data_get", properties );
} catch ( Exception e ) {
e.printStackTrace();
}
}
@@ -428,11 +447,11 @@ public class MapMarkerManager implements IMogoMarkerClickListener,
* 仅在数据刷新的时候分发
*/
private void dispatchDataToBiz() {
if (mLastDataResult == null) {
if ( mLastDataResult == null ) {
return;
}
List<MarkerExploreWay> exploreWayList = mLastDataResult.getExploreWay();
dispatchDataToBis(ServiceConst.CARD_TYPE_ROAD_CONDITION, exploreWayList == null ? new ArrayList<>() : exploreWayList);
List< MarkerExploreWay > exploreWayList = mLastDataResult.getExploreWay();
dispatchDataToBis( ServiceConst.CARD_TYPE_ROAD_CONDITION, exploreWayList == null ? new ArrayList<>() : exploreWayList );
}
/**
@@ -441,13 +460,13 @@ 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 {
MarkerServiceHandler.getDataManager().syncData(biz, object);
} catch (Exception e) {
MarkerServiceHandler.getDataManager().syncData( biz, object );
} catch ( Exception e ) {
e.printStackTrace();
}
}
@@ -458,58 +477,61 @@ public class MapMarkerManager implements IMogoMarkerClickListener,
* @param markerShowEntity marker 绘制数据实体
* @return 绘制的Marker
*/
public synchronized IMogoMarker drawMapMarker(MarkerShowEntity markerShowEntity, int zIndex) {
public synchronized IMogoMarker drawMapMarker( MarkerShowEntity markerShowEntity, int zIndex ) {
try {
return MarkerDrawer.getInstance().drawMapMarkerImpl(markerShowEntity, zIndex, this);
} catch (Exception e) {
return MarkerDrawer.getInstance().drawMapMarkerImpl( markerShowEntity, zIndex, this );
} catch ( Exception e ) {
return null;
}
}
@Override
public Class<MarkerResponse> 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;
}
runOnTargetThread(() -> {
drawMapMarker(response);
});
runOnTargetThread( () -> {
drawMapMarker( response );
} );
}
/**
* 同步绘制大而全的数据 marker
*
* @param response
*/
public void onSyncMarkerResponse(MarkerResponse response) {
if (ignoreDrawRequest()) {
public void onSyncMarkerResponse( MarkerResponse response ) {
if ( ignoreDrawRequest() ) {
return;
}
runOnTargetThread(() -> {
drawMapMarker(response);
});
runOnTargetThread( () -> {
drawMapMarker( response );
} );
}
/**
* 当前地图中心点坐标
*
* @param lon
* @param lat
*/
public void syncLocation(double lon, double lat) {
mCarLatLng = new MogoLatLng(lat, lon);
public void syncLocation( double lon, double lat ) {
mCarLatLng = new MogoLatLng( lat, lon );
}
/**
* 根据经纬度请求数据
*
* @param latlng
*/
public void getOnlineCarDataByAutoRefreshStrategy(MogoLatLng latlng) {
UiThreadHandler.removeCallbacks(runnable);
getOnlineCarDataImpl(latlng, false, false, ServiceConst.ONLINE_SEARCH_LIMIT, ServiceConst.ONLINE_SEARCH_RADIUS, false);
public void getOnlineCarDataByAutoRefreshStrategy( MogoLatLng latlng ) {
UiThreadHandler.removeCallbacks( runnable );
getOnlineCarDataImpl( latlng, false, false, ServiceConst.ONLINE_SEARCH_LIMIT, ServiceConst.ONLINE_SEARCH_RADIUS, false );
}
/**
@@ -519,19 +541,19 @@ public class MapMarkerManager implements IMogoMarkerClickListener,
* @param limit
* @param radius
*/
public void getOnlineCarDataByVoiceControl(MogoLatLng latLng,
boolean onlyFocus,
boolean onlySameCity,
int limit,
int radius) {
UiThreadHandler.removeCallbacks(runnable);
getOnlineCarDataImpl(latLng, onlyFocus, onlySameCity, limit, radius, true);
public void getOnlineCarDataByVoiceControl( MogoLatLng latLng,
boolean onlyFocus,
boolean onlySameCity,
int limit,
int radius ) {
UiThreadHandler.removeCallbacks( runnable );
getOnlineCarDataImpl( latLng, onlyFocus, onlySameCity, limit, radius, true );
}
private Runnable runnable = new Runnable() {
@Override
public void run() {
getOnlineCarDataImpl(mCarLatLng, false, false, ServiceConst.ONLINE_SEARCH_LIMIT, ServiceConst.ONLINE_SEARCH_RADIUS, false);
getOnlineCarDataImpl( mCarLatLng, false, false, ServiceConst.ONLINE_SEARCH_LIMIT, ServiceConst.ONLINE_SEARCH_RADIUS, false );
}
};
@@ -539,7 +561,7 @@ public class MapMarkerManager implements IMogoMarkerClickListener,
* 移除绘制
*/
public void stopAutoRefresh() {
UiThreadHandler.removeCallbacks(runnable);
UiThreadHandler.removeCallbacks( runnable );
}
/**
@@ -558,81 +580,81 @@ public class MapMarkerManager implements IMogoMarkerClickListener,
boolean onlySameCity,
int limit,
int radius,
boolean fitBounds) {
boolean fitBounds ) {
if (DebugConfig.isNeedUploadCoordinatesDurationInTime()) {
if ( DebugConfig.isNeedUploadCoordinatesDurationInTime() ) {
return;
}
if (DebugConfig.isDebug()) {
if (!DebugConfig.isRequestOnlineCarData()) {
if ( DebugConfig.isDebug() ) {
if ( !DebugConfig.isRequestOnlineCarData() ) {
return;
}
}
if (mCarLatLng == null) {
if ( mCarLatLng == null ) {
mCarLatLng = latLng;
}
if (latLng == null) {
if ( latLng == null ) {
return;
}
if (ignoreOnlineCarRequest()) {
if ( ignoreOnlineCarRequest() ) {
removeCarMarkers();
return;
}
mRefreshModel.queryOnLineCarWithRoute(latLng, onlyFocus, onlySameCity, radius, limit, false, new RefreshCallback() {
mRefreshModel.queryOnLineCarWithRoute( latLng, onlyFocus, onlySameCity, radius, limit, 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;
}
List<MarkerOnlineCar> onlineCarList = result.getOnlineCar();
if (MarkerServiceHandler.getMogoStatusManager().isSearchUIShow()) {
List< MarkerOnlineCar > onlineCarList = result.getOnlineCar();
if ( MarkerServiceHandler.getMogoStatusManager().isSearchUIShow() ) {
return;
}
final int size = onlineCarList == null ? 0 : onlineCarList.size();
if (mMarkerDisplayBounds == null) {
if ( mMarkerDisplayBounds == null ) {
mMarkerDisplayBounds = new Rect(
ResourcesHelper.getDimensionPixelSize(AbsMogoApplication.getApp(), R.dimen.module_service_marker_bounds_leftMargin),
ResourcesHelper.getDimensionPixelSize(AbsMogoApplication.getApp(), R.dimen.module_service_marker_bounds_topMargin),
ResourcesHelper.getDimensionPixelSize(AbsMogoApplication.getApp(), R.dimen.module_service_marker_bounds_rightMargin),
ResourcesHelper.getDimensionPixelSize(AbsMogoApplication.getApp(), R.dimen.module_service_marker_bounds_bottomMargin)
ResourcesHelper.getDimensionPixelSize( AbsMogoApplication.getApp(), R.dimen.module_service_marker_bounds_leftMargin ),
ResourcesHelper.getDimensionPixelSize( AbsMogoApplication.getApp(), R.dimen.module_service_marker_bounds_topMargin ),
ResourcesHelper.getDimensionPixelSize( AbsMogoApplication.getApp(), R.dimen.module_service_marker_bounds_rightMargin ),
ResourcesHelper.getDimensionPixelSize( AbsMogoApplication.getApp(), R.dimen.module_service_marker_bounds_bottomMargin )
);
}
runOnTargetThread(() -> {
trackData(size);
OnlineCarDrawer.getInstance().drawOnlineCarMarkers(onlineCarList, Integer.MAX_VALUE, fitBounds, fitBounds, mMarkerDisplayBounds, latLng, MapMarkerManager.this);
UiThreadHandler.postDelayed(runnable, SMOOTH_DURATION * 1000);
});
runOnTargetThread( () -> {
trackData( size );
OnlineCarDrawer.getInstance().drawOnlineCarMarkers( onlineCarList, Integer.MAX_VALUE, fitBounds, fitBounds, mMarkerDisplayBounds, latLng, MapMarkerManager.this );
UiThreadHandler.postDelayed( runnable, SMOOTH_DURATION * 1000 );
} );
}
private void trackData(int size) {
private void trackData( int size ) {
JSONArray array = new JSONArray();
JSONObject object = new JSONObject();
try {
object.put("type", "10000");
object.put("num", size);
array.put(object);
} catch (JSONException e) {
object.put( "type", "10000" );
object.put( "num", size );
array.put( object );
} catch ( JSONException e ) {
e.printStackTrace();
}
if (array.length() == 0) {
if ( array.length() == 0 ) {
return;
}
final Map<String, Object> properties = new HashMap<>();
properties.put("data", array.toString());
MarkerServiceHandler.getMogoAnalytics().track("v2x_data_get", properties);
final Map< String, Object > properties = new HashMap<>();
properties.put( "data", array.toString() );
MarkerServiceHandler.getMogoAnalytics().track( "v2x_data_get", properties );
}
});
} );
}
/**
@@ -648,11 +670,12 @@ public class MapMarkerManager implements IMogoMarkerClickListener,
* 移除在线车辆 marker
*/
private void removeCarMarkers() {
MarkerServiceHandler.getMarkerManager().removeMarkers(ModuleNames.CARD_TYPE_USER_DATA);
MarkerServiceHandler.getMarkerManager().removeMarkers( ModuleNames.CARD_TYPE_USER_DATA );
}
/**
* 以下条件,不绘制 marker
*
* @return
*/
private boolean ignoreDrawRequest() {
@@ -663,11 +686,11 @@ public class MapMarkerManager implements IMogoMarkerClickListener,
|| MarkerServiceHandler.getApis().getStatusManagerApi().isVrMode();
}
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() {
@@ -675,25 +698,25 @@ public class MapMarkerManager implements IMogoMarkerClickListener,
}
@Override
public void onBizActionDone(String biz, int position, Object data) {
if (data instanceof MarkerShowEntity && ((MarkerShowEntity) data).getMarker() != null) {
switchMarkerOpenStatus(((MarkerShowEntity) data).getMarker());
public void onBizActionDone( String biz, int position, Object data ) {
if ( data instanceof MarkerShowEntity && ( ( MarkerShowEntity ) data ).getMarker() != null ) {
switchMarkerOpenStatus( ( ( MarkerShowEntity ) data ).getMarker() );
} else {
IMogoMarkerManager markerManager = MarkerServiceHandler.getMarkerManager();
List<IMogoMarker> 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) {
IMogoMarker marker = markers.get( position );
switchMarkerOpenStatus( marker );
} catch ( Exception e ) {
}
}
}
}
@Override
public void onMapUiModeChanged(EnumMapUI mapUI) {
switch (mapUI) {
public void onMapUiModeChanged( EnumMapUI mapUI ) {
switch ( mapUI ) {
case Type_Light:
case Type_Night:
redrawMarkerByStyleChanged();
@@ -705,12 +728,12 @@ public class MapMarkerManager implements IMogoMarkerClickListener,
* 重绘内容
*/
public void redrawMarkerByStyleChanged() {
if (mLastDataResult != null) {
runOnTargetThread(() -> {
MarkerServiceHandler.getMarkerManager().removeMarkers(ModuleNames.CARD_TYPE_ROAD_CONDITION);
drawMarkerByCurrentType(mLastDataResult);
if ( mLastDataResult != null ) {
runOnTargetThread( () -> {
MarkerServiceHandler.getMarkerManager().removeMarkers( ModuleNames.CARD_TYPE_ROAD_CONDITION );
drawMarkerByCurrentType( mLastDataResult );
mLastCheckMarker = null;
});
} );
}
}
@@ -718,8 +741,8 @@ public class MapMarkerManager implements IMogoMarkerClickListener,
* 关闭当前点击过的 marker
*/
public void onCloseCurrentSelectedMarker() {
if (mLastCheckMarker != null && !mLastCheckMarker.isDestroyed()) {
closeMarker(mLastCheckMarker);
if ( mLastCheckMarker != null && !mLastCheckMarker.isDestroyed() ) {
closeMarker( mLastCheckMarker );
mLastCheckMarker = null;
}
}