[8.2.4][hmi][运营面板-车辆相关] AIP按钮与驾驶模式按钮自驾命令下发超时功能

This commit is contained in:
xinfengkun
2025-09-17 15:44:17 +08:00
parent 7c7f8d6f5b
commit fe316b7d68

View File

@@ -1511,7 +1511,11 @@ class OperatePanelLayout : LinearLayout {
private const val TAG = "VehiclesPreferenceFragmentCompat"
private const val IS_CHECKED_DRIVING_STYLE = "is_checked_driving_style"
private const val WHAT_UPDATE_ENABLE = 0x01//更新按钮状态
private const val WHAT_UPDATE_ENABLE = 0x00//更新按钮状态
private const val WHAT_SEND_AIP_FUNCTION_TIMEOUT = 0x01//发送AIP命令接收结果超时 发送主动查询AIP命令
private const val WHAT_SEND_AIP_FUNCTION_TIMEOUT_RESEND_GET = 0x02//发送主动查询AIP命令接收结果超时
private const val WHAT_SEND_DRIVING_STYLE_TIMEOUT = 0x03//发送驾驶模式命令接收结果超时 发送主动查询驾驶模式命令
private const val WHAT_SEND_DRIVING_STYLE_TIMEOUT_RESEND_GET = 0x04//发送主动查询驾驶模式命令接收结果超时
private const val KEY_PNC_PARK_INTERSECTION_CAR = "pnc_park_intersection_car"
private const val KEY_PNC_PARK_OVERTAKE_CAR = "pnc_park_overtake_car"
@@ -1608,7 +1612,7 @@ class OperatePanelLayout : LinearLayout {
override fun onPause() {
super.onPause()
vehIsShow = false
handler.removeMessages(WHAT_UPDATE_ENABLE)
handler.removeCallbacksAndMessages(null)
customToast?.cancel()
customToast = null
}
@@ -1616,23 +1620,122 @@ class OperatePanelLayout : LinearLayout {
private val handler = object : Handler(Looper.getMainLooper()) {
override fun handleMessage(msg: Message) {
super.handleMessage(msg)
if (msg.what == WHAT_UPDATE_ENABLE) {
if (this.hasMessages(WHAT_UPDATE_ENABLE)) {
this.removeMessages(WHAT_UPDATE_ENABLE)
when (msg.what) {
WHAT_UPDATE_ENABLE -> {
if (this.hasMessages(WHAT_UPDATE_ENABLE)) {
this.removeMessages(WHAT_UPDATE_ENABLE)
}
setEnableStatus(AppConfigInfo.isConnectAutopilot)
if (AppConfigInfo.isConnectAutopilot) {
updateAutopilotActiveBtnDisableState()
customToast?.cancel()
customToast = null
} else {
showConnectToast()
this.sendEmptyMessageDelayed(WHAT_UPDATE_ENABLE, 5000)
}
}
setEnableStatus(AppConfigInfo.isConnectAutopilot)
if (AppConfigInfo.isConnectAutopilot) {
updateAutopilotActiveBtnDisableState()
customToast?.cancel()
customToast = null
} else {
showConnectToast()
this.sendEmptyMessageDelayed(WHAT_UPDATE_ENABLE, 5000)
WHAT_SEND_AIP_FUNCTION_TIMEOUT -> {
removeWhatAipFunction()
CallerAutoPilotControlManager.sendGetParamReq(AdasConstants.MapSystemParamType.ACTIVATE_AIP)
this.sendEmptyMessageDelayed(WHAT_SEND_AIP_FUNCTION_TIMEOUT_RESEND_GET, 1500)
}
WHAT_SEND_AIP_FUNCTION_TIMEOUT_RESEND_GET -> {
removeWhatAipFunction()
preferenceScreen.findPreferenceReal<TwoStatePreference>(
KEY_AIP_FUNCTION
)?.also { it.isChecked = FunctionBuildConfig.isActivateAip }
}
WHAT_SEND_DRIVING_STYLE_TIMEOUT -> {
removeWhatDrivingStyle()
CallerAutoPilotControlManager.sendGetParamReq(AdasConstants.MapSystemParamType.DRIVING_STYLE)
this.sendEmptyMessageDelayed(WHAT_SEND_DRIVING_STYLE_TIMEOUT_RESEND_GET, 1500)
}
WHAT_SEND_DRIVING_STYLE_TIMEOUT_RESEND_GET -> {
removeWhatDrivingStyle()
when (FunctionBuildConfig.drivingStyle) {
0 -> {
//正常模式
prevCheckedKeyForDrivingStyle?.takeIf { it != KEY_DRIVING_STYLE_NORMAL }?.let {
preferenceScreen.findPreferenceReal<TwoStatePreference>(it)
}?.also {
it.isChecked = false
if (it.extras.containsKey(IS_CHECKED_DRIVING_STYLE)) {
it.extras.remove(IS_CHECKED_DRIVING_STYLE)
}
}
prevCheckedKeyForDrivingStyle = KEY_DRIVING_STYLE_NORMAL
preferenceScreen.findPreferenceReal<TwoStatePreference>(KEY_DRIVING_STYLE_NORMAL)
?.also {
it.extras.putBoolean(IS_CHECKED_DRIVING_STYLE, true)
it.isChecked = true
}
}
1 -> {
//安全模式
prevCheckedKeyForDrivingStyle?.takeIf { it != KEY_DRIVING_STYLE_SAFETY }?.let {
preferenceScreen.findPreferenceReal<TwoStatePreference>(it)
}?.also {
it.isChecked = false
if (it.extras.containsKey(IS_CHECKED_DRIVING_STYLE)) {
it.extras.remove(IS_CHECKED_DRIVING_STYLE)
}
}
prevCheckedKeyForDrivingStyle = KEY_DRIVING_STYLE_SAFETY
preferenceScreen.findPreferenceReal<TwoStatePreference>(KEY_DRIVING_STYLE_SAFETY)
?.also {
it.extras.putBoolean(IS_CHECKED_DRIVING_STYLE, true)
it.isChecked = true
}
}
2 -> {
//专业模式
prevCheckedKeyForDrivingStyle?.takeIf { it != KEY_DRIVING_STYLE_PROFESSIONAL }
?.let {
preferenceScreen.findPreferenceReal<TwoStatePreference>(it)
}?.also {
it.isChecked = false
if (it.extras.containsKey(IS_CHECKED_DRIVING_STYLE)) {
it.extras.remove(IS_CHECKED_DRIVING_STYLE)
}
}
prevCheckedKeyForDrivingStyle = KEY_DRIVING_STYLE_PROFESSIONAL
preferenceScreen.findPreferenceReal<TwoStatePreference>(
KEY_DRIVING_STYLE_PROFESSIONAL
)?.also {
it.extras.putBoolean(IS_CHECKED_DRIVING_STYLE, true)
it.isChecked = true
}
}
}
}
else -> {}
}
}
}
private fun removeWhatAipFunction() {
if (handler.hasMessages(WHAT_SEND_AIP_FUNCTION_TIMEOUT)) {
handler.removeMessages(WHAT_SEND_AIP_FUNCTION_TIMEOUT)
}
if (handler.hasMessages(WHAT_SEND_AIP_FUNCTION_TIMEOUT_RESEND_GET)) {
handler.removeMessages(WHAT_SEND_AIP_FUNCTION_TIMEOUT_RESEND_GET)
}
}
private fun removeWhatDrivingStyle() {
if (handler.hasMessages(WHAT_SEND_DRIVING_STYLE_TIMEOUT)) {
handler.removeMessages(WHAT_SEND_DRIVING_STYLE_TIMEOUT)
}
if (handler.hasMessages(WHAT_SEND_DRIVING_STYLE_TIMEOUT_RESEND_GET)) {
handler.removeMessages(WHAT_SEND_DRIVING_STYLE_TIMEOUT_RESEND_GET)
}
}
private fun showConnectToast() {
try {
AppStateManager.currentActivity()?.let {
@@ -1769,7 +1872,10 @@ class OperatePanelLayout : LinearLayout {
override fun onGetParamResp(adasParam: AdasParam) {
super.onGetParamResp(adasParam)
Logger.d(TAG, "-- onGetParamResp --: fusion-mode:${adasParam.fusionMode}, over-take-speed:${adasParam.overtakeMaxSpeed} ")
Logger.d(
TAG,
"-- onGetParamResp --: adasParam.fusionMode:${adasParam.fusionMode}, adasParam.overtakeMaxSpeed:${adasParam.overtakeMaxSpeed}, adasParam.activateAip:${adasParam.activateAip}, adasParam.drivingStyle:${adasParam.drivingStyle}"
)
lifecycleScope.launch {
when(adasParam.fusionMode) {
1 -> {
@@ -1842,59 +1948,61 @@ class OperatePanelLayout : LinearLayout {
FunctionBuildConfig.overTakeSpeed = adasParam.overtakeMaxSpeed
preferenceScreen.findPreferenceReal<PreferenceWithSpeedSetting>(KEY_OVERTAKE_SPEED_THRESHOLDSS)?.update(listOf("3.0", "12.5", "${FunctionBuildConfig.overTakeSpeed}", "0.5", "m/s"))
}
CallerLogger.i(
"VEH onGetParamResp",
"adasParam.activateAip=${adasParam.activateAip} "
)
//AIP功能
if (adasParam.activateAip != -1) {
ThreadUtils.runOnUiThread {
preferenceScreen.findPreferenceReal<TwoStatePreference>(
KEY_AIP_FUNCTION
)?.also { changeValue(it, adasParam.activateAip == 1) }
}
removeWhatAipFunction()
preferenceScreen.findPreferenceReal<TwoStatePreference>(
KEY_AIP_FUNCTION
)?.also { changeValue(it, adasParam.activateAip > 0) }
}
//驾驶模式
when(adasParam.drivingStyle) {
0 -> {
//正常模式
prevCheckedKeyForDrivingStyle?.takeIf { it != KEY_DRIVING_STYLE_NORMAL }?.let {
preferenceScreen.findPreferenceReal<TwoStatePreference>(it)
}?.also {
changeValue(it, false)
if (adasParam.drivingStyle != -1) {
removeWhatDrivingStyle()
when (adasParam.drivingStyle) {
0 -> {
//正常模式
prevCheckedKeyForDrivingStyle?.takeIf { it != KEY_DRIVING_STYLE_NORMAL }?.let {
preferenceScreen.findPreferenceReal<TwoStatePreference>(it)
}?.also {
changeValue(it, false)
}
prevCheckedKeyForDrivingStyle = KEY_DRIVING_STYLE_NORMAL
preferenceScreen.findPreferenceReal<TwoStatePreference>(KEY_DRIVING_STYLE_NORMAL)?.also {
it.extras.putBoolean(IS_CHECKED_DRIVING_STYLE, true)
changeValue(it, true)
}
}
prevCheckedKeyForDrivingStyle = KEY_DRIVING_STYLE_NORMAL
preferenceScreen.findPreferenceReal<TwoStatePreference>(KEY_DRIVING_STYLE_NORMAL)?.also {
it.extras.putBoolean(IS_CHECKED_DRIVING_STYLE, true)
changeValue(it, true)
}
}
1 -> {
//安全模式
prevCheckedKeyForDrivingStyle?.takeIf { it != KEY_DRIVING_STYLE_SAFETY }?.let {
preferenceScreen.findPreferenceReal<TwoStatePreference>(it)
}?.also {
changeValue(it, false)
}
prevCheckedKeyForDrivingStyle = KEY_DRIVING_STYLE_SAFETY
preferenceScreen.findPreferenceReal<TwoStatePreference>(KEY_DRIVING_STYLE_SAFETY)?.also {
it.extras.putBoolean(IS_CHECKED_DRIVING_STYLE, true)
changeValue(it, true)
}
}
2 -> {
//专业模式
prevCheckedKeyForDrivingStyle?.takeIf { it != KEY_DRIVING_STYLE_PROFESSIONAL}?.let {
preferenceScreen.findPreferenceReal<TwoStatePreference>(it)
}?.also {
changeValue(it, false)
}
prevCheckedKeyForDrivingStyle = KEY_DRIVING_STYLE_PROFESSIONAL
preferenceScreen.findPreferenceReal<TwoStatePreference>(KEY_DRIVING_STYLE_PROFESSIONAL)?.also {
it.extras.putBoolean(IS_CHECKED_DRIVING_STYLE, true)
changeValue(it, true)
}
}
1 -> {
//安全模式
prevCheckedKeyForDrivingStyle?.takeIf { it != KEY_DRIVING_STYLE_SAFETY }?.let {
preferenceScreen.findPreferenceReal<TwoStatePreference>(it)
}?.also {
changeValue(it, false)
}
prevCheckedKeyForDrivingStyle = KEY_DRIVING_STYLE_SAFETY
preferenceScreen.findPreferenceReal<TwoStatePreference>(KEY_DRIVING_STYLE_SAFETY)
?.also {
it.extras.putBoolean(IS_CHECKED_DRIVING_STYLE, true)
changeValue(it, true)
}
}
2 -> {
//专业模式
prevCheckedKeyForDrivingStyle?.takeIf { it != KEY_DRIVING_STYLE_PROFESSIONAL }
?.let {
preferenceScreen.findPreferenceReal<TwoStatePreference>(it)
}?.also {
changeValue(it, false)
}
prevCheckedKeyForDrivingStyle = KEY_DRIVING_STYLE_PROFESSIONAL
preferenceScreen.findPreferenceReal<TwoStatePreference>(KEY_DRIVING_STYLE_PROFESSIONAL)?.also {
it.extras.putBoolean(IS_CHECKED_DRIVING_STYLE, true)
changeValue(it, true)
}
}
}
}
}
}
@@ -1971,13 +2079,25 @@ class OperatePanelLayout : LinearLayout {
return FunctionBuildConfig.isActivateAip
}
KEY_DRIVING_STYLE_NORMAL -> {
return FunctionBuildConfig.drivingStyle == 0
val isNormal = FunctionBuildConfig.drivingStyle == 0
if (isNormal) {
prevCheckedKeyForDrivingStyle = KEY_DRIVING_STYLE_NORMAL
}
return isNormal
}
KEY_DRIVING_STYLE_SAFETY -> {
return FunctionBuildConfig.drivingStyle == 1
val isSafety = FunctionBuildConfig.drivingStyle == 1
if (isSafety) {
prevCheckedKeyForDrivingStyle = KEY_DRIVING_STYLE_SAFETY
}
return isSafety
}
KEY_DRIVING_STYLE_PROFESSIONAL -> {
return FunctionBuildConfig.drivingStyle == 2
val isProfessional = FunctionBuildConfig.drivingStyle == 2
if (isProfessional) {
prevCheckedKeyForDrivingStyle = KEY_DRIVING_STYLE_PROFESSIONAL
}
return isProfessional
}
KEY_AUTO_PILOT_SPEED_THRESHOLDS -> {
return listOf("0.0", "60.0", "${FunctionBuildConfig.maxSpeedLimit}", "5.0", "km/h")
@@ -2210,8 +2330,10 @@ class OperatePanelLayout : LinearLayout {
return isChecked
}
KEY_AIP_FUNCTION -> {
removeWhatAipFunction()
val isChecked = newValue as? Boolean ?: false
CallerAutoPilotControlManager.sendActivateAip(isChecked)
handler.sendEmptyMessageDelayed(WHAT_SEND_AIP_FUNCTION_TIMEOUT, 1500)
hmiAction("SOP AIP功能, ", isChecked)
clickEventAnalytics("AIP功能", isChecked)
return true
@@ -2221,17 +2343,20 @@ class OperatePanelLayout : LinearLayout {
preference.extras.remove(IS_CHECKED_DRIVING_STYLE)
return false
}
removeWhatDrivingStyle()
val isChecked = newValue as? Boolean ?: false
if (isChecked) {
prevCheckedKeyForDrivingStyle?.takeIf { it != KEY_DRIVING_STYLE_NORMAL }?.let {
preferenceScreen.findPreferenceReal<TwoStatePreference>(it)
}?.also {
prevCheckedKeyForDrivingStyle?.takeIf { it != KEY_DRIVING_STYLE_NORMAL }
?.let {
preferenceScreen.findPreferenceReal<TwoStatePreference>(it)
}?.also {
changeValue(it, false)
}
prevCheckedKeyForDrivingStyle = KEY_DRIVING_STYLE_NORMAL
CallerAutoPilotControlManager.sendDrivingStyle(0)
handler.sendEmptyMessageDelayed(WHAT_SEND_DRIVING_STYLE_TIMEOUT, 1500)
hmiAction("SOP 驾驶模式-正常模式, ", 0)
clickEventAnalytics("驾驶模式-正常模式", true)
CallerAutoPilotControlManager.sendDrivingStyle(0)
}
return isChecked
}
@@ -2240,38 +2365,44 @@ class OperatePanelLayout : LinearLayout {
preference.extras.remove(IS_CHECKED_DRIVING_STYLE)
return false
}
removeWhatDrivingStyle()
val isChecked = newValue as? Boolean ?: false
if (isChecked) {
prevCheckedKeyForDrivingStyle?.takeIf { it != KEY_DRIVING_STYLE_SAFETY }?.let {
preferenceScreen.findPreferenceReal<TwoStatePreference>(it)
}?.also {
prevCheckedKeyForDrivingStyle?.takeIf { it != KEY_DRIVING_STYLE_SAFETY }
?.let {
preferenceScreen.findPreferenceReal<TwoStatePreference>(it)
}?.also {
changeValue(it, false)
}
prevCheckedKeyForDrivingStyle = KEY_DRIVING_STYLE_SAFETY
CallerAutoPilotControlManager.sendDrivingStyle(1)
handler.sendEmptyMessageDelayed(WHAT_SEND_DRIVING_STYLE_TIMEOUT, 1500)
hmiAction("SOP 驾驶模式-安全模式, ", 1)
clickEventAnalytics("驾驶模式-安全模式", true)
CallerAutoPilotControlManager.sendDrivingStyle(1)
}
return isChecked
}
KEY_DRIVING_STYLE_PROFESSIONAL -> {
if (preference.extras.containsKey(IS_CHECKED_DRIVING_STYLE)) {
preference.extras.remove(IS_CHECKED_DRIVING_STYLE)
return false
}
val isChecked = newValue as? Boolean ?: false
if (isChecked) {
prevCheckedKeyForDrivingStyle?.takeIf { it != KEY_DRIVING_STYLE_PROFESSIONAL }?.let {
preferenceScreen.findPreferenceReal<TwoStatePreference>(it)
}?.also {
changeValue(it, false)
if (preference.extras.containsKey(IS_CHECKED_DRIVING_STYLE)) {
preference.extras.remove(IS_CHECKED_DRIVING_STYLE)
return false
}
prevCheckedKeyForDrivingStyle = KEY_DRIVING_STYLE_PROFESSIONAL
hmiAction("SOP 驾驶模式-专业模式, ", 2)
clickEventAnalytics("驾驶模式-专业模式", true)
CallerAutoPilotControlManager.sendDrivingStyle(2)
}
return isChecked
removeWhatDrivingStyle()
val isChecked = newValue as? Boolean ?: false
if (isChecked) {
prevCheckedKeyForDrivingStyle?.takeIf { it != KEY_DRIVING_STYLE_PROFESSIONAL }
?.let {
preferenceScreen.findPreferenceReal<TwoStatePreference>(it)
}?.also {
changeValue(it, false)
}
prevCheckedKeyForDrivingStyle = KEY_DRIVING_STYLE_PROFESSIONAL
CallerAutoPilotControlManager.sendDrivingStyle(2)
handler.sendEmptyMessageDelayed(WHAT_SEND_DRIVING_STYLE_TIMEOUT, 1500)
hmiAction("SOP 驾驶模式-专业模式, ", 2)
clickEventAnalytics("驾驶模式-专业模式", true)
}
return isChecked
}
}