From 96cfc293fe6eeb0866069501ab7e483565723b8b Mon Sep 17 00:00:00 2001 From: zhongchao Date: Thu, 25 Nov 2021 21:27:17 +0800 Subject: [PATCH] fix vip cancel bug and add new interface of trafficCrossRoad event --- .../core/MogoTrafficLightManager.kt | 4 +- .../core/function/v2x/vip/VipCarManager.kt | 19 ++++--- .../function/v2x/vip/network/VipApiService.kt | 5 +- .../v2x/vip/network/VipNetWorkModel.kt | 11 ++-- .../mogo/eagle/core/data/v2x/VipRequest.kt | 10 ++++ .../trafficlight/IMoGoTrafficLightListener.kt | 7 +++ .../CallTrafficLightListenerManager.kt | 51 +++++++++++++++++++ 7 files changed, 87 insertions(+), 20 deletions(-) create mode 100644 core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/v2x/VipRequest.kt diff --git a/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/trafficlight/core/MogoTrafficLightManager.kt b/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/trafficlight/core/MogoTrafficLightManager.kt index 84ba87c5a5..6a9478228f 100644 --- a/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/trafficlight/core/MogoTrafficLightManager.kt +++ b/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/trafficlight/core/MogoTrafficLightManager.kt @@ -119,10 +119,10 @@ class MogoTrafficLightManager : IMogoCarLocationChangedListener2 { mLocation?.let { loc -> roadIDResult?.let { // 检测是否开过路口,开过路口则停止读灯。并重置 trafficLightResult 值为 null -// trafficLightResult != null && - if (it.isInRange(loc.latitude, loc.longitude)) { + if (trafficLightResult != null && it.isInRange(loc.latitude, loc.longitude)) { inRange = true Logger.d("arrowtest", "进入路口") + CallTrafficLightListenerManager.invokeEnterCrossRoad() return } if (inRange) { 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 54a99c2ed2..c9301f9fe0 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 @@ -88,11 +88,7 @@ class VipCarManager : IMogoOnMessageListener, IMoGoTrafficLightListe TAG, "设置handler超时时间 " + ", time : ${System.currentTimeMillis() - vipMessage.timeOut}" ) - handler.sendEmptyMessageDelayed( - MSG_WHAT_VIP_CANCEL, - System.currentTimeMillis() - vipMessage.timeOut - ) - setVip() + setVip(vipMessage.timeOut) } } } @@ -150,8 +146,12 @@ class VipCarManager : IMogoOnMessageListener, IMoGoTrafficLightListe // } } - private fun setVip() { + private fun setVip(cancelDelayTime: Long) { vip = true + handler.sendEmptyMessageDelayed( + MSG_WHAT_VIP_CANCEL, + cancelDelayTime - System.currentTimeMillis() + ) CallerHmiManager.vipIdentification(true) CallVipSetListenerManager.invokeVipSetStatus(true) CallTrafficLightListenerManager.registerTrafficLightListener(TAG, this) @@ -159,6 +159,9 @@ class VipCarManager : IMogoOnMessageListener, IMoGoTrafficLightListe private fun cancelVip() { vip = false + if(handler.hasMessages(MSG_WHAT_VIP_CANCEL)){ + handler.removeMessages(MSG_WHAT_VIP_CANCEL) + } CallerHmiManager.vipIdentification(false) CallVipSetListenerManager.invokeVipSetStatus(false) CallTrafficLightListenerManager.unRegisterTrafficLightListener(TAG) @@ -189,8 +192,8 @@ class VipCarManager : IMogoOnMessageListener, IMoGoTrafficLightListe if (handler.hasMessages(MSG_WHAT_VIP_SEARCH)) { handler.removeMessages(MSG_WHAT_VIP_SEARCH) } - if (it) { - setVip() + if (it.vipStatus) { + setVip(it.cancelDelayTime) } else { cancelVip() } diff --git a/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/vip/network/VipApiService.kt b/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/vip/network/VipApiService.kt index f2e7c2ddd5..37345e0805 100644 --- a/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/vip/network/VipApiService.kt +++ b/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/vip/network/VipApiService.kt @@ -1,14 +1,13 @@ package com.mogo.eagle.core.function.v2x.vip.network import com.mogo.eagle.core.data.BaseResponse -import com.mogo.eagle.core.data.trafficlight.RoadIDResult -import com.mogo.eagle.core.data.trafficlight.TrafficLightResult +import com.mogo.eagle.core.data.v2x.VipRequest import retrofit2.http.* interface VipApiService { //查询是否为VIP车辆 @GET("/dataService/carUser/getVipStatusBySn") - suspend fun requestVip(@Query("sn") sn: String): BaseResponse + suspend fun requestVip(@Query("sn") sn: String): BaseResponse } \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/vip/network/VipNetWorkModel.kt b/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/vip/network/VipNetWorkModel.kt index 110c9dac74..3fe4315504 100644 --- a/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/vip/network/VipNetWorkModel.kt +++ b/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/vip/network/VipNetWorkModel.kt @@ -2,6 +2,7 @@ package com.mogo.eagle.core.function.v2x.vip.network import com.mogo.cloud.passport.MoGoAiCloudClientConfig import com.mogo.eagle.core.data.BaseResponse +import com.mogo.eagle.core.data.v2x.VipRequest import com.mogo.module.common.MogoApisHandler import com.mogo.module.common.constants.HostConst.DATA_SERVICE_HOST import com.mogo.utils.network.apiCall @@ -15,8 +16,8 @@ class VipNetWorkModel { ) } - fun requestVip(onSuccess: ((Boolean) -> Unit), onError: ((String) -> Unit)) { - request> { + fun requestVip(onSuccess: ((VipRequest) -> Unit), onError: ((String) -> Unit)) { + request> { loader { apiCall { getNetWorkApi().requestVip(MoGoAiCloudClientConfig.getInstance().sn) @@ -24,11 +25,7 @@ class VipNetWorkModel { } onSuccess { if (it.result != null) { - if (it.result) { - onSuccess.invoke(true) - } else { - onSuccess.invoke(false) - } + onSuccess.invoke(it.result) } else { onError.invoke("requestRoadID result is null") } diff --git a/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/v2x/VipRequest.kt b/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/v2x/VipRequest.kt new file mode 100644 index 0000000000..935d666deb --- /dev/null +++ b/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/v2x/VipRequest.kt @@ -0,0 +1,10 @@ +package com.mogo.eagle.core.data.v2x + +/** + * 查询是否为VIP + * timeOut: 超时时间 + * vipType: Vip --1 变成VIP,--0 撤销VIP + * content: VIP消息 + */ +data class VipRequest(val cancelDelayTime: Long, val vipStatus:Boolean) { +} \ No newline at end of file diff --git a/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/trafficlight/IMoGoTrafficLightListener.kt b/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/trafficlight/IMoGoTrafficLightListener.kt index 2a6f6b745b..04707d64f3 100644 --- a/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/trafficlight/IMoGoTrafficLightListener.kt +++ b/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/trafficlight/IMoGoTrafficLightListener.kt @@ -9,4 +9,11 @@ interface IMoGoTrafficLightListener { */ fun onTrafficLightStatus(trafficLightResult: TrafficLightResult) + /** + * 车辆进入路口回调 + */ + fun onEnterCrossRoad(){ + + } + } \ No newline at end of file diff --git a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/trafficlight/CallTrafficLightListenerManager.kt b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/trafficlight/CallTrafficLightListenerManager.kt index 065585e496..7fda1a4fe9 100644 --- a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/trafficlight/CallTrafficLightListenerManager.kt +++ b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/trafficlight/CallTrafficLightListenerManager.kt @@ -62,6 +62,50 @@ object CallTrafficLightListenerManager { } } + /** + * 添加监听 + * @param tag 标记,用来注销监听使用 + * @param listener 监听回调 + */ + fun registerEnterCrossRoadListener( + @Nullable tag: String, + @Nullable listener: IMoGoTrafficLightListener + ) { + if (M_TRAFFIC_LIGHT_LISTENER.containsKey(tag)) { + LogUtils.eTag(TAG, "Tag:$tag already exists,please use other tag") + return + } + M_TRAFFIC_LIGHT_LISTENER[tag] = listener + } + + /** + * 删除监听 + * @param tag 标记,用来注销监听使用 + */ + fun unRegisterEnterCrossRoadListener(@Nullable tag: String) { + if (!M_TRAFFIC_LIGHT_LISTENER.containsKey(tag)) { + LogUtils.eTag(TAG, "Tag:$tag not exists") + return + } + M_TRAFFIC_LIGHT_LISTENER.remove(tag) + } + + /** + * 删除监听 + * @param listener 要删除的监听对象 + */ + fun unRegisterEnterCrossRoadListener(@Nullable listener: IMoGoTrafficLightListener) { + if (!M_TRAFFIC_LIGHT_LISTENER.containsValue(listener)) { + LogUtils.eTag(TAG, "listener:$listener not exists") + return + } + M_TRAFFIC_LIGHT_LISTENER.forEach { + if (it.value == listener) { + M_TRAFFIC_LIGHT_LISTENER.remove(it.key) + } + } + } + fun invokeTrafficLightStatus(trafficLightResult: TrafficLightResult) { this.trafficLightResult = trafficLightResult M_TRAFFIC_LIGHT_LISTENER.forEach { @@ -72,6 +116,13 @@ object CallTrafficLightListenerManager { } } + fun invokeEnterCrossRoad(){ + M_TRAFFIC_LIGHT_LISTENER.forEach { + val listener = it.value + listener.onEnterCrossRoad() + } + } + fun resetTrafficLightData() { trafficLightResult = null }