|
|
|
|
@@ -4,7 +4,6 @@ import android.content.Context
|
|
|
|
|
import android.util.AttributeSet
|
|
|
|
|
import android.view.LayoutInflater
|
|
|
|
|
import android.view.View
|
|
|
|
|
import android.widget.*
|
|
|
|
|
import androidx.constraintlayout.widget.ConstraintLayout
|
|
|
|
|
import com.mogo.eagle.core.data.config.FunctionBuildConfig
|
|
|
|
|
import com.mogo.eagle.core.data.config.HmiBuildConfig
|
|
|
|
|
@@ -21,18 +20,17 @@ import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotControlManager
|
|
|
|
|
import com.mogo.eagle.core.function.call.autopilot.CallerAutopilotGetParamResponseDispatcher
|
|
|
|
|
import com.mogo.eagle.core.function.call.devatools.*
|
|
|
|
|
import com.mogo.eagle.core.function.call.hmi.CallerHmiManager
|
|
|
|
|
import com.mogo.eagle.core.function.call.obu.CallerObuApiManager
|
|
|
|
|
import com.mogo.eagle.core.function.hmi.R
|
|
|
|
|
import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils
|
|
|
|
|
import com.mogo.eagle.core.utilcode.util.ToastUtils
|
|
|
|
|
import com.mogo.eagle.core.function.call.hmi.CallerHmiViewControlListenerManager
|
|
|
|
|
import com.mogo.eagle.core.function.call.map.CallerMapUIServiceManager
|
|
|
|
|
import com.mogo.eagle.core.function.call.obu.CallerObuApiManager
|
|
|
|
|
import com.mogo.eagle.core.function.call.telematic.CallerTelematicManager
|
|
|
|
|
import com.mogo.eagle.core.function.hmi.ui.utils.HmiActionLog.Companion.hmiAction
|
|
|
|
|
import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils
|
|
|
|
|
import com.mogo.eagle.core.utilcode.util.ThreadUtils
|
|
|
|
|
import com.zhjt.mogo.adas.data.AdasConstants
|
|
|
|
|
import com.zhjt.mogo.adas.data.bean.AdasParam
|
|
|
|
|
import kotlinx.android.synthetic.main.view_sop_setting.view.*
|
|
|
|
|
import kotlinx.android.synthetic.main.view_sop_setting.view.tbRouteDynamicEffect
|
|
|
|
|
import mogo.telematics.pad.MessagePad
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
@@ -57,47 +55,30 @@ internal class SOPSettingView @JvmOverloads constructor(
|
|
|
|
|
|
|
|
|
|
private fun initView() {
|
|
|
|
|
sopLayout.setOnClickListener { }
|
|
|
|
|
tbObstacleAvoidance.isChecked = FunctionBuildConfig.isDetouring
|
|
|
|
|
tbObstacleAvoidance.setOnCheckedChangeListener { _, isChecked ->
|
|
|
|
|
hmiAction("SOP 绕障类功能开关",isChecked)
|
|
|
|
|
CallerAutoPilotControlManager.sendDetouring(isChecked)
|
|
|
|
|
FunctionBuildConfig.isDetouring = isChecked
|
|
|
|
|
//V2X消息设置
|
|
|
|
|
v2xSetting()
|
|
|
|
|
//地图效果类设置
|
|
|
|
|
mapSetting()
|
|
|
|
|
//与车相关类设置
|
|
|
|
|
vehicleSetting()
|
|
|
|
|
//其他类别开关设置
|
|
|
|
|
otherSetting()
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* V2X消息设置
|
|
|
|
|
*/
|
|
|
|
|
private fun v2xSetting(){
|
|
|
|
|
//V2N新链路
|
|
|
|
|
scNewV2NData.isChecked = FunctionBuildConfig.isNewV2NData
|
|
|
|
|
scNewV2NData.setOnCheckedChangeListener { _, isChecked ->
|
|
|
|
|
hmiAction("SOP 是否是V2N新链路(云->工控机->App)",isChecked)
|
|
|
|
|
FunctionBuildConfig.isNewV2NData = isChecked
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
tbMarkingObstacles.isChecked = FunctionBuildConfig.isPNCWarning
|
|
|
|
|
tbMarkingObstacles.setOnCheckedChangeListener { _, isChecked ->
|
|
|
|
|
hmiAction("SOP 危险障碍物颜色标记开关",isChecked)
|
|
|
|
|
FunctionBuildConfig.isPNCWarning = isChecked
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (AppIdentityModeUtils.isBus(FunctionBuildConfig.appIdentityMode)) {
|
|
|
|
|
tbMarkingObstacles.visibility = View.GONE
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
tbRouteDynamicEffect.isChecked = HmiBuildConfig.isShowRouteStrategy
|
|
|
|
|
tbRouteDynamicEffect.setOnCheckedChangeListener { _, isChecked ->
|
|
|
|
|
hmiAction("SOP 引导线动态效果",isChecked)
|
|
|
|
|
HmiBuildConfig.isShowRouteStrategy = isChecked
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//默认开启
|
|
|
|
|
tbObuWeaknessTrafficSop.isChecked = HmiBuildConfig.isShowObuWeaknessTrafficView
|
|
|
|
|
tbObuWeaknessTrafficSop.setOnCheckedChangeListener { _, isChecked ->
|
|
|
|
|
hmiAction("SOP obu弱势交通控制, ",isChecked)
|
|
|
|
|
HmiBuildConfig.isShowObuWeaknessTrafficView = isChecked
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 默认关闭
|
|
|
|
|
*/
|
|
|
|
|
tbCloudWeaknessTrafficSop.isChecked = HmiBuildConfig.isShowCloudWeaknessTrafficView
|
|
|
|
|
tbCloudWeaknessTrafficSop.setOnCheckedChangeListener { _, isChecked ->
|
|
|
|
|
hmiAction("SOP 云端弱势交通控制, ",isChecked)
|
|
|
|
|
HmiBuildConfig.isShowCloudWeaknessTrafficView = isChecked
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
tbV2nPnc.isChecked = FunctionBuildConfig.isV2NPnc
|
|
|
|
|
tbV2nPnc.setOnCheckedChangeListener{ compoundButton, isChecked ->
|
|
|
|
|
//V2N场景进PNC
|
|
|
|
|
scV2nPnc.isChecked = FunctionBuildConfig.isV2NPnc
|
|
|
|
|
scV2nPnc.setOnCheckedChangeListener{ compoundButton, isChecked ->
|
|
|
|
|
if(!compoundButton.isPressed){
|
|
|
|
|
return@setOnCheckedChangeListener
|
|
|
|
|
}
|
|
|
|
|
@@ -106,53 +87,9 @@ internal class SOPSettingView @JvmOverloads constructor(
|
|
|
|
|
FunctionBuildConfig.isV2NPnc = isChecked
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
tbV2iPnc.isChecked = FunctionBuildConfig.isV2IPnc
|
|
|
|
|
tbV2iPnc.setOnCheckedChangeListener{ compoundButton, isChecked ->
|
|
|
|
|
if(!compoundButton.isPressed){
|
|
|
|
|
return@setOnCheckedChangeListener
|
|
|
|
|
}
|
|
|
|
|
hmiAction("SOP V2I场景进PNC, ",isChecked)
|
|
|
|
|
CallerAutoPilotControlManager.sendV2iToPncCmd(isChecked)
|
|
|
|
|
FunctionBuildConfig.isV2IPnc = isChecked
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 默认打开
|
|
|
|
|
*/
|
|
|
|
|
tbObuV2vView.isChecked = HmiBuildConfig.isShowObuV2vView
|
|
|
|
|
tbObuV2vView.setOnCheckedChangeListener { _, isChecked ->
|
|
|
|
|
hmiAction("SOP obuV2V开关, ",isChecked)
|
|
|
|
|
HmiBuildConfig.isShowObuV2vView = isChecked
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 默认打开
|
|
|
|
|
*/
|
|
|
|
|
tbObuV2iView.isChecked = HmiBuildConfig.isShowObuV2iView
|
|
|
|
|
tbObuV2iView.setOnCheckedChangeListener { _, isChecked ->
|
|
|
|
|
hmiAction("SOP obuV2i开关, ",isChecked)
|
|
|
|
|
HmiBuildConfig.isShowObuV2iView = isChecked
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 默认关闭
|
|
|
|
|
*/
|
|
|
|
|
tbRunRedLightSop.isChecked = HmiBuildConfig.isShowRunRedLightView
|
|
|
|
|
tbRunRedLightSop.setOnCheckedChangeListener { _, isChecked ->
|
|
|
|
|
hmiAction("SOP obu闯红灯预警, ",isChecked)
|
|
|
|
|
HmiBuildConfig.isShowRunRedLightView = isChecked
|
|
|
|
|
if (HmiBuildConfig.isShowRunRedLightView) {
|
|
|
|
|
CallerTelematicManager.sendMsgToAllClients(TelematicConstant.OBU_RUNREDLIGHT_WARNING, "1".toByteArray())
|
|
|
|
|
} else {
|
|
|
|
|
CallerTelematicManager.sendMsgToAllClients(TelematicConstant.OBU_RUNREDLIGHT_WARNING, "0".toByteArray())
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 默认关闭
|
|
|
|
|
*/
|
|
|
|
|
tbGreenWaveSop.isChecked = HmiBuildConfig.isShowGreenWaveView
|
|
|
|
|
tbGreenWaveSop.setOnCheckedChangeListener { _, isChecked ->
|
|
|
|
|
//绿波通行(默认关闭)
|
|
|
|
|
scGreenWaveSop.isChecked = HmiBuildConfig.isShowGreenWaveView
|
|
|
|
|
scGreenWaveSop.setOnCheckedChangeListener { _, isChecked ->
|
|
|
|
|
hmiAction("SOP obu绿波通行, ",isChecked)
|
|
|
|
|
HmiBuildConfig.isShowGreenWaveView = isChecked
|
|
|
|
|
if (HmiBuildConfig.isShowGreenWaveView) {
|
|
|
|
|
@@ -162,30 +99,111 @@ internal class SOPSettingView @JvmOverloads constructor(
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
tbTrafficLight.isChecked = !HmiBuildConfig.isShowTrafficLightView
|
|
|
|
|
tbTrafficLight.setOnCheckedChangeListener { _, isChecked ->
|
|
|
|
|
hmiAction("SOP 红绿灯标识开关, ",isChecked)
|
|
|
|
|
if (isChecked) {
|
|
|
|
|
CallerHmiManager.showTrafficLightView()
|
|
|
|
|
//V2I场景进PNC
|
|
|
|
|
scV2iPnc.isChecked = FunctionBuildConfig.isV2IPnc
|
|
|
|
|
scV2iPnc.setOnCheckedChangeListener{ compoundButton, isChecked ->
|
|
|
|
|
if(!compoundButton.isPressed){
|
|
|
|
|
return@setOnCheckedChangeListener
|
|
|
|
|
}
|
|
|
|
|
hmiAction("SOP V2I场景进PNC, ",isChecked)
|
|
|
|
|
CallerAutoPilotControlManager.sendV2iToPncCmd(isChecked)
|
|
|
|
|
FunctionBuildConfig.isV2IPnc = isChecked
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//闯红灯预警(默认关闭)
|
|
|
|
|
scRunRedLightSop.isChecked = HmiBuildConfig.isShowRunRedLightView
|
|
|
|
|
scRunRedLightSop.setOnCheckedChangeListener { _, isChecked ->
|
|
|
|
|
hmiAction("SOP obu闯红灯预警, ",isChecked)
|
|
|
|
|
HmiBuildConfig.isShowRunRedLightView = isChecked
|
|
|
|
|
if (HmiBuildConfig.isShowRunRedLightView) {
|
|
|
|
|
CallerTelematicManager.sendMsgToAllClients(TelematicConstant.OBU_RUNREDLIGHT_WARNING, "1".toByteArray())
|
|
|
|
|
} else {
|
|
|
|
|
CallerHmiManager.hideTrafficLightView()
|
|
|
|
|
CallerTelematicManager.sendMsgToAllClients(TelematicConstant.OBU_RUNREDLIGHT_WARNING, "0".toByteArray())
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
tbSpeedLimit.isChecked = HmiBuildConfig.isShowLimitingVelocityView
|
|
|
|
|
tbSpeedLimit.setOnCheckedChangeListener { _, isChecked ->
|
|
|
|
|
hmiAction("SOP 限速标识开关, ",isChecked)
|
|
|
|
|
//路侧弱势交通参与者(默认开启)
|
|
|
|
|
scObuWeaknessTrafficSop.isChecked = HmiBuildConfig.isShowObuWeaknessTrafficView
|
|
|
|
|
scObuWeaknessTrafficSop.setOnCheckedChangeListener { _, isChecked ->
|
|
|
|
|
hmiAction("SOP obu弱势交通控制, ",isChecked)
|
|
|
|
|
HmiBuildConfig.isShowObuWeaknessTrafficView = isChecked
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//V2V总开关(默认关闭)
|
|
|
|
|
scObuV2vView.isChecked = HmiBuildConfig.isShowObuV2vView
|
|
|
|
|
scObuV2vView.setOnCheckedChangeListener { _, isChecked ->
|
|
|
|
|
hmiAction("SOP obuV2V开关, ",isChecked)
|
|
|
|
|
HmiBuildConfig.isShowObuV2vView = isChecked
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//obu总开关
|
|
|
|
|
scObu.isChecked = CallerObuApiManager.isConnected()
|
|
|
|
|
scObu.setOnCheckedChangeListener { _, isChecked ->
|
|
|
|
|
hmiAction("SOP OBU控制总开关, ",isChecked)
|
|
|
|
|
if (isChecked) {
|
|
|
|
|
HmiBuildConfig.isShowLimitingVelocityView = true
|
|
|
|
|
CallerObuApiManager.resetObuIpAddress(MogoObuConst.OBU_DEFAULT_IP)
|
|
|
|
|
} else {
|
|
|
|
|
HmiBuildConfig.isShowLimitingVelocityView = false
|
|
|
|
|
CallerHmiViewControlListenerManager.invokeVisible(IViewControlListener.LimitingVelocityView_TAG,View.GONE)
|
|
|
|
|
//断开链接
|
|
|
|
|
CallerObuApiManager.disConnectObu()
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 地图效果类设置
|
|
|
|
|
*/
|
|
|
|
|
private fun mapSetting(){
|
|
|
|
|
//危险障碍物颜色标记开关
|
|
|
|
|
scMarkingObstacles.isChecked = FunctionBuildConfig.isPNCWarning
|
|
|
|
|
scMarkingObstacles.setOnCheckedChangeListener { _, isChecked ->
|
|
|
|
|
hmiAction("SOP 危险障碍物颜色标记开关",isChecked)
|
|
|
|
|
FunctionBuildConfig.isPNCWarning = isChecked
|
|
|
|
|
}
|
|
|
|
|
if (AppIdentityModeUtils.isBus(FunctionBuildConfig.appIdentityMode)) {
|
|
|
|
|
scMarkingObstacles.isEnabled = false
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//引导线动态效果
|
|
|
|
|
scRouteDynamicEffect.isChecked = HmiBuildConfig.isShowRouteStrategy
|
|
|
|
|
scRouteDynamicEffect.setOnCheckedChangeListener { _, isChecked ->
|
|
|
|
|
hmiAction("SOP 引导线动态效果",isChecked)
|
|
|
|
|
HmiBuildConfig.isShowRouteStrategy = isChecked
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//点云效果
|
|
|
|
|
//初始化点云数据渲染情况
|
|
|
|
|
scDrawPointCloudData.isChecked = FunctionBuildConfig.isDrawPointCloudData
|
|
|
|
|
//是否渲染点云数据
|
|
|
|
|
scDrawPointCloudData.setOnCheckedChangeListener { _, isChecked ->
|
|
|
|
|
CallerAutoPilotControlManager.setIsDrawPointCloud(isChecked)
|
|
|
|
|
FunctionBuildConfig.isDrawPointCloudData = isChecked
|
|
|
|
|
CallerMapUIServiceManager.getMapUIController()?.setIsDrawPointCloud(isChecked)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//自车光圈
|
|
|
|
|
scCarAperture.isChecked = FunctionBuildConfig.isDisplayAnimEnable
|
|
|
|
|
scCarAperture.setOnCheckedChangeListener { _, isChecked ->
|
|
|
|
|
CallerMapUIServiceManager.getMapUIController()?.setDisplayAnimEnable(isChecked)
|
|
|
|
|
FunctionBuildConfig.isDisplayAnimEnable = isChecked
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 与车相关类设置
|
|
|
|
|
*/
|
|
|
|
|
private fun vehicleSetting(){
|
|
|
|
|
//绕障类功能
|
|
|
|
|
scObstacleAvoidance.isChecked = FunctionBuildConfig.isDetouring
|
|
|
|
|
scObstacleAvoidance.setOnCheckedChangeListener { _, isChecked ->
|
|
|
|
|
hmiAction("SOP 绕障类功能开关",isChecked)
|
|
|
|
|
CallerAutoPilotControlManager.sendDetouring(isChecked)
|
|
|
|
|
FunctionBuildConfig.isDetouring = isChecked
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 演示模式,上一次勾选的数据
|
|
|
|
|
tbDemoMode.isChecked = FunctionBuildConfig.isDemoMode
|
|
|
|
|
tbDemoMode.setOnCheckedChangeListener { compoundButton, _ ->
|
|
|
|
|
scDemoMode.isChecked = FunctionBuildConfig.isDemoMode
|
|
|
|
|
scDemoMode.setOnCheckedChangeListener { compoundButton, _ ->
|
|
|
|
|
if(!compoundButton.isPressed){
|
|
|
|
|
return@setOnCheckedChangeListener
|
|
|
|
|
}
|
|
|
|
|
@@ -200,12 +218,12 @@ internal class SOPSettingView @JvmOverloads constructor(
|
|
|
|
|
}
|
|
|
|
|
//只在司机端设置美化模式开关功能
|
|
|
|
|
if (AppIdentityModeUtils.isPassenger(FunctionBuildConfig.appIdentityMode)) {
|
|
|
|
|
tbDemoMode.visibility = View.GONE
|
|
|
|
|
scDemoMode.isEnabled = false
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 雨天模式,上一次勾选的数据
|
|
|
|
|
tbRainMode.isChecked = FunctionBuildConfig.isRainMode
|
|
|
|
|
tbRainMode.setOnCheckedChangeListener { compoundButton, isChecked ->
|
|
|
|
|
scRainMode.isChecked = FunctionBuildConfig.isRainMode
|
|
|
|
|
scRainMode.setOnCheckedChangeListener { compoundButton, isChecked ->
|
|
|
|
|
if(!compoundButton.isPressed){
|
|
|
|
|
return@setOnCheckedChangeListener
|
|
|
|
|
}
|
|
|
|
|
@@ -216,72 +234,24 @@ internal class SOPSettingView @JvmOverloads constructor(
|
|
|
|
|
}
|
|
|
|
|
//雨天模式按钮只在司机屏生效,乘客屏不显示
|
|
|
|
|
if (AppIdentityModeUtils.isPassenger(FunctionBuildConfig.appIdentityMode)) {
|
|
|
|
|
tbRainMode.visibility = View.GONE
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
tbObu.isChecked = CallerObuApiManager.isConnected()
|
|
|
|
|
tbObu.setOnCheckedChangeListener { _, isChecked ->
|
|
|
|
|
hmiAction("SOP OBU控制总开关, ",isChecked)
|
|
|
|
|
if (isChecked) {
|
|
|
|
|
CallerObuApiManager.resetObuIpAddress(MogoObuConst.OBU_DEFAULT_IP)
|
|
|
|
|
} else {
|
|
|
|
|
//断开链接
|
|
|
|
|
CallerObuApiManager.disConnectObu()
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tbIPCReport.isChecked = FunctionBuildConfig.isReportWarning
|
|
|
|
|
tbIPCReport.setOnCheckedChangeListener { _, isChecked ->
|
|
|
|
|
hmiAction("SOP 是否开启异常上报, ",isChecked)
|
|
|
|
|
FunctionBuildConfig.isReportWarning = isChecked
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
tbNewV2NData.isChecked = FunctionBuildConfig.isNewV2NData
|
|
|
|
|
tbNewV2NData.setOnCheckedChangeListener { _, isChecked ->
|
|
|
|
|
hmiAction("SOP 是否是V2N新链路(云->工控机->App)",isChecked)
|
|
|
|
|
FunctionBuildConfig.isNewV2NData = isChecked
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// M1 360度环视
|
|
|
|
|
tbNew360LookAround?.also {
|
|
|
|
|
if (!AppIdentityModeUtils.isM1(FunctionBuildConfig.appIdentityMode)) {
|
|
|
|
|
it.isEnabled = false
|
|
|
|
|
} else {
|
|
|
|
|
it.isEnabled = true
|
|
|
|
|
it.setOnCheckedChangeListener { _, isChecked ->
|
|
|
|
|
if (isChecked) {
|
|
|
|
|
CallerHmiManager.showM1360LookAround()
|
|
|
|
|
} else {
|
|
|
|
|
CallerHmiManager.hidM1360LookAround()
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
it.isChecked = CallerHmiManager.isM1360LookAroundShowing()
|
|
|
|
|
}
|
|
|
|
|
scRainMode.visibility = View.GONE
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//弱网减速停车
|
|
|
|
|
tbWeakNetSlowDown.isChecked = FunctionBuildConfig.isWeakNetSlowDown
|
|
|
|
|
tbWeakNetSlowDown.setOnCheckedChangeListener{_, isChecked ->
|
|
|
|
|
scWeakNetSlowDown.isChecked = FunctionBuildConfig.isWeakNetSlowDown
|
|
|
|
|
scWeakNetSlowDown.setOnCheckedChangeListener{_, isChecked ->
|
|
|
|
|
FunctionBuildConfig.isWeakNetSlowDown = isChecked
|
|
|
|
|
CallerAutoPilotControlManager.sendWeakNetSlowDown(isChecked)
|
|
|
|
|
hmiAction("SOP 弱网减速停车, ",isChecked)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//故障减速停车
|
|
|
|
|
tbFaultSlowDown.isChecked = FunctionBuildConfig.isFaultSlowDown
|
|
|
|
|
tbFaultSlowDown.setOnCheckedChangeListener{_, isChecked ->
|
|
|
|
|
scFaultSlowDown.isChecked = FunctionBuildConfig.isFaultSlowDown
|
|
|
|
|
scFaultSlowDown.setOnCheckedChangeListener{_, isChecked ->
|
|
|
|
|
FunctionBuildConfig.isFaultSlowDown = isChecked
|
|
|
|
|
CallerAutoPilotControlManager.sendBreakdownSlowDown(isChecked)
|
|
|
|
|
hmiAction("SOP 故障减速停车, ",isChecked)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//是否展示被动触发的录包弹窗(自动驾驶下出现问题触发的录包)
|
|
|
|
|
tbShowBagRecordWindow.isChecked = FunctionBuildConfig.isShowBagRecordWindow
|
|
|
|
|
tbShowBagRecordWindow.setOnCheckedChangeListener{_, isChecked ->
|
|
|
|
|
FunctionBuildConfig.isShowBagRecordWindow = isChecked
|
|
|
|
|
hmiAction("SOP 是否展示被动触发的录包弹窗, ",isChecked)
|
|
|
|
|
}
|
|
|
|
|
//融合模式
|
|
|
|
|
rgFusionMode.setOnCheckedChangeListener { _, p1 ->
|
|
|
|
|
when(p1){
|
|
|
|
|
@@ -308,93 +278,69 @@ internal class SOPSettingView @JvmOverloads constructor(
|
|
|
|
|
}
|
|
|
|
|
CallerAutoPilotControlManager.sendFusionMode(FunctionBuildConfig.fusionMode)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//变道绕障的目标障碍物速度阈值
|
|
|
|
|
tvSpeed.text = "${FunctionBuildConfig.detouringSpeed} m/s"
|
|
|
|
|
ivSpeedReduce.setOnClickListener {
|
|
|
|
|
if (FunctionBuildConfig.detouringSpeed <= 3) {
|
|
|
|
|
ToastUtils.showShort("阈值最小可为3 m/s")
|
|
|
|
|
/**
|
|
|
|
|
* 其他类别开关设置
|
|
|
|
|
*/
|
|
|
|
|
private fun otherSetting(){
|
|
|
|
|
//红绿灯标识开关
|
|
|
|
|
scTrafficLight.isChecked = !HmiBuildConfig.isShowTrafficLightView
|
|
|
|
|
scTrafficLight.setOnCheckedChangeListener { _, isChecked ->
|
|
|
|
|
hmiAction("SOP 红绿灯标识开关, ",isChecked)
|
|
|
|
|
if (isChecked) {
|
|
|
|
|
CallerHmiManager.showTrafficLightView()
|
|
|
|
|
} else {
|
|
|
|
|
FunctionBuildConfig.detouringSpeed--
|
|
|
|
|
tvSpeed.text = "${FunctionBuildConfig.detouringSpeed} m/s"
|
|
|
|
|
}
|
|
|
|
|
hmiAction("SOP 变道绕障的目标障碍物速度阈值",FunctionBuildConfig.detouringSpeed)
|
|
|
|
|
}
|
|
|
|
|
ivSpeedAdd.setOnClickListener {
|
|
|
|
|
if (FunctionBuildConfig.detouringSpeed >= 7) {
|
|
|
|
|
ToastUtils.showShort("阈值最大可为7 m/s")
|
|
|
|
|
} else {
|
|
|
|
|
FunctionBuildConfig.detouringSpeed++
|
|
|
|
|
tvSpeed.text = "${FunctionBuildConfig.detouringSpeed} m/s"
|
|
|
|
|
}
|
|
|
|
|
hmiAction("SOP 变道绕障的目标障碍物速度阈值",FunctionBuildConfig.detouringSpeed)
|
|
|
|
|
}
|
|
|
|
|
btnSpeedSet.setOnClickListener {
|
|
|
|
|
val isSuccess =
|
|
|
|
|
CallerAutoPilotControlManager.sendDetouringSpeed(FunctionBuildConfig.detouringSpeed.toDouble())
|
|
|
|
|
if (isSuccess == true) {
|
|
|
|
|
ToastUtils.showShort("变道绕障的目标障碍物速度阈值设置成功")
|
|
|
|
|
hmiAction("SOP 变道绕障的目标障碍物速度阈值设置","成功")
|
|
|
|
|
} else {
|
|
|
|
|
ToastUtils.showShort("变道绕障的目标障碍物速度阈值设置失败")
|
|
|
|
|
hmiAction("SOP 变道绕障的目标障碍物速度阈值设置","失败")
|
|
|
|
|
CallerHmiManager.hideTrafficLightView()
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (AppIdentityModeUtils.isBus(FunctionBuildConfig.appIdentityMode)) {
|
|
|
|
|
tvSpeedThresholdTitle.visibility = View.GONE
|
|
|
|
|
ivSpeedReduce.visibility = View.GONE
|
|
|
|
|
tvSpeed.visibility = View.GONE
|
|
|
|
|
ivSpeedAdd.visibility = View.GONE
|
|
|
|
|
btnSpeedSet.visibility = View.GONE
|
|
|
|
|
//限速标识
|
|
|
|
|
scSpeedLimit.isChecked = HmiBuildConfig.isShowLimitingVelocityView
|
|
|
|
|
scSpeedLimit.setOnCheckedChangeListener { _, isChecked ->
|
|
|
|
|
hmiAction("SOP 限速标识开关, ",isChecked)
|
|
|
|
|
if (isChecked) {
|
|
|
|
|
HmiBuildConfig.isShowLimitingVelocityView = true
|
|
|
|
|
} else {
|
|
|
|
|
HmiBuildConfig.isShowLimitingVelocityView = false
|
|
|
|
|
CallerHmiViewControlListenerManager.invokeVisible(IViewControlListener.LimitingVelocityView_TAG,View.GONE)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 魔方sop运营相关配置
|
|
|
|
|
*/
|
|
|
|
|
if (AppIdentityModeUtils.isDriver(FunctionBuildConfig.appIdentityMode)) {
|
|
|
|
|
val mf = CallerDevaToolsManager.mofang()
|
|
|
|
|
if (mf != null) {
|
|
|
|
|
mfStatusLayout.setClickEnabled(true)
|
|
|
|
|
mfStatusLayout.setClickedTextAndTag(if (mf.isConnected()) "断开魔方连接" else "开始连接魔方", if (mf.isConnected()) 0 else 1)
|
|
|
|
|
mf.registerMoFangStatusListener(TAG, this)
|
|
|
|
|
mfStatusLayout.setOnClickCallback {
|
|
|
|
|
val tag = it.tag as? Int
|
|
|
|
|
if (tag == 0) {
|
|
|
|
|
//断开魔方连接
|
|
|
|
|
if (!mf.isConnected()) {
|
|
|
|
|
Toast.makeText(context, "尚未建立连接", Toast.LENGTH_SHORT).show()
|
|
|
|
|
return@setOnClickCallback
|
|
|
|
|
}
|
|
|
|
|
mfStatusLayout.showLoadingView()
|
|
|
|
|
mfStatusLayout.setLoadingViewText("正在断开魔方连接, 请稍候...")
|
|
|
|
|
mf.disconnect()
|
|
|
|
|
}
|
|
|
|
|
if (tag == 1) {
|
|
|
|
|
//建立魔方连接
|
|
|
|
|
if (mf.isConnected()) {
|
|
|
|
|
Toast.makeText(context, "已连接,不要重复连接", Toast.LENGTH_SHORT).show()
|
|
|
|
|
return@setOnClickCallback
|
|
|
|
|
}
|
|
|
|
|
mf.connect()
|
|
|
|
|
mfStatusLayout.showLoadingView()
|
|
|
|
|
mfStatusLayout.setLoadingViewText("正在连接魔方, 请稍候")
|
|
|
|
|
//异常上报提示
|
|
|
|
|
scIPCReport.isChecked = FunctionBuildConfig.isReportWarning
|
|
|
|
|
scIPCReport.setOnCheckedChangeListener { _, isChecked ->
|
|
|
|
|
hmiAction("SOP 是否开启异常上报, ",isChecked)
|
|
|
|
|
FunctionBuildConfig.isReportWarning = isChecked
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// M1 360度环视
|
|
|
|
|
scNew360LookAround?.also {
|
|
|
|
|
if (!AppIdentityModeUtils.isM1(FunctionBuildConfig.appIdentityMode)) {
|
|
|
|
|
it.isEnabled = false
|
|
|
|
|
} else {
|
|
|
|
|
it.isEnabled = true
|
|
|
|
|
it.setOnCheckedChangeListener { _, isChecked ->
|
|
|
|
|
if (isChecked) {
|
|
|
|
|
CallerHmiManager.showM1360LookAround()
|
|
|
|
|
} else {
|
|
|
|
|
CallerHmiManager.hidM1360LookAround()
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
it.isChecked = CallerHmiManager.isM1360LookAroundShowing()
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
mfTest.isEnabled = mf?.isConnected() ?: false
|
|
|
|
|
mfTest.isChecked = mf?.isEnableTest() ?: false
|
|
|
|
|
mfTest.setOnCheckedChangeListener { _, isChecked ->
|
|
|
|
|
mf?.enableTest(isChecked)
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
mfStatusLayout.setClickEnabled(false)
|
|
|
|
|
mfTest.isEnabled = false
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//是否展示被动触发的录包弹窗(自动驾驶下出现问题触发的录包)
|
|
|
|
|
scShowBagRecordWindow.isChecked = FunctionBuildConfig.isShowBagRecordWindow
|
|
|
|
|
scShowBagRecordWindow.setOnCheckedChangeListener{_, isChecked ->
|
|
|
|
|
FunctionBuildConfig.isShowBagRecordWindow = isChecked
|
|
|
|
|
hmiAction("SOP 是否展示被动触发的录包弹窗, ",isChecked)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
override fun onAttachedToWindow() {
|
|
|
|
|
super.onAttachedToWindow()
|
|
|
|
|
//添加 业务配置监听
|
|
|
|
|
@@ -410,10 +356,10 @@ internal class SOPSettingView @JvmOverloads constructor(
|
|
|
|
|
override fun updateFuncMode(tag: String, boolean: Boolean) {
|
|
|
|
|
super.updateFuncMode(tag, boolean)
|
|
|
|
|
if(tag == FUNC_MODE_DEMO){
|
|
|
|
|
tbDemoMode.isChecked = FunctionBuildConfig.isDemoMode
|
|
|
|
|
scDemoMode.isChecked = FunctionBuildConfig.isDemoMode
|
|
|
|
|
}
|
|
|
|
|
if(tag == FUNC_MODE_RAIN){
|
|
|
|
|
tbRainMode.isChecked = FunctionBuildConfig.isRainMode
|
|
|
|
|
scRainMode.isChecked = FunctionBuildConfig.isRainMode
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@@ -426,61 +372,55 @@ internal class SOPSettingView @JvmOverloads constructor(
|
|
|
|
|
CallerDevaToolsManager.mofang()?.unRegisterMoFangStatusListener(this)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// private val timerTaskRefresh = object : TimerTask(){
|
|
|
|
|
// override fun run() {
|
|
|
|
|
// UiThreadHandler.post{
|
|
|
|
|
// tbDemoMode.isChecked = FunctionBuildConfig.isDemoMode
|
|
|
|
|
// tbRainMode.isChecked = FunctionBuildConfig.isRainMode
|
|
|
|
|
// }
|
|
|
|
|
// }
|
|
|
|
|
//
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
override fun updateBizView(type: String, lock: Boolean) {
|
|
|
|
|
when (type) {
|
|
|
|
|
//美化模式
|
|
|
|
|
FuncBizConfig.BIZ_BEAUTY_MODE -> {
|
|
|
|
|
tbDemoMode.isClickable = !lock
|
|
|
|
|
scDemoMode.isClickable = !lock
|
|
|
|
|
if(lock){
|
|
|
|
|
tbDemoMode.visibility = View.INVISIBLE
|
|
|
|
|
scDemoMode.visibility = View.INVISIBLE
|
|
|
|
|
}else{
|
|
|
|
|
tbDemoMode.visibility = View.VISIBLE
|
|
|
|
|
scDemoMode.visibility = View.VISIBLE
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//雨天模式
|
|
|
|
|
FuncBizConfig.BIZ_RAIN_MODE -> {
|
|
|
|
|
tbRainMode.isClickable = !lock
|
|
|
|
|
scRainMode.isClickable = !lock
|
|
|
|
|
if (lock) {
|
|
|
|
|
tbRainMode.visibility = View.INVISIBLE
|
|
|
|
|
scRainMode.visibility = View.INVISIBLE
|
|
|
|
|
} else {
|
|
|
|
|
tbRainMode.visibility = View.VISIBLE
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
FuncBizConfig.BIZ_PNC_WARNING -> {
|
|
|
|
|
tbMarkingObstacles.isClickable = !lock
|
|
|
|
|
if (lock) {
|
|
|
|
|
tbMarkingObstacles.visibility = View.INVISIBLE
|
|
|
|
|
} else {
|
|
|
|
|
tbMarkingObstacles.visibility = View.VISIBLE
|
|
|
|
|
scRainMode.visibility = View.VISIBLE
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// FuncBizConfig.BIZ_PNC_WARNING -> {
|
|
|
|
|
// tbMarkingObstacles.isClickable = !lock
|
|
|
|
|
// if (lock) {
|
|
|
|
|
// tbMarkingObstacles.visibility = View.INVISIBLE
|
|
|
|
|
// } else {
|
|
|
|
|
// tbMarkingObstacles.visibility = View.VISIBLE
|
|
|
|
|
// }
|
|
|
|
|
// }
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
override fun onMoFangConnected() {
|
|
|
|
|
mfStatusLayout?.also {
|
|
|
|
|
it.hideLoadingView()
|
|
|
|
|
it.setClickedTextAndTag("断开魔方连接", 0)
|
|
|
|
|
mfTest?.isEnabled = true
|
|
|
|
|
mfTest?.isChecked = CallerDevaToolsManager.mofang()?.isEnableTest() ?: false
|
|
|
|
|
}
|
|
|
|
|
// mfStatusLayout?.also {
|
|
|
|
|
// it.hideLoadingView()
|
|
|
|
|
// it.setClickedTextAndTag("断开魔方连接", 0)
|
|
|
|
|
// mfTest?.isEnabled = true
|
|
|
|
|
// mfTest?.isChecked = CallerDevaToolsManager.mofang()?.isEnableTest() ?: false
|
|
|
|
|
// }
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
override fun onMoFangDisconnected() {
|
|
|
|
|
mfStatusLayout?.also {
|
|
|
|
|
it.hideLoadingView()
|
|
|
|
|
it.setClickedTextAndTag("开始连接魔方", 1)
|
|
|
|
|
mfTest?.isEnabled = false
|
|
|
|
|
}
|
|
|
|
|
// mfStatusLayout?.also {
|
|
|
|
|
// it.hideLoadingView()
|
|
|
|
|
// it.setClickedTextAndTag("开始连接魔方", 1)
|
|
|
|
|
// mfTest?.isEnabled = false
|
|
|
|
|
// }
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
override fun onMoFangBatteryChanged(battery: Int) {
|
|
|
|
|
|