Merge remote-tracking branch 'origin/dev_robotaxi-d_240705_6.5.0' into dev_robotaxi-d_240705_6.5.0

This commit is contained in:
yangyakun
2024-07-22 10:13:06 +08:00
8 changed files with 170 additions and 34 deletions

View File

@@ -159,6 +159,17 @@
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<!-- 事件弹框 -->
<com.mogo.eagle.core.function.hmi.ui.v2n.RoadV2NEventWindowView
android:id="@+id/roadV2NEventWindowView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="@dimen/dp_45"
android:layout_marginTop="@dimen/dp_350"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
android:visibility="gone"/>
<!--自动探查-->
<com.mogo.och.common.module.wigets.rodedata.OchAutomaticExplorationView
android:layout_width="wrap_content"
@@ -431,16 +442,6 @@
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent" />
<com.mogo.eagle.core.function.hmi.ui.v2n.RoadV2NEventWindowView
android:id="@+id/roadV2NEventWindowView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="@dimen/dp_45"
android:layout_marginBottom="@dimen/dp_30"
app:layout_constraintBottom_toTopOf="@+id/smallMapView"
app:layout_constraintRight_toRightOf="parent"
android:visibility="gone"/>
<com.mogo.och.common.module.wigets.LoadingMapStatusView
android:layout_width="match_parent"
android:layout_height="match_parent" />

View File

@@ -236,6 +236,7 @@
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<!-- 事件弹框 -->
<com.mogo.eagle.core.function.hmi.ui.v2n.RoadV2NEventWindowView
android:id="@+id/roadV2NEventWindowView"
android:layout_width="wrap_content"

View File

@@ -219,6 +219,17 @@
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<!-- 事件弹框 -->
<com.mogo.eagle.core.function.hmi.ui.v2n.RoadV2NEventWindowView
android:id="@+id/roadV2NEventWindowView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="@dimen/dp_45"
android:layout_marginTop="@dimen/dp_350"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
android:visibility="gone"/>
<!--自动探查-->
<com.mogo.och.common.module.wigets.rodedata.OchAutomaticExplorationView
android:layout_width="wrap_content"
@@ -434,16 +445,6 @@
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent" />
<com.mogo.eagle.core.function.hmi.ui.v2n.RoadV2NEventWindowView
android:id="@+id/roadV2NEventWindowView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="@dimen/dp_45"
android:layout_marginBottom="@dimen/dp_30"
app:layout_constraintBottom_toTopOf="@+id/smallMapView"
app:layout_constraintRight_toRightOf="parent"
android:visibility="gone"/>
<com.mogo.och.common.module.wigets.LoadingMapStatusView
android:layout_width="match_parent"
android:layout_height="match_parent"/>

View File

@@ -246,7 +246,8 @@
android:layout_marginEnd="@dimen/dp_60"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent" />
<!-- 事件弹框 -->
<com.mogo.eagle.core.function.hmi.ui.v2n.RoadV2NEventWindowView
android:id="@+id/roadV2NEventWindowView"
android:layout_width="wrap_content"

View File

