diff --git a/foudations/mogo-base-websocket-sdk/src/main/java/com/mogo/base/websocket/WebSocketManager.java b/foudations/mogo-base-websocket-sdk/src/main/java/com/mogo/base/websocket/WebSocketManager.java index 5e110bb8ea..20eeee20b7 100644 --- a/foudations/mogo-base-websocket-sdk/src/main/java/com/mogo/base/websocket/WebSocketManager.java +++ b/foudations/mogo-base-websocket-sdk/src/main/java/com/mogo/base/websocket/WebSocketManager.java @@ -2,6 +2,7 @@ package com.mogo.base.websocket; import android.content.Context; import android.os.SystemClock; +import android.util.Log; import androidx.annotation.Keep; @@ -183,7 +184,7 @@ public class WebSocketManager implements IMogoWebSocketManager, ISocketMsgSettin @Override public void handleMessage(String message) { - Logger.d(TAG, "websocket received msg = " + message); + Logger.d(TAG, "websocket received msg = %s", message); WebSocketData webSocketData = GsonUtil.objectFromJson(message, WebSocketData.class); int msgType = webSocketData.getMsgType(); Logger.d(TAG, "websocket received msg type = " + msgType); @@ -195,9 +196,11 @@ public class WebSocketManager implements IMogoWebSocketManager, ISocketMsgSettin while (iterator.hasNext()) { IMogoOnWebSocketMessageListener listener = iterator.next(); if (listener != null) { - Logger.d(TAG, "received msgId = " + webSocketData.getSeq() + ", content = " + webSocketData.getData()); + Logger.d(TAG, "received msgId = " + webSocketData.getSeq() + ", content = %s", webSocketData.getData()); Object receiveObj = GsonUtil.objectFromJson(webSocketData.getData(),listener.target()); + final long start = System.currentTimeMillis(); listener.onMsgReceived(receiveObj); + Logger.d("WebSocketManager-sdk-timer", "cost " + (System.currentTimeMillis() - start) + "ms"); } } } diff --git a/foudations/mogo-utils/src/main/java/com/mogo/utils/CoordinateUtils.java b/foudations/mogo-utils/src/main/java/com/mogo/utils/CoordinateUtils.java index cccab09de0..0b7281621a 100644 --- a/foudations/mogo-utils/src/main/java/com/mogo/utils/CoordinateUtils.java +++ b/foudations/mogo-utils/src/main/java/com/mogo/utils/CoordinateUtils.java @@ -76,4 +76,44 @@ public class CoordinateUtils { return var10000; } + /** + * @param lon1 + * @param lat1 + * @param lon2 + * @param lat2 + * @return 两坐标的距离 单位:米(M) + */ + public static float calculateLineDistance( double lon1, double lat1, double lon2, double lat2 ) { + try { + double var2 = lon1; + double var4 = lat1; + double var6 = lon2; + double var8 = lat2; + var2 *= 0.01745329251994329D; + var4 *= 0.01745329251994329D; + var6 *= 0.01745329251994329D; + var8 *= 0.01745329251994329D; + double var10 = Math.sin( var2 ); + double var12 = Math.sin( var4 ); + double var14 = Math.cos( var2 ); + double var16 = Math.cos( var4 ); + double var18 = Math.sin( var6 ); + double var20 = Math.sin( var8 ); + double var22 = Math.cos( var6 ); + double var24 = Math.cos( var8 ); + double[] var28 = new double[3]; + double[] var29 = new double[3]; + var28[0] = var16 * var14; + var28[1] = var16 * var10; + var28[2] = var12; + var29[0] = var24 * var22; + var29[1] = var24 * var18; + var29[2] = var20; + return ( float ) ( Math.asin( Math.sqrt( ( var28[0] - var29[0] ) * ( var28[0] - var29[0] ) + ( var28[1] - var29[1] ) * ( var28[1] - var29[1] ) + ( var28[2] - var29[2] ) * ( var28[2] - var29[2] ) ) / 2.0D ) * 1.27420015798544E7D ); + } catch ( Throwable var26 ) { + var26.printStackTrace(); + return 0.0F; + } + } + } diff --git a/libraries/map-custom/build.gradle b/libraries/map-custom/build.gradle index b54e6b7372..7be264997b 100644 --- a/libraries/map-custom/build.gradle +++ b/libraries/map-custom/build.gradle @@ -67,7 +67,7 @@ dependencies { implementation project(':foudations:mogo-commons') } - implementation 'com.zhidaoauto.machine:map:1.0.0-vr-7.7.7' + implementation 'com.zhidaoauto.machine:map:1.0.0-vr-7.8.1' // implementation 'com.zhidaoauto.machine:map:1.0.0-vr-7.4.5-log-1' } diff --git a/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/AMapViewWrapper.java b/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/AMapViewWrapper.java index 27fd4f0f76..12afb20a67 100644 --- a/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/AMapViewWrapper.java +++ b/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/AMapViewWrapper.java @@ -384,6 +384,9 @@ public class AMapViewWrapper implements IMogoMapView, @Override public void moveToCenter( MogoLatLng latLng, boolean animate ) { + if ( mCurrentUI == EnumMapUI.Type_VR ) { + return; + } Logger.d( TAG, "move to center %s", latLng ); if ( latLng == null || latLng.lat == 0.0d || latLng.lng == 0.0d ) { Logger.e( TAG, "latlng = null or is illegal" ); @@ -399,6 +402,11 @@ public class AMapViewWrapper implements IMogoMapView, @Override public void showMyLocation( boolean visible ) { Logger.d( TAG, "showMyLocation1 %s", visible ); + + if ( mCurrentUI == EnumMapUI.Type_VR ) { + return; + } + if ( visible && NaviClient.getInstance( getContext() ).isNaviing() ) { return; } @@ -463,8 +471,8 @@ public class AMapViewWrapper implements IMogoMapView, @Override public void loseLockMode() { - if ( DebugConfig.isDebug() ) { - Logger.d( TAG, Log.getStackTraceString( new Throwable() ) ); + if ( mCurrentUI == EnumMapUI.Type_VR ) { + return; } Logger.d( TAG, "解锁锁车" ); mMapView.getMapAutoViewHelper().setLockMode( false ); @@ -519,6 +527,9 @@ public class AMapViewWrapper implements IMogoMapView, @Override public void setPointToCenter( double mapCenterX, double mapCenterY ) { if ( checkAMapView() ) { + if ( mCurrentUI == EnumMapUI.Type_VR ) { + return; + } Logger.d( TAG, "setPointToCenter(%s, %s)", mapCenterX, mapCenterY ); mMapView.getMapAutoViewHelper().setPointToCenter( ( float ) mapCenterX, ( float ) mapCenterY ); } @@ -596,9 +607,6 @@ public class AMapViewWrapper implements IMogoMapView, } Logger.i( TAG, "showBounds:%s -%s-%s- %b ", tag, carPosition.toString(), bound.toShortString(), lockCarPosition ); try { - if ( DebugConfig.isDebug() ) { - Logger.d( TAG, Log.getStackTraceString( new Throwable() ) ); - } LatLngBounds latLngBounds = MogoMapUtils.getLatLngBounds( carPosition, lonLats, lockCarPosition ); if ( !lockCarPosition ) { loseLockMode(); @@ -642,6 +650,9 @@ public class AMapViewWrapper implements IMogoMapView, @Override public void setCarCursorOption( CarCursorOption option ) { + if ( mCurrentUI == EnumMapUI.Type_VR ) { + return; + } if ( mCarCursorOption != null && mCarCursorOption != DEFAULT_OPTION ) { mCarCursorOption.destroy(); } diff --git a/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/CustomMapApiBuilder.java b/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/CustomMapApiBuilder.java index 5660221fb5..6468999171 100644 --- a/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/CustomMapApiBuilder.java +++ b/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/CustomMapApiBuilder.java @@ -100,12 +100,6 @@ class CustomMapApiBuilder implements IMogoMapApiBuilder { .setPointToCenter( 0.734375f, 0.5f ) .setStyleMode( MapParams.MAP_STYLE_NIGHT ), NavParams.Companion.init() ); MapAutoView mapAutoView = new MapAutoView(context); - Logger.w(TAG, "mapAutoView==" + mapAutoView); - try { - Thread.sleep(1000); - } catch (InterruptedException e) { - e.printStackTrace(); - } IMogoMapView mapView = new AMapViewWrapper(mapAutoView); return mapView; } diff --git a/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/marker/AMapMarkerWrapper.java b/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/marker/AMapMarkerWrapper.java index 949dc5ac62..1d7da13ced 100644 --- a/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/marker/AMapMarkerWrapper.java +++ b/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/marker/AMapMarkerWrapper.java @@ -61,7 +61,6 @@ public class AMapMarkerWrapper implements IMogoMarker, Observer { marker.setMObject( this ); MarkerWrapperClickHelper.getInstance().setMogoMarkerMap( marker.getId(), this ); } - marker.setSaveBitmapEnable( true ); setObject( mogoMarkerOptions.getObject() ); this.mMogoMarkerOptions = mogoMarkerOptions; mMogoMarkerOptions.addObserver( this ); @@ -141,12 +140,12 @@ public class AMapMarkerWrapper implements IMogoMarker, Observer { if ( icons == null || icons.isEmpty() ) { return; } - ArrayList descriptors = new ArrayList<>(); + ArrayList< BitmapDescriptor > descriptors = new ArrayList<>(); for ( Bitmap icon : icons ) { if ( icon == null || icon.isRecycled() ) { continue; } - descriptors.add( BitmapDescriptorFactory.INSTANCE.fromBitmap(icon)); + descriptors.add( BitmapDescriptorFactory.INSTANCE.fromBitmap( icon ) ); } if ( descriptors.isEmpty() ) { return; @@ -265,16 +264,16 @@ public class AMapMarkerWrapper implements IMogoMarker, Observer { @Override public void setOnMarkerClickListener( IMogoMarkerClickListener listener ) { mMogoMarkerClickListener = listener; - if ( mMarker != null ) { - mMarker.setOnMarkClickListener( new OnMarkClickListener() { - @Override - public void onMarkClick( @NotNull Marker marker ) { - if ( mMogoMarkerClickListener != null ) { - mMogoMarkerClickListener.onMarkerClicked( AMapMarkerWrapper.this ); - } - } - } ); - } +// if ( mMarker != null ) { +// mMarker.setOnMarkClickListener( new OnMarkClickListener() { +// @Override +// public void onMarkClick( @NotNull Marker marker ) { +// if ( mMogoMarkerClickListener != null ) { +// mMogoMarkerClickListener.onMarkerClicked( AMapMarkerWrapper.this ); +// } +// } +// } ); +// } } @Override @@ -505,9 +504,14 @@ public class AMapMarkerWrapper implements IMogoMarker, Observer { @Override public void use3DResource( int model3D ) { try { - mMarker.setMarkerOptions( mMarker.getMarkeOptions().marker3DIcon( model3D ) ); + mMarker.setMarkerOptions( mMarker.getMarkeOptions().anchorColor("#00FF00").marker3DIcon( model3D ) ); } catch ( Exception e ) { Logger.e( TAG, e, "use3DResource" ); } } + + @Override + public void setAnchorColor( String anchorColor ) { + mMarker.setMarkerOptions( mMarker.getMarkeOptions().anchorColor( anchorColor ) ); + } } diff --git a/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/utils/ObjectUtils.java b/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/utils/ObjectUtils.java index 29574c7749..9bc315a7b6 100644 --- a/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/utils/ObjectUtils.java +++ b/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/utils/ObjectUtils.java @@ -1,6 +1,7 @@ package com.mogo.map.impl.custom.utils; import android.graphics.Bitmap; +import android.graphics.Color; import android.text.TextUtils; import android.view.View; @@ -89,6 +90,11 @@ public class ObjectUtils { } if (opt.getIcon3DRes() != 0) { markerOptions.marker3DIcon(opt.getIcon3DRes()); + try { + Color.parseColor(opt.getAnchorColor()); + markerOptions.anchorColor( opt.getAnchorColor() ); + } catch ( Exception e ) { + } } if (!TextUtils.isEmpty(opt.getTitle())) { markerOptions.title(opt.getTitle()); diff --git a/libraries/mogo-map-api/src/main/java/com/mogo/map/marker/IMogoMarker.java b/libraries/mogo-map-api/src/main/java/com/mogo/map/marker/IMogoMarker.java index b00ed1c4bf..54a1e1c30f 100644 --- a/libraries/mogo-map-api/src/main/java/com/mogo/map/marker/IMogoMarker.java +++ b/libraries/mogo-map-api/src/main/java/com/mogo/map/marker/IMogoMarker.java @@ -349,4 +349,12 @@ public interface IMogoMarker { default void use3DResource( @RawRes int model3D ) { } + + /** + * 设置3D车模颜色 + * @param anchorColor + */ + default void setAnchorColor(String anchorColor){ + + } } 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 fbff166089..aba47f247f 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 @@ -75,6 +75,7 @@ public class MogoMarkerOptions extends Observable { private @RawRes int mIcon3DRes = 0; + private String mAnchorColor; private boolean mIs3DMode = false; @@ -233,6 +234,11 @@ public class MogoMarkerOptions extends Observable { return this; } + public MogoMarkerOptions anchorColor( String anchorColor ) { + this.mAnchorColor = anchorColor; + return this; + } + public double getLatitude() { return latitude; } @@ -334,6 +340,10 @@ public class MogoMarkerOptions extends Observable { return mIcon3DRes; } + public String getAnchorColor() { + return mAnchorColor; + } + @Override public String toString() { return "MogoMarkerOptions{" + diff --git a/modules/mogo-module-common/src/main/java/com/mogo/module/common/drawer/AdasRecognizedResultDrawer.java b/modules/mogo-module-common/src/main/java/com/mogo/module/common/drawer/AdasRecognizedResultDrawer.java index 9b06caa126..768b3c522b 100644 --- a/modules/mogo-module-common/src/main/java/com/mogo/module/common/drawer/AdasRecognizedResultDrawer.java +++ b/modules/mogo-module-common/src/main/java/com/mogo/module/common/drawer/AdasRecognizedResultDrawer.java @@ -13,10 +13,8 @@ import com.mogo.map.marker.IMogoMarker; import com.mogo.map.marker.MogoMarkerOptions; import com.mogo.module.common.MogoApisHandler; import com.mogo.module.common.R; -import com.mogo.module.common.constants.AdasRecognizedType; import com.mogo.module.common.constants.DataTypes; import com.mogo.service.adas.entity.ADASRecognizedListResult; -import com.mogo.utils.ViewUtils; import java.util.ArrayList; import java.util.HashMap; @@ -68,8 +66,6 @@ class AdasRecognizedResultDrawer extends BaseDrawer { // adas marker 缓存 private Map< String, IMogoMarker > mAdasRecognizedMarkersCaches = new ConcurrentHashMap<>(); - private boolean mIsVrMode = false; - public void renderAdasRecognizedResult( List< ADASRecognizedListResult > resultList, boolean machineVision, double curSpeed ) { if ( resultList == null || resultList.isEmpty() ) { MogoApisHandler.getInstance().getApis().getMapServiceApi().getMarkerManager( mContext ).removeMarkers( DataTypes.TYPE_MARKER_ADAS ); @@ -100,17 +96,6 @@ class AdasRecognizedResultDrawer extends BaseDrawer { continue; } mAdasRecognizedMarkersCaches.put( uniqueKey, marker ); - } else { - if ( mIsVrMode != MogoApisHandler.getInstance().getApis().getStatusManagerApi().isVrMode() ) { - mIsVrMode = MogoApisHandler.getInstance().getApis().getStatusManagerApi().isVrMode(); - if ( mIsVrMode ) { - marker.getMogoMarkerOptions().set3DMode( true ); - marker.use3DResource( getVrModel() ); - } else { - marker.getMogoMarkerOptions().set3DMode( false ); - marker.setIcon( ViewUtils.fromView( inflateView( recognizedListResult, machineVision, 0 ) ) ); - } - } } MogoLatLng lastPosition = mLastPositions.get( uniqueKey ); @@ -124,8 +109,6 @@ class AdasRecognizedResultDrawer extends BaseDrawer { if ( latLon == null ) { continue; } -// double targetPos[] = transformGcj02ToFitMap( latLon.lat, latLon.lon ); -// points.add( endLatLon = new MogoLatLng( targetPos[POS_LAT], targetPos[POS_LON] ) ); points.add( endLatLon = new MogoLatLng( latLon.lat, latLon.lon ) ); } @@ -137,8 +120,6 @@ class AdasRecognizedResultDrawer extends BaseDrawer { continue; } points.add( lastPosition ); -// double targetPos[] = transformGcj02ToFitMap( latLon.lat, latLon.lon ); -// points.add( endLatLon = new MogoLatLng( targetPos[POS_LAT], targetPos[POS_LON] ) ); points.add( endLatLon = new MogoLatLng( latLon.lat, latLon.lon ) ); } mLastPositions.put( uniqueKey, endLatLon ); @@ -193,22 +174,13 @@ class AdasRecognizedResultDrawer extends BaseDrawer { return null; } -// double targetPos[] = transformGcj02ToFitMap( recognizedListResult.latLonList.get( 0 ).lat, recognizedListResult.latLonList.get( 0 ).lon ); MogoMarkerOptions options = new MogoMarkerOptions() .owner( DataTypes.TYPE_MARKER_ADAS ) .anchor( 0.5f, 0.5f ) + .set3DMode( true ) + .icon3DRes( getVrModel() ) .rotate( ( float ) recognizedListResult.heading ) -// .position( new MogoLatLng( targetPos[POS_LAT], targetPos[POS_LON] ) ); .position( new MogoLatLng( recognizedListResult.latLonList.get( 0 ).lat, recognizedListResult.latLonList.get( 0 ).lon ) ); - - if ( mIsVrMode = MogoApisHandler.getInstance().getApis().getStatusManagerApi().isVrMode() ) { - options.set3DMode( true ); - options.icon3DRes( getVrModel() ); - } else { - options.set3DMode( false ); - options.icon( inflateView( recognizedListResult, machineVision, curSpeed ) ); - } - return MogoApisHandler.getInstance().getApis().getMapServiceApi().getMarkerManager( mContext ).addMarker( DataTypes.TYPE_MARKER_ADAS, options ); } diff --git a/modules/mogo-module-common/src/main/java/com/mogo/module/common/drawer/SnapshotSetDataDrawer.java b/modules/mogo-module-common/src/main/java/com/mogo/module/common/drawer/SnapshotSetDataDrawer.java index 64c1533873..19b0c39582 100644 --- a/modules/mogo-module-common/src/main/java/com/mogo/module/common/drawer/SnapshotSetDataDrawer.java +++ b/modules/mogo-module-common/src/main/java/com/mogo/module/common/drawer/SnapshotSetDataDrawer.java @@ -1,7 +1,6 @@ package com.mogo.module.common.drawer; import android.content.Context; -import android.os.SystemClock; import android.text.TextUtils; import android.view.LayoutInflater; import android.view.View; @@ -9,15 +8,20 @@ import android.widget.ImageView; import com.mogo.commons.AbsMogoApplication; import com.mogo.map.MogoLatLng; +import com.mogo.map.location.MogoLocation; import com.mogo.map.marker.IMogoMarker; import com.mogo.map.marker.IMogoMarkerClickListener; import com.mogo.map.marker.MogoMarkerOptions; +import com.mogo.map.uicontroller.MapCameraPosition; import com.mogo.module.common.MogoApisHandler; import com.mogo.module.common.R; import com.mogo.module.common.api.CallChatApi; import com.mogo.module.common.constants.DataTypes; import com.mogo.module.common.entity.CloudRoadData; import com.mogo.module.common.entity.MogoSnapshotSetData; +import com.mogo.service.statusmanager.IMogoStatusChangedListener; +import com.mogo.service.statusmanager.StatusDescriptor; +import com.mogo.utils.ThreadPoolService; import com.mogo.utils.ViewUtils; import com.mogo.utils.logger.Logger; import com.zhidao.carchattingprovider.ICarsChattingProvider; @@ -36,16 +40,19 @@ public * * 云端数据绘制 */ -class SnapshotSetDataDrawer extends BaseDrawer implements IMogoMarkerClickListener { +class SnapshotSetDataDrawer extends BaseDrawer implements IMogoMarkerClickListener, IMogoStatusChangedListener { private static final String TAG = "SnapshotSetDataDrawer"; private static volatile SnapshotSetDataDrawer sInstance; private Context mContext; + private boolean mChangeCarModeStatus; private SnapshotSetDataDrawer() { mContext = AbsMogoApplication.getApp(); + MogoApisHandler.getInstance().getApis() + .getStatusManagerApi().registerStatusChangedListener( TAG, StatusDescriptor.VR_MODE, this ); } public static SnapshotSetDataDrawer getInstance() { @@ -71,12 +78,38 @@ class SnapshotSetDataDrawer extends BaseDrawer implements IMogoMarkerClickListen // 云端 marker 缓存 private Map< String, IMogoMarker > mCloudSnapshotMarkersCaches = new ConcurrentHashMap<>(); - private Map< String, MogoLatLng > mLastPositions = new ConcurrentHashMap<>(); + private Map< String, CloudRoadData > mLastPositions = new ConcurrentHashMap<>(); private boolean mIsVrMode = false; - private long mLastReceiveTime = 0L; - private long mAnimationDuration = 500L; +// private long mLastReceiveTime = 0L; +// private long mAnimationDuration = 500L; + + @Override + public void onStatusChanged( StatusDescriptor descriptor, boolean isTrue ) { + Logger.d( TAG, "%s - %s", descriptor, isTrue ); + mChangeCarModeStatus = true; + ThreadPoolService.execute( () -> { + clearOldStyleMarkers(); + } ); + } + + private void clearOldStyleMarkers() { + try { + MogoApisHandler.getInstance().getApis() + .getMapServiceApi().getMarkerManager( mContext ) + .removeMarkers( DataTypes.TYPE_MARKER_CLOUD_DATA ); + mLastPositions.clear(); + mCloudSnapshotMarkersCaches.clear(); + } catch ( Exception e ) { + } + try { + MogoApisHandler.getInstance().getApis() + .getMapServiceApi().getMarkerManager( mContext ) + .removeMarkers( DataTypes.TYPE_MARKER_ADAS ); + } catch ( Exception e ) { + } + } /** * 其他车辆、rsu 车辆数据 @@ -85,22 +118,18 @@ class SnapshotSetDataDrawer extends BaseDrawer implements IMogoMarkerClickListen */ public void renderSnapshotData( MogoSnapshotSetData data, boolean machineVision ) { - if ( mLastReceiveTime != 0 ) { - mAnimationDuration = SystemClock.elapsedRealtime() - mLastReceiveTime; - } else { - mAnimationDuration = 500L; + recordTimeFlag(); + if ( !MogoApisHandler.getInstance().getApis().getStatusManagerApi().isMainPageLaunched() ) { + return; } - mLastReceiveTime = SystemClock.elapsedRealtime(); if ( data == null || ( ( data.getAllList() == null || data.getAllList().isEmpty() ) && ( data.getNearList() == null || data.getNearList().isEmpty() ) ) ) { MogoApisHandler.getInstance().getApis().getMapServiceApi().getMarkerManager( AbsMogoApplication.getApp() ).removeMarkers( DataTypes.TYPE_MARKER_CLOUD_DATA ); return; } - filterData( data.getAllList() ); List< CloudRoadData > allDatumsList = new ArrayList<>(); - allDatumsList.addAll( data.getAllList() ); - purgeCloudSnapshotData( allDatumsList ); + prepareData( data.getAllList(), allDatumsList ); for ( CloudRoadData cloudRoadData : allDatumsList ) { if ( cloudRoadData == null ) { continue; @@ -121,7 +150,6 @@ class SnapshotSetDataDrawer extends BaseDrawer implements IMogoMarkerClickListen if ( mCloudSnapshotMarkersCaches.containsKey( uniqueKey ) ) { marker = mCloudSnapshotMarkersCaches.get( uniqueKey ); } - MogoLatLng target = new MogoLatLng( cloudRoadData.getLat(), cloudRoadData.getLon() ); if ( marker == null || marker.isDestroyed() ) { marker = drawSnapshotDataMarker( cloudRoadData, machineVision, data.curSpeed ); if ( marker == null ) { @@ -132,42 +160,81 @@ class SnapshotSetDataDrawer extends BaseDrawer implements IMogoMarkerClickListen } mCloudSnapshotMarkersCaches.put( uniqueKey, marker ); } else { - if ( mIsVrMode != MogoApisHandler.getInstance().getApis().getStatusManagerApi().isVrMode() ) { + if ( mChangeCarModeStatus ) { + mChangeCarModeStatus = false; mIsVrMode = MogoApisHandler.getInstance().getApis().getStatusManagerApi().isVrMode(); if ( mIsVrMode ) { - Logger.d( TAG, "3D模型" ); + Logger.d( TAG, "3D模型-%s", uniqueKey ); marker.getMogoMarkerOptions().set3DMode( true ); marker.use3DResource( getVrModel( cloudRoadData ) ); } else { - Logger.d( TAG, "2D贴图" ); + Logger.d( TAG, "2D贴图-%s", uniqueKey ); marker.getMogoMarkerOptions().set3DMode( false ); marker.setIcon( ViewUtils.fromView( inflateView( cloudRoadData, machineVision, 0 ) ) ); } } - MogoLatLng lastPosition = mLastPositions.get( uniqueKey ); -// double targetPos[] = transformGcj02ToFitMap( target.lat, target.lon ); -// double lastPos[] = transformGcj02ToFitMap( lastPosition.lat, lastPosition.lon ); + CloudRoadData lastPosition = mLastPositions.get( uniqueKey ); if ( lastPosition != null ) { - if ( lastPosition.equals( target ) ) { + if ( lastPosition.equals( cloudRoadData ) ) { + if ( ( ( int ) cloudRoadData.getSpeed() ) == 0 ) { + MapCameraPosition position = MogoApisHandler.getInstance().getApis().getMapServiceApi().getMapUIController().getMapCameraPosition(); + if ( position != null ) { + marker.setRotateAngle( 360 - ( float ) cloudRoadData.getHeading() - position.getBearing() ); + } else { + marker.setRotateAngle( 360 - ( float ) cloudRoadData.getHeading() ); + } + } Logger.d( TAG, "保持位置 - %s", uniqueKey ); - marker.setPosition( lastPosition.lat, lastPosition.lon ); + marker.setPosition( lastPosition.getLat(), lastPosition.getLon() ); } else { List< MogoLatLng > points = new ArrayList<>(); - points.add( new MogoLatLng( lastPosition.lat, lastPosition.lon ) ); - points.add( new MogoLatLng( target.lat, target.lon ) ); - marker.startSmoothInMs( points, mAnimationDuration ); - Logger.d( TAG, "平滑移动 - %s duration = %s", uniqueKey, mAnimationDuration ); + points.add( new MogoLatLng( lastPosition.getLat(), lastPosition.getLon() ) ); + points.add( new MogoLatLng( cloudRoadData.getLat(), cloudRoadData.getLon() ) ); + marker.startSmoothInMs( points, cloudRoadData.getSystemTime() - lastPosition.getSystemTime() ); + Logger.d( TAG, "平滑移动 - %s duration = %s", uniqueKey, cloudRoadData.getSystemTime() - lastPosition.getSystemTime() ); } } else { - marker.setRotateAngle( 360 - ( float ) cloudRoadData.getHeading() ); - marker.setPosition( target.lat, target.lon ); + MapCameraPosition position = MogoApisHandler.getInstance().getApis().getMapServiceApi().getMapUIController().getMapCameraPosition(); + if ( position != null ) { + marker.setRotateAngle( 360 - ( float ) cloudRoadData.getHeading() - position.getBearing() ); + } else { + marker.setRotateAngle( 360 - ( float ) cloudRoadData.getHeading() ); + } + marker.setPosition( cloudRoadData.getLat(), cloudRoadData.getLon() ); } } - mLastPositions.put( uniqueKey, target ); + mLastPositions.put( uniqueKey, cloudRoadData ); } } + /** + * 过滤数据 + * + * @param in 输入集合 + * @param out 输出集合 + */ + private void prepareData( List< CloudRoadData > in, List< CloudRoadData > out ) { + filterData( in ); + out.addAll( in ); + purgeCloudSnapshotData( out ); + } + + /** + * 记录时间 + */ + private void recordTimeFlag() { +// if ( mLastReceiveTime != 0 ) { +// mAnimationDuration = System.currentTimeMillis() - mLastReceiveTime; +// if ( mAnimationDuration > 1000L ) { +// mAnimationDuration = 500L; +// } +// } else { +// mAnimationDuration = 500L; +// } +// mLastReceiveTime = System.currentTimeMillis(); + } + /** * vr 模式下显示合并数据,否则只显示上报位置的车辆 * @@ -245,21 +312,20 @@ class SnapshotSetDataDrawer extends BaseDrawer implements IMogoMarkerClickListen } Logger.d( TAG, "draw marker uniqueKey = %s", data.getUniqueKey() ); -// double coor[] = transformGcj02ToFitMap( data.getLat(), data.getLon() ); MogoMarkerOptions options = new MogoMarkerOptions() .owner( DataTypes.TYPE_MARKER_CLOUD_DATA ) .anchor( 0.5f, 0.5f ) .rotate( ( float ) data.getHeading() ) .object( data ) -// .position( new MogoLatLng( coor[POS_LAT], coor[POS_LON] ) ); .position( new MogoLatLng( data.getLat(), data.getLon() ) ); - if ( mIsVrMode = MogoApisHandler.getInstance().getApis().getStatusManagerApi().isVrMode() ) { + if ( MogoApisHandler.getInstance().getApis().getStatusManagerApi().isVrMode() ) { options.set3DMode( true ); - Logger.d( TAG, "3D模型" ); + options.anchorColor( "#00FF00" ); + Logger.d( TAG, "3D模型 - %s", data.getUniqueKey() ); options.icon3DRes( getVrModel( data ) ); } else { options.set3DMode( false ); - Logger.d( TAG, "2D贴图" ); + Logger.d( TAG, "2D贴图 - %s", data.getUniqueKey() ); options.icon( inflateView( data, machineVision, curSpeed ) ); } return MogoApisHandler.getInstance().getApis().getMapServiceApi().getMarkerManager( mContext ).addMarker( DataTypes.TYPE_MARKER_CLOUD_DATA, options ); diff --git a/modules/mogo-module-common/src/main/java/com/mogo/module/common/drawer/marker/RoadConditionInfoWindow3DAdapter.java b/modules/mogo-module-common/src/main/java/com/mogo/module/common/drawer/marker/RoadConditionInfoWindow3DAdapter.java index 063be888e7..aada64a315 100644 --- a/modules/mogo-module-common/src/main/java/com/mogo/module/common/drawer/marker/RoadConditionInfoWindow3DAdapter.java +++ b/modules/mogo-module-common/src/main/java/com/mogo/module/common/drawer/marker/RoadConditionInfoWindow3DAdapter.java @@ -7,6 +7,7 @@ import com.mogo.map.marker.IMogoInfoWindowAdapter; import com.mogo.map.marker.IMogoMarker; import com.mogo.map.marker.MogoMarkerOptions; import com.mogo.module.common.entity.MarkerShowEntity; +import com.mogo.utils.logger.Logger; public /** @@ -17,6 +18,8 @@ public */ class RoadConditionInfoWindow3DAdapter implements IMogoInfoWindowAdapter { + private static final String TAG = "RoadConditionInfoWindow3DAdapter"; + private MarkerShowEntity mEntity; private Context mContext; private MogoMarkerOptions mOptions; @@ -31,6 +34,7 @@ class RoadConditionInfoWindow3DAdapter implements IMogoInfoWindowAdapter { @Override public View getInfoWindow( IMogoMarker marker ) { + Logger.d( TAG, "创建marker的infowindow" ); IMarkerView creator = MapMarkerAdapter.getMarkerInfoWindowView( mContext, mEntity, mOptions ); return creator.getView(); } diff --git a/modules/mogo-module-common/src/main/java/com/mogo/module/common/entity/CloudLocationInfo.java b/modules/mogo-module-common/src/main/java/com/mogo/module/common/entity/CloudLocationInfo.java index 80d9306709..8c23c046ac 100644 --- a/modules/mogo-module-common/src/main/java/com/mogo/module/common/entity/CloudLocationInfo.java +++ b/modules/mogo-module-common/src/main/java/com/mogo/module/common/entity/CloudLocationInfo.java @@ -3,6 +3,7 @@ package com.mogo.module.common.entity; import android.os.Parcel; import android.os.Parcelable; +import com.mogo.map.MogoLatLng; import com.mogo.utils.CoordinateUtils; import java.util.Objects; diff --git a/modules/mogo-module-common/src/main/java/com/mogo/module/common/entity/CloudRoadData.java b/modules/mogo-module-common/src/main/java/com/mogo/module/common/entity/CloudRoadData.java index 61cc4892ad..d9d46e0918 100644 --- a/modules/mogo-module-common/src/main/java/com/mogo/module/common/entity/CloudRoadData.java +++ b/modules/mogo-module-common/src/main/java/com/mogo/module/common/entity/CloudRoadData.java @@ -133,7 +133,7 @@ public class CloudRoadData implements Parcelable { this.coordinates = coordinates; } - public void setUuid(String uuid) { + public void setUuid( String uuid ) { this.uuid = uuid; } @@ -222,4 +222,19 @@ public class CloudRoadData implements Parcelable { return new CloudRoadData[size]; } }; + + @Override + public boolean equals( Object o ) { + if ( this == o ) { + return true; + } + if ( o == null || getClass() != o.getClass() ) { + return false; + } + CloudRoadData that = ( CloudRoadData ) o; + return Double.compare( that.lat, lat ) == 0 && + Double.compare( that.lon, lon ) == 0; + } + + } diff --git a/modules/mogo-module-common/src/main/res/raw/car.n3d b/modules/mogo-module-common/src/main/res/raw/car.n3d new file mode 100644 index 0000000000..ef51f1ee6a Binary files /dev/null and b/modules/mogo-module-common/src/main/res/raw/car.n3d differ diff --git a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/utils/TopViewAnimHelper.java b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/utils/TopViewAnimHelper.java index 5871641bde..8269900c47 100644 --- a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/utils/TopViewAnimHelper.java +++ b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/utils/TopViewAnimHelper.java @@ -199,6 +199,16 @@ public class TopViewAnimHelper { if (params == null) { throw new IllegalArgumentException("method addTopView params LayoutParams is null"); } + + if (isOuting) { + if (motionViewCache != null) { + motionViewCache.statusListener.beforeViewRemoveAnim(motionViewCache.view); + motionViewCache.statusListener.onViewRemoved(motionViewCache.view); + } + motionViewCache = new MotionViewCache(view, params, statusListener); +// return; + } + if (!viewCaches.contains(view)) { // 判断此view是否已经增加到了顶部view,如果增加过就不增加了 currentAnimatingView = view; @@ -278,6 +288,9 @@ public class TopViewAnimHelper { // 顶部view还没有内容,需要整体下移 viewCaches.add(view); topContainer.addView(view, params); + LayoutParams p = topContainer.getLayoutParams(); + p.height = params.height; + topContainer.setLayoutParams(p); Logger.d(TAG, "整体进入==== view.visibility: " + view.getVisibility() + " view" + ".position: (" + view.getX() + ", " + view.getY() + ") params.width: " + params.width + " params.height: " + params.height); if (statusListenerMap.get(view) != null) { @@ -333,6 +346,7 @@ public class TopViewAnimHelper { } Logger.d("TopViewAnimHelper", "startTopOutAnim====="); if (!isTopViewOut && viewCaches.contains(view)) { + isOuting = true; // 顶部view仅剩一个view,需要整体上移 if (statusListenerMap.get(view) != null) { statusListenerMap.get(view).beforeViewRemoveAnim(view); @@ -341,7 +355,7 @@ public class TopViewAnimHelper { NoMapTopViewShaderHelper.getInstance().hideShader(); - topContainer.animate().translationY(-topContainer.getTranslationY()).setListener(mainAnimListener).start(); + topContainer.animate().translationY(0).setListener(mainAnimListener).start(); checkCameraModePosition(false); @@ -498,6 +512,11 @@ public class TopViewAnimHelper { } topContainer.removeAllViews(); currentAnimatingView = null; + isOuting = false; +// if (motionViewCache != null) { +// startTopInAnim(motionViewCache.view, motionViewCache.params, motionViewCache.statusListener); +// motionViewCache = null; +// } } else { listener = statusListenerMap.get(currentAnimatingView); if (listener != null) { @@ -518,4 +537,21 @@ public class TopViewAnimHelper { } }; + + private MotionViewCache motionViewCache = null; + private boolean isOuting = false; + + private static class MotionViewCache { + private final View view; + private final LayoutParams params; + private final IMogoTopViewStatusListener statusListener; + + public MotionViewCache(View view, LayoutParams params, IMogoTopViewStatusListener statusListener) { + this.view = view; + this.params = params; + this.statusListener = statusListener; + } + + } + } 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 7b2d457dab..7a5e25d61c 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 @@ -158,12 +158,6 @@ public class MapMarkerManager implements IMogoMarkerClickListener, @Override public void onMsgReceived( MogoSnapshotSetData data ) { - if ( data == null ) { - return; - } - if ( !MogoApisHandler.getInstance().getApis().getStatusManagerApi().isMainPageLaunched() ) { - return; - } // if ( !MogoApisHandler.getInstance().getApis().getStatusManagerApi().isVrMode() ) { //// return; // } diff --git a/modules/mogo-module-share/src/main/java/com/mogo/module/share/ShareControl.java b/modules/mogo-module-share/src/main/java/com/mogo/module/share/ShareControl.java index 25ff93e4f4..e006a9cc53 100644 --- a/modules/mogo-module-share/src/main/java/com/mogo/module/share/ShareControl.java +++ b/modules/mogo-module-share/src/main/java/com/mogo/module/share/ShareControl.java @@ -16,6 +16,7 @@ import com.mogo.module.authorize.authprovider.invoke.AuthorizeConstant; import com.mogo.module.authorize.authprovider.invoke.AuthorizeInvokerConstant; import com.mogo.module.authorize.authprovider.module.IMogoAcquireAuthorizeListener; import com.mogo.module.authorize.authprovider.module.IMogoAuthorizeModuleManager; +import com.mogo.module.common.MogoApisHandler; import com.mogo.module.common.dialog.BaseFloatDialog; import com.mogo.module.common.utils.CloudPoiManager; import com.mogo.module.share.bean.FixableButton; @@ -192,13 +193,13 @@ public class ShareControl implements IMogoShareManager, Handler.Callback { // if (!DebugConfig.isLauncher()) { ServiceApisManager.serviceApis.getStatusManagerApi().registerStatusChangedListener(TAG, StatusDescriptor.MAIN_PAGE_RESUME, new IMogoStatusChangedListener() { - @Override - public void onStatusChanged(StatusDescriptor descriptor, boolean isTrue) { - if (!isTrue) { - dismissShareDialog(); - } - } - }); + @Override + public void onStatusChanged(StatusDescriptor descriptor, boolean isTrue) { + if (!isTrue) { + dismissShareDialog(); + } + } + }); // } // if (!DebugConfig.isLauncher()) { @@ -299,6 +300,9 @@ public class ShareControl implements IMogoShareManager, Handler.Callback { } break; case VOICE_CMD_PUB_TROUBLE_HELP: + if (MogoApisHandler.getInstance().getApis().getStatusManagerApi().isVrMode()) { + return; + } if (needAuth()) { goAuth(STEP_AFTER_AUTH_TYPE_SEEK_HELP, TYPE_DENSE_FOG, false); } else { diff --git a/modules/mogo-module-share/src/main/java/com/mogo/module/share/constant/ShareConstants.java b/modules/mogo-module-share/src/main/java/com/mogo/module/share/constant/ShareConstants.java index 9f00b1a153..e9abfd429b 100644 --- a/modules/mogo-module-share/src/main/java/com/mogo/module/share/constant/ShareConstants.java +++ b/modules/mogo-module-share/src/main/java/com/mogo/module/share/constant/ShareConstants.java @@ -23,7 +23,7 @@ public class ShareConstants { // 此处只记录了事故、实时路况、道路积水、道路结冰、浓雾,至于拥堵、交通检查和封路是在extention模块里面管理 public static final String VOICE_CMD_PUB_TROUBLE_HELP = "com.zhidao.auxiliaryDriving" + - ".pubTroubleHelp"; + ".pubTroubleHelp";/*唤醒词 发起故障求助*/ public static final String VOICE_CMD_GO_TO_SHARE = "com.zhidao.share"; public static final String TAG = "/tanlu/ui"; diff --git a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/V2XObuManager.java b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/V2XObuManager.java index 14074c55c8..901c5f05fc 100644 --- a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/V2XObuManager.java +++ b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/V2XObuManager.java @@ -13,6 +13,7 @@ import androidx.localbroadcastmanager.content.LocalBroadcastManager; import com.mogo.commons.debug.DebugConfig; import com.mogo.map.location.MogoLocation; +import com.mogo.module.common.MogoApisHandler; import com.mogo.module.common.entity.V2XMessageEntity; import com.mogo.module.common.entity.V2XObuEventEntity; import com.mogo.module.common.entity.V2XPushMessageEntity; @@ -178,6 +179,10 @@ public class V2XObuManager implements IObuCallback, Handler.Callback { @Override public void onEventInfoCallback(MogoObuEventInfo info) { Logger.d("V2X_OBU_EVENT", "carEventInfo==" + info); + if (MogoApisHandler.getInstance().getApis().getStatusManagerApi().isVrMode()) { + Logger.d("V2X_OBU_EVENT","vr模式下不展示obu事件"); + return; + } Long last = intervalMap.get(info.getTypeCode()); if (last == null) { last = 0L; diff --git a/services/mogo-service/src/main/java/com/mogo/service/impl/adas/MogoADASController.java b/services/mogo-service/src/main/java/com/mogo/service/impl/adas/MogoADASController.java index 6c54f4d423..3f8c687b43 100644 --- a/services/mogo-service/src/main/java/com/mogo/service/impl/adas/MogoADASController.java +++ b/services/mogo-service/src/main/java/com/mogo/service/impl/adas/MogoADASController.java @@ -118,6 +118,9 @@ public class MogoADASController implements IMogoADASController { if ( !MogoApisHandler.getInstance().getApis().getStatusManagerApi().isVrMode() ) { return; } + if ( !MogoApisHandler.getInstance().getApis().getStatusManagerApi().isMainPageLaunched() ) { + return; + } handleAdasRecognizedData( rectInfo ); } @@ -179,9 +182,6 @@ public class MogoADASController implements IMogoADASController { } private void invokeCallbackPerSecond( List< RectInfo > data ) { - if ( !MogoApisHandler.getInstance().getApis().getStatusManagerApi().isMainPageLaunched() ) { - return; - } List< RectInfo > newRef = data; List< ADASRecognizedListResult > recognizedListResults = AdasObjectUtils.regroupData( newRef ); if ( recognizedListResults == null || recognizedListResults.isEmpty() ) { diff --git a/services/mogo-service/src/main/java/com/mogo/service/impl/singleton/SingletonsHolder.java b/services/mogo-service/src/main/java/com/mogo/service/impl/singleton/SingletonsHolder.java index ecf642840e..9356ba3b4a 100644 --- a/services/mogo-service/src/main/java/com/mogo/service/impl/singleton/SingletonsHolder.java +++ b/services/mogo-service/src/main/java/com/mogo/service/impl/singleton/SingletonsHolder.java @@ -13,8 +13,6 @@ import com.mogo.service.network.IMogoNetwork; import com.mogo.service.statusmanager.IMogoMsgCenter; import com.mogo.service.statusmanager.IMogoStatusManager; import com.mogo.service.strategy.IMogoRefreshStrategyController; -import com.mogo.service.windowview.IMogoTopViewManager; -import com.mogo.service.windowview.IMogoWindowManager; import java.util.Map; import java.util.concurrent.ConcurrentHashMap;