From 1e192b633a7d1d111aeb745b9f0cde8d09c01f92 Mon Sep 17 00:00:00 2001 From: renwj Date: Fri, 14 Jul 2023 12:01:21 +0800 Subject: [PATCH] =?UTF-8?q?[3.4.0][=E8=A7=86=E8=A7=92]=20=E4=BC=98?= =?UTF-8?q?=E5=8C=96=E8=BF=9C=E6=99=AF=E8=A7=86=E8=A7=92=E6=97=8B=E8=BD=AC?= =?UTF-8?q?=E5=8A=A8=E7=94=BB=EF=BC=9B=E5=B0=86=E5=88=B0=E8=B7=AF=E5=8F=A3?= =?UTF-8?q?=E8=A7=A6=E5=8F=91=E8=BF=91=E6=99=AF=E8=A7=86=E8=A7=92=E9=80=BB?= =?UTF-8?q?=E8=BE=91=E5=8A=A0=E5=9B=9E=E6=9D=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../datacenter/obu/MogoObuDcCombineManager.kt | 21 ++++-- .../obu/MogoPrivateObuNewManager.kt | 20 ++++-- .../angle/MoGoVisualAngleChangeProvider.kt | 67 ++++++++++++++++++- 3 files changed, 98 insertions(+), 10 deletions(-) diff --git a/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/obu/MogoObuDcCombineManager.kt b/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/obu/MogoObuDcCombineManager.kt index 62be1f6cb6..61b27f6b4a 100644 --- a/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/obu/MogoObuDcCombineManager.kt +++ b/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/obu/MogoObuDcCombineManager.kt @@ -11,9 +11,11 @@ import com.mogo.eagle.core.function.api.datacenter.obu.IMoGoObuWarningMapListene import com.mogo.eagle.core.function.api.datacenter.obu.IMoGoObuWarningRsiListener import com.mogo.eagle.core.function.api.datacenter.obu.IMoGoObuWarningRsmListener import com.mogo.eagle.core.function.api.datacenter.obu.IMoGoObuWarningSpatListener +import com.mogo.eagle.core.function.api.hmi.warning.* +import com.mogo.eagle.core.function.api.map.angle.* import com.mogo.eagle.core.function.call.autopilot.CallerChassisLocationGCJ02ListenerManager import com.mogo.eagle.core.function.call.hmi.CallerHmiManager -import com.mogo.eagle.core.function.call.map.CallerMapUIServiceManager +import com.mogo.eagle.core.function.call.map.* import com.mogo.eagle.core.function.call.obu.* import com.mogo.eagle.core.function.call.v2x.CallerLimitingVelocityListenerManager import com.mogo.eagle.core.function.call.v2x.CallerTrafficLightListenerManager @@ -397,7 +399,17 @@ class MogoObuDcCombineManager private constructor() : IMoGoObuWarningRsiListener return } saveObuToDcData(v2xType, alertContent, ttsContent) - showWarning(v2xType, alertContent, ttsContent, direction) + showWarning(v2xType, alertContent, ttsContent, direction, object : IMoGoWarningStatusListener { + + override fun onShow() { + CallerVisualAngleManager.changeAngle(CrossRoad(true)) + } + + override fun onDismiss() { + super.onDismiss() + CallerVisualAngleManager.changeAngle(CrossRoad(false)) + } + }) } MogoObuShowConstants.STATUS.UPDATE -> {// 更新 @@ -680,9 +692,10 @@ class MogoObuDcCombineManager private constructor() : IMoGoObuWarningRsiListener type: String, content: String, tts: String, - direction: WarningDirectionEnum + direction: WarningDirectionEnum, + listener: IMoGoWarningStatusListener? = null ) { - CallerHmiManager.warningV2X(type, content, tts, null, direction, isFromObu = true) + CallerHmiManager.warningV2X(type, content, tts, listener, direction, isFromObu = true) } } diff --git a/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/obu/MogoPrivateObuNewManager.kt b/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/obu/MogoPrivateObuNewManager.kt index 9763e0e620..d084c91a6f 100644 --- a/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/obu/MogoPrivateObuNewManager.kt +++ b/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/obu/MogoPrivateObuNewManager.kt @@ -7,6 +7,7 @@ import com.mogo.eagle.core.data.config.HmiBuildConfig import com.mogo.eagle.core.data.enums.* import com.mogo.eagle.core.data.obu.MogoObuConst import com.mogo.eagle.core.function.api.hmi.warning.IMoGoWarningStatusListener +import com.mogo.eagle.core.function.api.map.angle.* import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager import com.mogo.eagle.core.function.call.autopilot.CallerChassisLocationGCJ02ListenerManager import com.mogo.eagle.core.function.call.devatools.CallerDevaToolsManager @@ -801,7 +802,6 @@ class MogoPrivateObuNewManager private constructor() : OnUpgradeListener { var alertContent = "" var ttsContent = "" var v2xType = appId - var changeVisualAngle = false when (appId) { //前向碰撞预警 MogoObuShowConstants.V2X_WARNING_TYPE.FCW.toString() -> { @@ -847,7 +847,6 @@ class MogoPrivateObuNewManager private constructor() : OnUpgradeListener { direction == WarningDirectionEnum.ALERT_WARNING_TOP_LEFT || direction == WarningDirectionEnum.ALERT_WARNING_BOTTOM_LEFT ) { //左后 - changeVisualAngle = true ttsContent = String.format(ttsContent, "左") alertContent = String.format(alertContent, "左") } else if ( @@ -855,7 +854,6 @@ class MogoPrivateObuNewManager private constructor() : OnUpgradeListener { direction == WarningDirectionEnum.ALERT_WARNING_TOP_RIGHT || direction == WarningDirectionEnum.ALERT_WARNING_BOTTOM_RIGHT ) { //右后 - changeVisualAngle = true ttsContent = String.format(ttsContent, "右") alertContent = String.format(alertContent, "右") } @@ -947,7 +945,21 @@ class MogoPrivateObuNewManager private constructor() : OnUpgradeListener { CallerHmiManager.warningV2X(v2xType, alertContent, ttsContent,// 只有第一次才tts,防止更新的时候不断的提醒 - null, + object : IMoGoWarningStatusListener { + override fun onShow() { + if (appId == MogoObuShowConstants.V2X_WARNING_TYPE.BSW.toString()) { + //盲区预警,展示近视角 + CallerVisualAngleManager.changeAngle(CrossRoad(true)) + } + } + + override fun onDismiss() { + if (appId == MogoObuShowConstants.V2X_WARNING_TYPE.BSW.toString()) { + //盲区预警,取消近视角 + CallerVisualAngleManager.changeAngle(CrossRoad(false)) + } + } + }, direction, isFromObu = true ) diff --git a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/angle/MoGoVisualAngleChangeProvider.kt b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/angle/MoGoVisualAngleChangeProvider.kt index 4f2babd099..e800e1ddb6 100644 --- a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/angle/MoGoVisualAngleChangeProvider.kt +++ b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/angle/MoGoVisualAngleChangeProvider.kt @@ -8,13 +8,19 @@ import androidx.lifecycle.Lifecycle.Event import androidx.lifecycle.Lifecycle.Event.ON_DESTROY import com.alibaba.android.arouter.facade.annotation.Route import com.mogo.eagle.core.data.constants.MogoServicePaths +import com.mogo.eagle.core.data.map.* +import com.mogo.eagle.core.data.map.MapRoadInfo.StopLine import com.mogo.eagle.core.function.api.map.angle.* import com.mogo.eagle.core.function.api.map.angle.Scene +import com.mogo.eagle.core.function.call.autopilot.* import com.mogo.eagle.core.function.call.map.* +import com.mogo.eagle.core.function.call.map.CallerMapRoadListenerManager.OnRoadListener import com.mogo.eagle.core.utilcode.kotlin.* +import com.zhidaoauto.map.sdk.open.tools.* import kotlinx.coroutines.* import kotlinx.coroutines.android.* import java.util.* +import java.util.concurrent.atomic.* @Route(path = MogoServicePaths.PATH_VISUAL_ANGLE) class MoGoVisualAngleChangeProvider: IMoGoVisualAngleChangeProvider { @@ -23,8 +29,14 @@ class MoGoVisualAngleChangeProvider: IMoGoVisualAngleChangeProvider { private const val TAG = "VisualAngleChange" } + private val triggerLocation = AtomicReference() + + private val distanceOfCarToStopLine = AtomicReference(0.0) + + private val travelled by lazy { AtomicReference(0.0) } + @Volatile - private var roadEventFlag: Boolean = false + private var roadEventFlag = false /** * 业务实体,不对外暴露 @@ -43,6 +55,52 @@ class MoGoVisualAngleChangeProvider: IMoGoVisualAngleChangeProvider { PriorityQueue() } + private val listener = object : OnRoadListener { + private val roadId = AtomicReference() + private val triggerRoadId = AtomicReference() + + override fun onRoadIdInfo(roadId: String) { + this.roadId.set(roadId) + Log.d(TAG, "-- onRoadIdInfo --: prev: ${this.triggerRoadId.get()} -> curr: $roadId") + val loc = CallerChassisLocationGCJ02ListenerManager.getChassisLocationGCJ02() + var triggerClose = false + val distance = distanceOfCarToStopLine.get() + 5 + if (hasCrossRoad && distance > 0) { + val prev = triggerLocation.get() + if (prev != null) { + travelled.set(MapTools.distance(loc.longitude, loc.latitude, prev.longitude, prev.latitude) + travelled.get()) + triggerLocation.set(loc) + } + val oldRoadId = triggerRoadId.get() + Log.d(TAG, "-- onRoadIdInfo --: travelled --: ${travelled.get()}") + if ((travelled.get() > distance) && oldRoadId != roadId) { + distanceOfCarToStopLine.set(0.0) + hasCrossRoad = false + triggerRoadId.set(null) + travelled.set(0.0) + triggerLocation.set(null) + Log.d(TAG, "-- onRoadIdInfo --: trigger close --") + triggerClose = true + } + } + if (triggerClose) { + changeAngle(CrossRoad(false)) + } + } + + + override fun onStopLineInfo(info: StopLine) { + Log.d(TAG, "-- onStopLineInfo --: ${info.distanceOfCarToStopLine}") + if (!hasCrossRoad && info.distanceOfCarToStopLine <= 30.0) { + hasCrossRoad = true + triggerRoadId.set(this.roadId.get()) + distanceOfCarToStopLine.set(info.distanceOfCarToStopLine) + triggerLocation.set(CallerChassisLocationGCJ02ListenerManager.getChassisLocationGCJ02()) + changeAngle(CrossRoad(true)) + } + } + } + override fun init(context: Context?) { if (Thread.currentThread() != Looper.getMainLooper().thread) { scope.launch { @@ -62,8 +120,13 @@ class MoGoVisualAngleChangeProvider: IMoGoVisualAngleChangeProvider { } } }) + CallerMapRoadListenerManager.registerRoadListener("VisualAngleChange", listener) } + @Volatile + private var hasCrossRoad = false + + private var scope: CoroutineScope = acquireScope() @Synchronized get() { @@ -204,7 +267,7 @@ class MoGoVisualAngleChangeProvider: IMoGoVisualAngleChangeProvider { it.setLockMode(false) roadEventFlag = true scope.launch { - it.animateTo(0.0 ,0.0,1f, 0f ,11.5f,28f,3000,true) + it.animateTo(0.0 ,0.0,1f, - record.target.poi_angle.toFloat(),11.5f,28f,3000,record.target.isGps) } } else {