@@ -33,6 +33,7 @@ import com.mogo.eagle.core.function.hmi.R
import com.mogo.eagle.core.function.hmi.ui.tools.SweeperModeChangedConfirmDialog
import com.mogo.eagle.core.function.call.unmanned.CallerUnmannedListenerManager
import com.mogo.eagle.core.function.hmi.ui.utils.HmiActionLog.Companion.hmiAction
import com.mogo.eagle.core.function.hmi.ui.utils.SOPAnalyticsManager.clickEventAnalytics
import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger
import com.mogo.eagle.core.utilcode.mogo.vehicle.SweeperVehicleConfigUtils
@@ -142,6 +143,7 @@ internal class SOPSettingView @JvmOverloads constructor(
scV2XSwitch.setOnCheckedChangeListener { _, isChecked ->
FunctionBuildConfig.v2xMainSwitch = isChecked
hmiAction("SOP V2X总开关, ", isChecked)
clickEventAnalytics("V2X总开关",isChecked)
if (isChecked) {
//V2N总开关
scV2NSwitch.isChecked = FunctionBuildConfig.v2nMainSwitch
@@ -190,6 +192,7 @@ internal class SOPSettingView @JvmOverloads constructor(
//绿波通行(默认关闭)
scGreenWaveSop.isEnabled = FunctionBuildConfig.v2nMainSwitch
scV2NSwitch.setOnCheckedChangeListener { compoundButton, isChecked ->
clickEventAnalytics("V2N总开关",isChecked)
if (isChecked) {
//V2N新链路
scNewV2NData.isChecked = FunctionBuildConfig.isNewV2NData
@@ -242,6 +245,7 @@ internal class SOPSettingView @JvmOverloads constructor(
scRunRedLightSop.isEnabled = HmiBuildConfig.isShowObuV2iView
scObuWeaknessTrafficSop.isEnabled = HmiBuildConfig.isShowObuV2iView
scV2ISwitch.setOnCheckedChangeListener { compoundButton, isChecked ->
clickEventAnalytics("V2I总开关",isChecked)
if (isChecked) {
//V2I场景进PNC
scV2iPnc.isChecked = FunctionBuildConfig.isV2IPnc
@@ -288,6 +292,7 @@ internal class SOPSettingView @JvmOverloads constructor(
if (!compoundButton.isPressed) {
return@setOnCheckedChangeListener
}
clickEventAnalytics("V2N新链路",isChecked)
hmiAction("SOP 是否是V2N新链路(云->工控机->App)", isChecked)
FunctionBuildConfig.isNewV2NData = isChecked
@@ -304,6 +309,7 @@ internal class SOPSettingView @JvmOverloads constructor(
if (!compoundButton.isPressed) {
return@setOnCheckedChangeListener
}
clickEventAnalytics("V2N场景进PNC",isChecked)
hmiAction("SOP V2N场景进PNC, ", isChecked)
CallerAutoPilotControlManager.sendV2nToPncCmd(isChecked)
FunctionBuildConfig.isV2NPnc = isChecked
@@ -315,6 +321,7 @@ internal class SOPSettingView @JvmOverloads constructor(
if (!compoundButton.isPressed) {
return@setOnCheckedChangeListener
}
clickEventAnalytics("绿波通行",isChecked)
hmiAction("SOP obu绿波通行, ", isChecked)
HmiBuildConfig.isShowGreenWaveView = isChecked
if (HmiBuildConfig.isShowGreenWaveView) {
@@ -336,6 +343,7 @@ internal class SOPSettingView @JvmOverloads constructor(
if (!compoundButton.isPressed) {
return@setOnCheckedChangeListener
}
clickEventAnalytics("V2I场景进PNC",isChecked)
hmiAction("SOP V2I场景进PNC, ", isChecked)
CallerAutoPilotControlManager.sendV2iToPncCmd(isChecked)
FunctionBuildConfig.isV2IPnc = isChecked
@@ -347,6 +355,7 @@ internal class SOPSettingView @JvmOverloads constructor(
if (!compoundButton.isPressed) {
return@setOnCheckedChangeListener
}
clickEventAnalytics("闯红灯预警",isChecked)
hmiAction("SOP obu闯红灯预警, ", isChecked)
HmiBuildConfig.isShowRunRedLightView = isChecked
if (HmiBuildConfig.isShowRunRedLightView) {
@@ -368,6 +377,7 @@ internal class SOPSettingView @JvmOverloads constructor(
if (!compoundButton.isPressed) {
return@setOnCheckedChangeListener
}
clickEventAnalytics("路侧弱势交通参与者",isChecked)
hmiAction("SOP obu弱势交通控制, ", isChecked)
HmiBuildConfig.isShowObuWeaknessTrafficView = isChecked
}
@@ -378,6 +388,7 @@ internal class SOPSettingView @JvmOverloads constructor(
if (!compoundButton.isPressed) {
return@setOnCheckedChangeListener
}
clickEventAnalytics("V2V总开关",isChecked)
hmiAction("SOP obuV2V开关, ", isChecked)
HmiBuildConfig.isShowObuV2vView = isChecked
}
@@ -389,6 +400,7 @@ internal class SOPSettingView @JvmOverloads constructor(
if (!compoundButton.isPressed) {
return@setOnCheckedChangeListener
}
clickEventAnalytics("OBU总开关",isChecked)
hmiAction("SOP OBU控制总开关, ", isChecked)
if (isChecked) {
CallerObuApiManager.resetObuIpAddress(MogoObuConst.OBU_DEFAULT_IP)
@@ -408,6 +420,7 @@ internal class SOPSettingView @JvmOverloads constructor(
scMarkingObstacles.isChecked = FunctionBuildConfig.isPNCWarning
scMarkingObstacles.setOnCheckedChangeListener { _, isChecked ->
hmiAction("SOP 危险障碍物颜色标记开关, ", isChecked)
clickEventAnalytics("危险障碍物颜色标记",isChecked)
FunctionBuildConfig.isPNCWarning = isChecked
}
if (AppIdentityModeUtils.isBus(FunctionBuildConfig.appIdentityMode)) {
@@ -418,6 +431,7 @@ internal class SOPSettingView @JvmOverloads constructor(
scRouteDynamicEffect.isChecked = HmiBuildConfig.isShowRouteStrategy
scRouteDynamicEffect.setOnCheckedChangeListener { _, isChecked ->
hmiAction("SOP 引导线动态效果, ", isChecked)
clickEventAnalytics("引导线动态效果",isChecked)
HmiBuildConfig.isShowRouteStrategy = isChecked
CallerDevaToolsManager.setRouteDynamicColorEnable(isChecked)
}
@@ -441,6 +455,7 @@ internal class SOPSettingView @JvmOverloads constructor(
CallerMapUIServiceManager.getMapUIController()?.setIsDrawPointCloud(isChecked)
CallerSopSettingManager.invokePointCloudListener(isChecked)
hmiAction("SOP 是否渲染点云数据, ", isChecked)
clickEventAnalytics("点云效果",isChecked)
}
//自车光圈
@@ -461,6 +476,7 @@ internal class SOPSettingView @JvmOverloads constructor(
return@setOnCheckedChangeListener
}
FunctionBuildConfig.isDisplayAnimEnable = isChecked
clickEventAnalytics("自车光圈",isChecked)
}
}
@@ -475,6 +491,7 @@ internal class SOPSettingView @JvmOverloads constructor(
return@setOnCheckedChangeListener
}
hmiAction("SOP 演示模式开关, ", !FunctionBuildConfig.isDemoMode)
clickEventAnalytics("美化模式",isChecked)
FunctionBuildConfig.isDemoMode = !FunctionBuildConfig.isDemoMode
CallerAutoPilotControlManager.setDemoMode(FunctionBuildConfig.isDemoMode)
CallerHmiViewControlListenerManager.invokeFuncMode(
@@ -497,6 +514,7 @@ internal class SOPSettingView @JvmOverloads constructor(
scShowBagRecordWindow.setOnCheckedChangeListener { _, isChecked ->
FunctionBuildConfig.isShowBagRecordWindow = isChecked
hmiAction("SOP 是否展示录包弹窗, ", isChecked)
clickEventAnalytics("录包弹窗",isChecked)
}
//接管提醒
@@ -504,6 +522,7 @@ internal class SOPSettingView @JvmOverloads constructor(
scTakeOverRemind.setOnCheckedChangeListener { _, isChecked ->
FunctionBuildConfig.isTakeoverRemind = isChecked
hmiAction("SOP 是否展示接管提醒, ", isChecked)
clickEventAnalytics("接管提醒",isChecked)
}
}
@@ -518,6 +537,7 @@ internal class SOPSettingView @JvmOverloads constructor(
hmiAction("SOP 绕障类功能开关, ", isChecked)
CallerAutoPilotControlManager.sendDetouring(isChecked)
FunctionBuildConfig.isDetouring = isChecked
clickEventAnalytics("绕障类功能",isChecked)
}
// 雨天模式,上一次勾选的数据
@@ -527,6 +547,7 @@ internal class SOPSettingView @JvmOverloads constructor(
return@setOnCheckedChangeListener
}
hmiAction("SOP 雨天模式开关, ", isChecked)
clickEventAnalytics("雨天模式",isChecked)
FunctionBuildConfig.isRainMode = isChecked
CallerAutoPilotControlManager.setRainMode(isChecked)
CallerHmiViewControlListenerManager.invokeFuncMode(FUNC_MODE_RAIN, isChecked)
@@ -543,6 +564,7 @@ internal class SOPSettingView @JvmOverloads constructor(
FunctionBuildConfig.isWeakNetSlowDown = isChecked
CallerAutoPilotControlManager.sendWeakNetSlowDown(isChecked)
hmiAction("SOP 弱网减速停车, ", isChecked)
clickEventAnalytics("弱网减速停车",isChecked)
}
//故障减速停车
@@ -551,6 +573,7 @@ internal class SOPSettingView @JvmOverloads constructor(
FunctionBuildConfig.isFaultSlowDown = isChecked
CallerAutoPilotControlManager.sendBreakdownSlowDown(isChecked)
hmiAction("SOP 故障减速停车, ", isChecked)
clickEventAnalytics("故障减速停车",isChecked)
}
//融合模式
rgFusionMode.setOnCheckedChangeListener { _, p1 ->
@@ -577,6 +600,7 @@ internal class SOPSettingView @JvmOverloads constructor(
}
}
hmiAction("SOP 融合模式, ", FunctionBuildConfig.fusionMode)
clickEventAnalytics("融合模式",true)
CallerAutoPilotControlManager.sendFusionMode(FunctionBuildConfig.fusionMode)
}
@@ -610,6 +634,7 @@ internal class SOPSettingView @JvmOverloads constructor(
ToastUtils.showShort("变道绕障的目标障碍物速度阈值设置失败")
hmiAction("SOP 变道绕障的目标障碍物速度阈值设置", "失败")
}
clickEventAnalytics("变道速度阈值",true)
}
ivSpeedOverTakeReduce.setOnClickListener {
@@ -640,6 +665,7 @@ internal class SOPSettingView @JvmOverloads constructor(
ToastUtils.showShort("SOP 超车目标障碍物速度阈值设置失败")
hmiAction("SOP 超车目标障碍物速度阈值设置", "失败")
}
clickEventAnalytics("超车速度阈值",true)
}
if (AppIdentityModeUtils.isBus(FunctionBuildConfig.appIdentityMode)) {
@@ -669,6 +695,7 @@ internal class SOPSettingView @JvmOverloads constructor(
scTrafficLight.isChecked = !HmiBuildConfig.isShowTrafficLightView
scTrafficLight.setOnCheckedChangeListener { _, isChecked ->
hmiAction("SOP 红绿灯标识开关, ", isChecked)
clickEventAnalytics("红绿灯标识",isChecked)
if (isChecked) {
CallerHmiManager.showTrafficLightView()
} else {
@@ -680,6 +707,7 @@ internal class SOPSettingView @JvmOverloads constructor(
scCarUnionTrafficLight.isChecked = HmiBuildConfig.isShowCarSourceTrafficLightView
scCarUnionTrafficLight.setOnCheckedChangeListener { _, isChecked ->
hmiAction("SOP 红绿灯车端来源标识开关, ", isChecked)
clickEventAnalytics("红绿灯车端融合标识",isChecked)
HmiBuildConfig.isShowCarSourceTrafficLightView = isChecked
}
@@ -687,6 +715,7 @@ internal class SOPSettingView @JvmOverloads constructor(
scConnectionSwitch.isChecked = HmiBuildConfig.isShowConnectionProgressView
scConnectionSwitch.setOnCheckedChangeListener { _, isChecked ->
hmiAction("SOP 系统启动状态展示, ", isChecked)
clickEventAnalytics("系统启动状态展示",isChecked)
HmiBuildConfig.isShowConnectionProgressView = isChecked
CallerHmiViewControlListenerManager.updateConnectionProgressView(isChecked)
}
@@ -695,6 +724,7 @@ internal class SOPSettingView @JvmOverloads constructor(
scSpeedLimit.isChecked = HmiBuildConfig.isShowLimitingVelocityView
scSpeedLimit.setOnCheckedChangeListener { _, isChecked ->
hmiAction("SOP 限速标识开关, ", isChecked)
clickEventAnalytics("限速标识",isChecked)
if (isChecked) {
HmiBuildConfig.isShowLimitingVelocityView = true
CallerHmiViewControlListenerManager.invokeVisible(
@@ -714,6 +744,7 @@ internal class SOPSettingView @JvmOverloads constructor(
scIPCReport.isChecked = FunctionBuildConfig.isReportWarning
scIPCReport.setOnCheckedChangeListener { _, isChecked ->
hmiAction("SOP 是否开启异常上报, ", isChecked)
clickEventAnalytics("异常上报提示",isChecked)
FunctionBuildConfig.isReportWarning = isChecked
}
@@ -729,6 +760,7 @@ internal class SOPSettingView @JvmOverloads constructor(
} else {
CallerHmiManager.hidM1360LookAround()
}
clickEventAnalytics("360环视",isChecked)
}
it.isChecked = CallerHmiManager.isM1360LookAroundShowing()
}
@@ -761,6 +793,7 @@ internal class SOPSettingView @JvmOverloads constructor(
}
CallerHmiManager.setTaxiUnmanedDriverLineRoutingVerifyMode(false)
}
clickEventAnalytics("自主算路验证模式",isChecked)
}
it.isChecked = CallerHmiManager.isTaxiUnmanedDriverLineRoutingVerifyMode()
} else {
@@ -784,6 +817,7 @@ internal class SOPSettingView @JvmOverloads constructor(
it.setOnCheckedChangeListener { _, isChecked ->
CallerLogger.d(TAG, "发送开关数据:${isChecked}到乘客屏")
CallerTelematicManager.sendMsgToAllClients(TelematicConstant.WEATHER_SWITCH_STATUS, (if (isChecked) "1" else "0").toByteArray())
clickEventAnalytics("天气效果开关",isChecked)
}
}
}
@@ -822,6 +856,7 @@ internal class SOPSettingView @JvmOverloads constructor(
})
confirmDialog.showSweeperModeChangeConfirmDialog()
}
clickEventAnalytics("清扫云控业务",isChecked)
}
} else {
switchView.isEnabled = false
@@ -850,6 +885,7 @@ internal class SOPSettingView @JvmOverloads constructor(
CallerUnmannedListenerManager.dispatchVirtualTaskPullTaskInterval(5)
}
}
clickEventAnalytics("Taxi无人化演练任务拉取时间间隔",true)
}
rgPullTime.visibility =
if(AppIdentityModeUtils.isTaxiDriver(FunctionBuildConfig.appIdentityMode))

View File

@@ -0,0 +1,55 @@
package com.mogo.eagle.core.function.hmi.ui.utils
import com.mogo.commons.storage.SharedPrefsMgr
import com.mogo.commons.utils.MogoAnalyticUtils
import com.mogo.eagle.core.data.app.AppConfigInfo
import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager
import com.mogo.eagle.core.utilcode.util.AppUtils
/**
* 运营面板埋点统计管理
*/
object SOPAnalyticsManager {
private const val sopButtonClick = "sop_button_click"
private const val eventParamButtonName = "buttonName" //开关名称
private const val eventParamButtonStatus = "buttonStatus" //开关状态
private const val eventParamPlateNumber = "plateNumber" //车牌号
private const val eventParamCarSn = "carSn" //鹰眼SN
private const val eventParamMapVersion = "mapVersion" //工控机版本
private const val eventParamEyeVersion = "eyeVersion" //鹰眼版本
/**
* 运营面板开关点击状态统计
* @param buttonName 开关名称
* @param buttonStatus 开关状态
* @param plateNumber 车牌号
* @param carSn 鹰眼SN
* @param mapVersion 工控机版本
* @param eyeVersion 鹰眼版本
*/
private fun realSOPButtonEvent(buttonName: String,buttonStatus: Boolean,plateNumber: String,
carSn: String,mapVersion: String,eyeVersion: String){
val clickButtonParams = HashMap<String,Any>()
clickButtonParams[eventParamButtonName] = buttonName
clickButtonParams[eventParamButtonStatus] = buttonStatus
clickButtonParams[eventParamPlateNumber] = plateNumber
clickButtonParams[eventParamCarSn] = carSn
clickButtonParams[eventParamMapVersion] = mapVersion
clickButtonParams[eventParamEyeVersion] = eyeVersion
MogoAnalyticUtils.track(sopButtonClick,clickButtonParams)
}
/**
* 运营面板开关点击状态统计
* @param buttonName 开关名称
* @param buttonStatus 开关状态
*/
fun clickEventAnalytics(buttonName: String, buttonStatus: Boolean){
realSOPButtonEvent(buttonName,buttonStatus, AppConfigInfo.plateNumber,
SharedPrefsMgr.getInstance().sn,
CallerAutoPilotStatusListenerManager.getDockerVersion() ?: "",
AppUtils.getAppVersionName())
}
}

View File

@@ -142,6 +142,10 @@ class RoadV2NEventWindowView @JvmOverloads constructor(
)
tvV2XHintContent.layoutParams = tvV2XHintContentLayoutParams
tvV2XHintContent.setTextColor(Color.parseColor("#131415"))
tvV2XHintContent.setTextSize(
TypedValue.COMPLEX_UNIT_PX,
AutoSizeUtils.dp2px(context, 28f).toFloat()
)
tvV2XHintContent.setPadding(0, 0, 0, AutoSizeUtils.dp2px(context, 28f))
val containerImageAndLiveVideoLayoutParams =
@@ -210,28 +214,32 @@ class RoadV2NEventWindowView @JvmOverloads constructor(
containerIconHintLayoutParams.width = LayoutParams.MATCH_PARENT
containerIconHintLayoutParams.height = LayoutParams.WRAP_CONTENT
containerIconHintLayoutParams.setMargins(
AutoSizeUtils.dp2px(context, 30f),
AutoSizeUtils.dp2px(context, 31f),
AutoSizeUtils.dp2px(context, 30f),
AutoSizeUtils.dp2px(context, 30f - 22f),
AutoSizeUtils.dp2px(context, 31f - 15f),
AutoSizeUtils.dp2px(context, 30f - 22f),
0
)
containerIconHint.layoutParams = containerIconHintLayoutParams
val ivV2XImageLayoutParams = ivV2XImage.layoutParams as RelativeLayout.LayoutParams
ivV2XImageLayoutParams.width = AutoSizeUtils.dp2px(context, 84f)
ivV2XImageLayoutParams.height = AutoSizeUtils.dp2px(context, 84f)
ivV2XImageLayoutParams.width = AutoSizeUtils.dp2px(context, 84f + 22f + 22f)
ivV2XImageLayoutParams.height = AutoSizeUtils.dp2px(context, 84f + 15f + 29f)
ivV2XImage.layoutParams = ivV2XImageLayoutParams
val tvV2XHintContentLayoutParams =
tvV2XHintContent.layoutParams as RelativeLayout.LayoutParams
tvV2XHintContentLayoutParams.setMargins(
AutoSizeUtils.dp2px(context, 32f),
0,
AutoSizeUtils.dp2px(context, 15f),
AutoSizeUtils.dp2px(context, 20f - 22f),
AutoSizeUtils.dp2px(context, (42f + 15f) - (46f / 2f)),
AutoSizeUtils.dp2px(context, 5f),
0
)
tvV2XHintContent.layoutParams = tvV2XHintContentLayoutParams
tvV2XHintContent.setTextColor(Color.parseColor("#FFFFFF"))
tvV2XHintContent.setTextSize(
TypedValue.COMPLEX_UNIT_PX,
AutoSizeUtils.dp2px(context, 32f).toFloat()
)
val containerImageAndLiveVideoLayoutParams =
containerImageAndLiveVideo.layoutParams as ConstraintLayout.LayoutParams
@@ -239,7 +247,7 @@ class RoadV2NEventWindowView @JvmOverloads constructor(
containerImageAndLiveVideoLayoutParams.height = AutoSizeUtils.dp2px(context, 300f)
containerImageAndLiveVideoLayoutParams.setMargins(
AutoSizeUtils.dp2px(context, 30f),
AutoSizeUtils.dp2px(context, 30f),
AutoSizeUtils.dp2px(context, 30f - 29f),
AutoSizeUtils.dp2px(context, 30f),
0
)

View File

@@ -16,7 +16,6 @@ import com.mogo.eagle.core.function.call.v2x.CallerTrafficLightListenerManager
import com.mogo.eagle.core.function.hmi.R
import com.mogo.eagle.core.utilcode.util.ThreadUtils
import com.mogo.eagle.core.utilcode.util.UiThreadHandler
import java.util.LinkedList
/**
* 融合红绿灯View
@@ -45,6 +44,8 @@ class FusionTrafficLightView @JvmOverloads constructor(
private var currentLightState = TrafficLightEnum.BLACK //当前灯态
private var currentLightDuration = 0 //当前灯态倒计时
private var previousLightStatus = TrafficLightEnum.BLACK //上一帧灯态
private var previousLightDuration = 0 //上一帧灯态倒计时
private var redLightRoundNum = 0 //当前路口红灯出现的轮数
private var greenLightRoundNum = 0 //当前路口绿灯出现的轮数
@@ -82,11 +83,11 @@ class FusionTrafficLightView @JvmOverloads constructor(
override fun disableTrafficLight() {
super.disableTrafficLight()
UiThreadHandler.post{
mCurrentLightId = TrafficLightEnum.BLACK
this@FusionTrafficLightView.visibility = GONE
CallerHmiViewControlListenerManager.invokeV2XEvent(View.GONE, TAG)
//将灯态轮归零
returnToZero()
resetLight()
}
}
@@ -99,11 +100,21 @@ class FusionTrafficLightView @JvmOverloads constructor(
yellowLightRoundNum = 0 //当前路口黄灯出现的轮数
}
/**
* 重置灯态
*/
private fun resetLight(){
currentLightState = TrafficLightEnum.BLACK
currentLightDuration = 0
previousLightStatus = TrafficLightEnum.BLACK
previousLightDuration = 0
}
/**
* 判断是否进入新的一轮灯态
* @param currentState 当前灯态
*/
private fun judgeRoundNun(currentState: TrafficLightEnum): Boolean{
private fun judgeRoundNum(currentState: TrafficLightEnum): Boolean{
if(currentLightState == currentState){
return false
}else{
@@ -155,8 +166,30 @@ class FusionTrafficLightView @JvmOverloads constructor(
if(this@FusionTrafficLightView.visibility == View.GONE && currentDuration < 1){
return@runOnUiThread
}
/**
* 如果红绿灯显示过程中遇到突然灯态发生改变即当前灯态未倒计时完成灯态发生变化
* (正常情况下不会出现此情况,兼容异常状态)
* 重置灯态占比和指针指向
*/
if(previousLightStatus == TrafficLightEnum.BLACK && previousLightDuration == 0
&& currentState != TrafficLightEnum.BLACK && currentDuration != 0){
previousLightStatus = currentState
previousLightDuration = currentDuration
}else{
if((currentState != previousLightStatus && previousLightDuration >1)
|| (currentState == previousLightStatus && previousLightDuration < currentDuration)){
//灯态未倒计时到1灯态发生变化正常情况是倒计时到0考虑到可能存在的异常情况倒计时到1也算正常
returnToZero()
resetLight()
}else{
previousLightStatus = currentState
previousLightDuration = currentDuration
}
}
//如果当前红绿灯视图为隐藏状态则设置为显示状态
if(judgeRoundNun(currentState)){
if(judgeRoundNum(currentState)){
if(this@FusionTrafficLightView.visibility == View.GONE){
this@FusionTrafficLightView.visibility = View.VISIBLE
}