diff --git a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/map/CallerMapRoadListenerManager.kt b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/map/CallerMapRoadListenerManager.kt index 620a848581..c7362178d4 100644 --- a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/map/CallerMapRoadListenerManager.kt +++ b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/map/CallerMapRoadListenerManager.kt @@ -1,15 +1,19 @@ package com.mogo.eagle.core.function.call.map +import com.mogo.eagle.core.utilcode.mogo.logger.Logger import com.zhidaoauto.map.data.road.StopLine import java.util.concurrent.ConcurrentHashMap +import kotlin.properties.Delegates object CallerMapRoadListenerManager { interface OnRoadListener { - fun onRoadIdInfo(roadId: String) + fun onRoadIdInfo(roadId: String){} - fun onStopLineInfo(info: StopLine) + fun onStopLineInfo(info: StopLine){} + + fun onRoadChange(cross: Boolean){} } private val listeners by lazy { @@ -42,4 +46,18 @@ object CallerMapRoadListenerManager { entry.value.onStopLineInfo(stopLine) } } + + private var mCross: Boolean by Delegates.observable(false) { _, oldValue, newValue -> + if(oldValue != newValue){ + Logger.d("emArrow","cross : $newValue") + listeners.forEach { entry -> + entry.value.onRoadChange(newValue) + } + } + } + + fun invokeRoadChange(cross: Boolean) { + mCross = cross + + } } \ No newline at end of file diff --git a/libraries/mogo-map/src/main/java/com/mogo/map/AMapViewWrapper.kt b/libraries/mogo-map/src/main/java/com/mogo/map/AMapViewWrapper.kt index 2db6ba4d9f..721f053d0b 100644 --- a/libraries/mogo-map/src/main/java/com/mogo/map/AMapViewWrapper.kt +++ b/libraries/mogo-map/src/main/java/com/mogo/map/AMapViewWrapper.kt @@ -6,22 +6,21 @@ import android.os.Bundle import android.text.TextUtils import android.view.MotionEvent import android.view.View -import chassis.Chassis import com.mogo.eagle.core.data.deva.chain.ChainConstant import com.mogo.eagle.core.data.enums.TrafficTypeEnum import com.mogo.eagle.core.data.map.MogoLatLng import com.mogo.eagle.core.data.map.MogoLocation -import com.mogo.eagle.core.function.call.autopilot.CallerChassisDoorStateListenerManager import com.mogo.eagle.core.function.call.map.CallerMapDataCollectorManager.setIsInit import com.mogo.eagle.core.function.call.map.CallerMapDevaListenerManager.invokeUploadLogFile import com.mogo.eagle.core.function.call.map.CallerMapRoadListenerManager.invokeListenersOnRoadIdGet import com.mogo.eagle.core.function.call.map.CallerMapRoadListenerManager.invokeListenersOnStopLineGet +import com.mogo.eagle.core.function.call.map.CallerMapRoadListenerManager.invokeRoadChange import com.mogo.eagle.core.function.call.map.CallerMapRomaListener.invokeMapRomaStatus import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger.d import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger.e import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger.i import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger.w -import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant +import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_MAP import com.mogo.eagle.core.utilcode.util.ThreadUtils import com.mogo.eagle.core.utilcode.util.UiThreadHandler import com.mogo.map.listener.MogoMapListenerHandler.Companion.mogoMapListenerHandler @@ -79,7 +78,7 @@ class AMapViewWrapper(mMapView: MapAutoView) : IMogoMapView, IMogoMapUIControlle private set init { - i(SceneConstant.M_MAP + TAG, "AMapViewWrapper: init") + i(M_MAP + TAG, "AMapViewWrapper: init") this.mMapView = mMapView initViews() initListeners() @@ -89,7 +88,7 @@ class AMapViewWrapper(mMapView: MapAutoView) : IMogoMapView, IMogoMapUIControlle private fun initViews() { // 初始化首次地图进入的时候的样式, MapAutoApi.INSTANCE.init(context, mapParams);将影响这里的数据 val mapStyle = mMapView.getMapStyleParams()!!.getStyleMode() - d(SceneConstant.M_MAP + TAG, "默认配置地图模式:mapStyle=$mapStyle") + d(M_MAP + TAG, "默认配置地图模式:mapStyle=$mapStyle") when (mapStyle) { MapAutoApi.MAP_STYLE_DAY -> mCurrentUI = EnumMapUI.MAP_STYLE_DAY MapAutoApi.MAP_STYLE_DAY_NAV -> mCurrentUI = EnumMapUI.MAP_STYLE_DAY_NAV @@ -97,7 +96,7 @@ class AMapViewWrapper(mMapView: MapAutoView) : IMogoMapView, IMogoMapUIControlle MapAutoApi.MAP_STYLE_NIGHT_NAV -> mCurrentUI = EnumMapUI.MAP_STYLE_NIGHT_NAV MapAutoApi.MAP_STYLE_DAY_VR -> mCurrentUI = EnumMapUI.MAP_STYLE_DAY_VR MapAutoApi.MAP_STYLE_NIGHT_VR -> mCurrentUI = EnumMapUI.MAP_STYLE_NIGHT_VR - else -> e(SceneConstant.M_MAP + TAG, "暂不支持此地图模式,默认使用VR夜间模式") + else -> e(M_MAP + TAG, "暂不支持此地图模式,默认使用VR夜间模式") } } @@ -112,7 +111,7 @@ class AMapViewWrapper(mMapView: MapAutoView) : IMogoMapView, IMogoMapUIControlle mMapView.setOnMapViewVisualAngleChangeListener(this) mMapView.setOnRoadInfoListener(this, 1) registerLogListener(this, mMapView.getEventController()) - d(SceneConstant.M_MAP + TAG, "initListeners - setOnMapStyleListener - view $mMapView") + d(M_MAP + TAG, "initListeners - setOnMapStyleListener - view $mMapView") } override fun getMapView(): View { @@ -125,17 +124,17 @@ class AMapViewWrapper(mMapView: MapAutoView) : IMogoMapView, IMogoMapUIControlle override fun onCreate(bundle: Bundle?) { mMapView.onCreate(bundle) - d(SceneConstant.M_MAP + TAG, "map onCreate") + d(M_MAP + TAG, "map onCreate") } override fun onResume() { mMapView.onResume() - d(SceneConstant.M_MAP + TAG, "map onResume") + d(M_MAP + TAG, "map onResume") } override fun onPause() { mMapView.onPause() - d(SceneConstant.M_MAP + TAG, "map onPause") + d(M_MAP + TAG, "map onPause") } override fun onDestroy() { @@ -148,12 +147,12 @@ class AMapViewWrapper(mMapView: MapAutoView) : IMogoMapView, IMogoMapUIControlle mMapView.setOnMapStyleListener(null) mMapView.setOnMapViewVisualAngleChangeListener(null) unregisterLogListener(this, mMapView.getEventController()) - d(SceneConstant.M_MAP + TAG, "map onDestroy") + d(M_MAP + TAG, "map onDestroy") } override fun onSaveInstanceState(outState: Bundle) { mMapView.onSaveInstanceState(outState) - d(SceneConstant.M_MAP + TAG, "map onSaveInstanceState") + d(M_MAP + TAG, "map onSaveInstanceState") } override fun onLowMemory() {} @@ -166,7 +165,7 @@ class AMapViewWrapper(mMapView: MapAutoView) : IMogoMapView, IMogoMapUIControlle paramIndexes = [-1] ) override fun onMapInit() { - i(SceneConstant.M_MAP + TAG, "onMapInit: ") + i(M_MAP + TAG, "onMapInit: ") mogoMapListenerHandler.onMapLoaded() } @@ -178,7 +177,7 @@ class AMapViewWrapper(mMapView: MapAutoView) : IMogoMapView, IMogoMapUIControlle paramIndexes = [-1] ) override fun onMapLoaded() { - i(SceneConstant.M_MAP + TAG, "onMapLoaded: ") + i(M_MAP + TAG, "onMapLoaded: ") if (checkAMapView()) { val cameraPosition = mMapView.getMapAutoViewHelper()!! .getCameraPosition() @@ -208,19 +207,33 @@ class AMapViewWrapper(mMapView: MapAutoView) : IMogoMapView, IMogoMapUIControlle } } - private var roadCross:RoadCross? by Delegates.observable(null){ _,_,newValue -> - + private var roadCross:RoadCross? by Delegates.observable(null){ _,oldValue,newValue -> + oldValue?.let { + //对驶入驶出路口做二次过滤,防止多次回调 + if(it.status == 0 && newValue!!.status == 1){ + //进入路口 + i("$M_MAP$TAG","进入路口 :${newValue.cross_id}") + invokeRoadChange(true) + } + if((it.status == 1 && newValue!!.status == 0) || (newValue!!.cross_id_end.isNotEmpty() && oldValue.cross_id_end != newValue!!.cross_id_end)){ + //驶出路口 + i("$M_MAP$TAG","驶出路口 上个:${oldValue.cross_id_end} , 下个:${newValue.cross_id_end}") + invokeRoadChange(false) + } + } } override fun onRoadCrossInfo(roadCross: RoadCross?) { - d(SceneConstant.M_MAP + TAG, "onRoadCrossInfo:roadCross$roadCross") - + d(M_MAP + TAG, "onRoadCrossInfo:roadCross$roadCross") + roadCross?.let { + this.roadCross = it + } } override fun onStopLineInfo(stopLine: StopLine?) { stopLine?.let { if(it.road_id.isNotEmpty() && it.points.size > 0){ - d(SceneConstant.M_MAP + TAG, "onStopLineInfo: $it") + d(M_MAP + TAG, "onStopLineInfo: $it") invokeListenersOnStopLineGet(it) } } @@ -240,7 +253,7 @@ class AMapViewWrapper(mMapView: MapAutoView) : IMogoMapView, IMogoMapUIControlle override fun changeMapVisualAngle(angelMode: VisualAngleMode, mogoLatLng: MogoLatLng?) { if(visualLock){ - e(SceneConstant.M_MAP + TAG, "视角切换已锁定") + e(M_MAP + TAG, "视角切换已锁定") return } val mapAutoViewHelper = mMapView.getMapAutoViewHelper() @@ -248,7 +261,7 @@ class AMapViewWrapper(mMapView: MapAutoView) : IMogoMapView, IMogoMapUIControlle currentMapVisualAngle = angelMode if (angelMode == VisualAngleMode.MODE_CLOSE_SIGHT) { if (mogoLatLng == null) { - e(SceneConstant.M_MAP + TAG, "切换地图近景需要传入要移动的经纬度数据") + e(M_MAP + TAG, "切换地图近景需要传入要移动的经纬度数据") return } // 近景传入经纬度为点击地图上静态marker经纬度数据,为GPS坐标点。 @@ -296,16 +309,16 @@ class AMapViewWrapper(mMapView: MapAutoView) : IMogoMapView, IMogoMapUIControlle private fun checkAMapView(): Boolean { if (mMapView.getMapAutoViewHelper() == null) { - e(SceneConstant.M_MAP + TAG, "自研mapView实例为空,请检查") + e(M_MAP + TAG, "自研mapView实例为空,请检查") return false } return true } override fun moveToCenter(latLng: MogoLatLng, animate: Boolean) { - d(SceneConstant.M_MAP + TAG, "move to center $latLng") + d(M_MAP + TAG, "move to center $latLng") if (latLng.lat == 0.0 || latLng.lon == 0.0) { - e(SceneConstant.M_MAP + TAG, "latLng = null or is illegal") + e(M_MAP + TAG, "latLng = null or is illegal") return } if (checkAMapView()) { @@ -315,7 +328,7 @@ class AMapViewWrapper(mMapView: MapAutoView) : IMogoMapView, IMogoMapUIControlle } override fun showMyLocation(visible: Boolean) { - d(SceneConstant.M_MAP + TAG, "showMyLocation1 $visible") + d(M_MAP + TAG, "showMyLocation1 $visible") // 如果是VR模式 if (isVrMold) { return @@ -339,7 +352,7 @@ class AMapViewWrapper(mMapView: MapAutoView) : IMogoMapView, IMogoMapUIControlle get() { val isVrMode = mCurrentUI === EnumMapUI.MAP_STYLE_NIGHT_VR || mCurrentUI === EnumMapUI.MAP_STYLE_DAY_VR - d(SceneConstant.M_MAP + TAG, "是否是VR模式: $isVrMode") + d(M_MAP + TAG, "是否是VR模式: $isVrMode") return isVrMode } @@ -441,11 +454,11 @@ class AMapViewWrapper(mMapView: MapAutoView) : IMogoMapView, IMogoMapUIControlle return } if (isVrMold) { - w(SceneConstant.M_MAP + TAG, "vr 模式下忽略该设置") + w(M_MAP + TAG, "vr 模式下忽略该设置") return } i( - SceneConstant.M_MAP + TAG, + M_MAP + TAG, "showBounds : " + carPosition.toString() + " , " + bound.toShortString() + " , " + lockCarPosition ) try { @@ -461,7 +474,7 @@ class AMapViewWrapper(mMapView: MapAutoView) : IMogoMapView, IMogoMapUIControlle ) ) } catch (e: Exception) { - e(SceneConstant.M_MAP + TAG, " error : $e") + e(M_MAP + TAG, " error : $e") } } @@ -555,7 +568,7 @@ class AMapViewWrapper(mMapView: MapAutoView) : IMogoMapView, IMogoMapUIControlle } override fun onMapViewVisualAngleChange(type: Int) { - d(SceneConstant.M_MAP + TAG, " 地图自动更改视距 currentThread : " + Thread.currentThread().name) + d(M_MAP + TAG, " 地图自动更改视距 currentThread : " + Thread.currentThread().name) currentMapVisualAngle = getVisualAngleMode(type) mogoMapListenerHandler.onMapVisualAngleChanged(currentMapVisualAngle) } @@ -647,7 +660,7 @@ class AMapViewWrapper(mMapView: MapAutoView) : IMogoMapView, IMogoMapUIControlle * 加载3D模型 */ private fun loadPreVehicleModel() { - d(SceneConstant.M_MAP + TAG, "添加感知模型到地图中……") + d(M_MAP + TAG, "添加感知模型到地图中……") ThreadUtils.getIoPool().submit { addPreVehicleModelWeiZhi( TrafficTypeEnum.TYPE_TRAFFIC_ID_WEI_ZHI, @@ -693,10 +706,10 @@ class AMapViewWrapper(mMapView: MapAutoView) : IMogoMapView, IMogoMapUIControlle } else { map.addPreVehicleModel(typeTrafficId.type, typeTrafficId.traffic3DNightIconId) } - d(SceneConstant.M_MAP + TAG, logMsg + preVehicleStrWeiZhi) + d(M_MAP + TAG, logMsg + preVehicleStrWeiZhi) if (preVehicleStrWeiZhi == null) { UiThreadHandler.postDelayed({ - w(SceneConstant.M_MAP + TAG, "添加感知模型到地图中失败,尝试重复添加……") + w(M_MAP + TAG, "添加感知模型到地图中失败,尝试重复添加……") addPreVehicleModelWeiZhi(typeTrafficId, logMsg) }, 1000L) }