From f4d3fff3ea0a34a80f4b872a5e771be9a5b7f48b Mon Sep 17 00:00:00 2001 From: zhongchao Date: Sat, 27 Nov 2021 17:50:01 +0800 Subject: [PATCH] fix bug of vip --- .../core/function/v2x/vip/VipCarManager.kt | 44 +++++++++++++++---- 1 file changed, 36 insertions(+), 8 deletions(-) diff --git a/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/vip/VipCarManager.kt b/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/vip/VipCarManager.kt index bf93846658..55a24b08d0 100644 --- a/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/vip/VipCarManager.kt +++ b/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/vip/VipCarManager.kt @@ -20,6 +20,7 @@ import com.mogo.map.navi.IMogoCarLocationChangedListener2 import com.mogo.module.common.MogoApisHandler import com.mogo.module.common.enums.EventTypeEnum import com.mogo.service.cloud.socket.IMogoOnMessageListener +import com.mogo.utils.UiThreadHandler import com.mogo.utils.logger.Logger import kotlin.math.abs @@ -41,8 +42,14 @@ class VipCarManager : IMogoOnMessageListener, IMoGoTrafficLightListe private var mLocation: Location? = null private var turnLightFirst = false private var turnLightEnd = true - private var result: TrafficLightResult? = null private var vip: Boolean = false + + @Volatile + private var enter: Boolean = false + + private var result: TrafficLightResult? = null + private var lastResult: TrafficLightStatus? = null + private val vipNetWorkModel = VipNetWorkModel() private val handler = Handler(Looper.getMainLooper(), this) @@ -96,15 +103,21 @@ class VipCarManager : IMogoOnMessageListener, IMoGoTrafficLightListe if (!vip) { return } + if (enter) { + Logger.d(TAG, "驶入路口,返回 , then resetConditions") + resetConditions() + return + } if (trafficLightResult.currentRoadTrafficLight() == null) { - Logger.d(TAG, "vip 获取到灯态,但没找到对应车道数据 result : $trafficLightResult") + Logger.d(TAG, "vip 获取到灯态,但没找到对应车道数据 result : $trafficLightResult , then resetConditions") + resetConditions() return } val currentResult = trafficLightResult.currentRoadTrafficLight() - val lastResult = result?.currentRoadTrafficLight() + lastResult = result?.currentRoadTrafficLight() Logger.d( TAG, - "检查是否变灯 last.remain : ${lastResult?.remain} , current.remain : ${currentResult?.remain}" + "检查是否变灯 last.remain : ${lastResult?.remain} , color : ${lastResult?.color} , current.remain : ${currentResult?.remain} , color : ${currentResult?.color}, turnLightFirst : $turnLightFirst" ) this.result = trafficLightResult @@ -118,7 +131,7 @@ class VipCarManager : IMogoOnMessageListener, IMoGoTrafficLightListe } lastResult?.let { //如果上次结果和本次灯态结果变化比较大,则已变灯,控制HMI展示弹窗 - if (abs(lastResult.remain - currentResult!!.remain) > 3) { + if (abs(it.remain - currentResult!!.remain) > 5) { CallerHmiManager.showWarningV2X(EventTypeEnum.TYPE_VIP_IDENTIFICATION.poiType.toInt(), EventTypeEnum.TYPE_VIP_IDENTIFICATION.content, EventTypeEnum.TYPE_VIP_IDENTIFICATION.tts, @@ -128,10 +141,9 @@ class VipCarManager : IMogoOnMessageListener, IMoGoTrafficLightListe override fun onDismiss() { Logger.d( TAG, - "showWarningV2X vip dismiss , reset turnLightFirst to false " + "showWarningV2X vip dismiss , resetConditions" ) - turnLightFirst = false - turnLightEnd = true + resetConditions() } }) } @@ -145,6 +157,13 @@ class VipCarManager : IMogoOnMessageListener, IMoGoTrafficLightListe // } } + private fun resetConditions() { + turnLightFirst = false + turnLightEnd = true + result = null + lastResult = null + } + private fun setVip(cancelDelayTime: Long) { vip = true handler.sendEmptyMessageDelayed( @@ -154,6 +173,7 @@ class VipCarManager : IMogoOnMessageListener, IMoGoTrafficLightListe CallerHmiManager.vipIdentification(true) CallVipSetListenerManager.invokeVipSetStatus(true) CallTrafficLightListenerManager.registerTrafficLightListener(TAG, this) + CallTrafficLightListenerManager.registerEnterCrossRoadListener(TAG, this) } private fun cancelVip() { @@ -164,6 +184,7 @@ class VipCarManager : IMogoOnMessageListener, IMoGoTrafficLightListe CallerHmiManager.vipIdentification(false) CallVipSetListenerManager.invokeVipSetStatus(false) CallTrafficLightListenerManager.unRegisterTrafficLightListener(TAG) + CallTrafficLightListenerManager.unRegisterEnterCrossRoadListener(TAG) } private fun canGetThroughCross( @@ -202,6 +223,13 @@ class VipCarManager : IMogoOnMessageListener, IMoGoTrafficLightListe }) } + override fun onEnterCrossRoad(enter: Boolean) { + super.onEnterCrossRoad(enter) + UiThreadHandler.post { + this.enter = enter + } + } + private fun turnLight(controlTime: Int) { result?.let { MogoTrafficLightManager.INSTANCE.turnLightToGreen(