diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/operate/OperatePanelLayout.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/operate/OperatePanelLayout.kt index dd19d91f7e..dfd6c591e8 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/operate/OperatePanelLayout.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/operate/OperatePanelLayout.kt @@ -25,6 +25,7 @@ import com.mogo.eagle.core.data.config.HmiBuildConfig import com.mogo.eagle.core.data.multidisplay.TelematicConstant import com.mogo.eagle.core.data.obu.MogoObuConst import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotCarConfigListener +import com.mogo.eagle.core.function.api.autopilot.IMoGoGetParamResponseListener import com.mogo.eagle.core.function.api.devatools.mofang.IMoGoMoFangProvider import com.mogo.eagle.core.function.api.hmi.view.IViewControlListener import com.mogo.eagle.core.function.api.hmi.view.IViewControlListener.Companion.FUNC_MODE_DEMO @@ -33,6 +34,7 @@ import com.mogo.eagle.core.function.api.setting.ISopSettingListener import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotControlManager import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager import com.mogo.eagle.core.function.call.autopilot.CallerAutopilotCarConfigListenerManager +import com.mogo.eagle.core.function.call.autopilot.CallerAutopilotGetParamResponseDispatcher import com.mogo.eagle.core.function.call.devatools.CallerDevaToolsManager import com.mogo.eagle.core.function.call.hmi.CallerHmiManager import com.mogo.eagle.core.function.call.hmi.CallerHmiViewControlListenerManager @@ -58,6 +60,8 @@ import com.mogo.eagle.core.utilcode.mogo.vehicle.SweeperVehicleConfigUtils import com.mogo.eagle.core.utilcode.rv.divider.CommonDividerItemDecoration import com.mogo.eagle.core.utilcode.util.AppStateManager import com.mogo.eagle.core.utilcode.util.ToastUtils +import com.zhjt.mogo.adas.data.AdasConstants +import com.zhjt.mogo.adas.data.bean.AdasParam import kotlinx.android.synthetic.main.layout_operate_panel.view.iv_operate_panel_close import kotlinx.coroutines.launch import me.jessyan.autosize.utils.AutoSizeUtils @@ -915,7 +919,7 @@ class OperatePanelLayout : LinearLayout { } } - class VehiclesPreferenceFragmentCompat : OperatePanelDetailBase(), IMoGoAutopilotCarConfigListener, ISopSettingListener, IViewControlListener { + class VehiclesPreferenceFragmentCompat : OperatePanelDetailBase(), IMoGoAutopilotCarConfigListener, ISopSettingListener, IViewControlListener, IMoGoGetParamResponseListener { companion object { private const val TAG = "VehiclesPreferenceFragmentCompat" private const val KEY_PNC_PARK_INTERSECTION_CAR = "pnc_park_intersection_car" @@ -938,15 +942,28 @@ class OperatePanelLayout : LinearLayout { private var prevCheckedKeyForFusionMode: String? = null override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View { + Logger.d(TAG, "--- onCreateView --- 1 ---") if (AppConfigInfo.isConnectAutopilot) { - CallerAutoPilotControlManager.getCarConfig() + Logger.d(TAG, "--- onCreateView --- 2 ---") //获取车辆配置 + CallerAutoPilotControlManager.getCarConfig() //查询融合模式 + CallerAutoPilotControlManager.sendGetParamReq(AdasConstants.MapSystemParamType.FUSION_MODE) + CallerAutoPilotControlManager.sendGetParamReq(AdasConstants.MapSystemParamType.OVERTAKE_MAX_SPEED) } + CallerAutopilotGetParamResponseDispatcher.addListener(TAG, this) CallerAutopilotCarConfigListenerManager.addListener(TAG, this) CallerSopSettingManager.addListener(TAG, this) CallerHmiViewControlListenerManager.addListener(TAG, this) return super.onCreateView(inflater, container, savedInstanceState) } + override fun onDestroyView() { + CallerAutopilotGetParamResponseDispatcher.removeListener(TAG) + CallerAutopilotCarConfigListenerManager.removeListener(TAG) + CallerSopSettingManager.removeListener(TAG) + CallerHmiViewControlListenerManager.removeListener(TAG) + super.onDestroyView() + } + override fun updateFuncMode(tag: String, boolean: Boolean) { super.updateFuncMode(tag, boolean) if (tag == FUNC_MODE_RAIN) { @@ -957,11 +974,86 @@ class OperatePanelLayout : LinearLayout { } } - override fun onDestroyView() { - CallerAutopilotCarConfigListenerManager.removeListener(TAG) - CallerSopSettingManager.removeListener(TAG) - CallerHmiViewControlListenerManager.removeListener(TAG) - super.onDestroyView() + override fun onGetParamResp(header: MessagePad.Header, getParamResp: MessagePad.SetParamReq, adasParam: AdasParam) { + Logger.d(TAG, "-- onGetParamResp --: fusion-mode:${adasParam.fusionMode}, over-take-speed:${adasParam.overtakeMaxSpeed} ") + lifecycleScope.launch { + when(FunctionBuildConfig.fusionMode) { + 1 -> { + //全融合模式 + FunctionBuildConfig.fusionMode = 1 + prevCheckedKeyForFusionMode?.takeIf { it != KEY_ALL_MERGE_MODE }?.let { + preferenceScreen.findPreferenceReal(it) + }?.also { + changeValue(it, false) + } + prevCheckedKeyForFusionMode = KEY_ALL_MERGE_MODE + preferenceScreen.findPreferenceReal(KEY_ALL_MERGE_MODE)?.also { + it.extras.putBoolean("is_checked", true) + changeValue(it, true) + } + } + 2 -> { + //盲区模式 + FunctionBuildConfig.fusionMode = 2 + prevCheckedKeyForFusionMode?.takeIf { it != KEY_BLIND_AREA_MODE }?.let { + preferenceScreen.findPreferenceReal(it) + }?.also { + changeValue(it, false) + } + prevCheckedKeyForFusionMode = KEY_BLIND_AREA_MODE + preferenceScreen.findPreferenceReal(KEY_BLIND_AREA_MODE)?.also { + it.extras.putBoolean("is_checked", true) + changeValue(it, true) + } + } + 3 -> { + //超视距模式 + FunctionBuildConfig.fusionMode = 3 + prevCheckedKeyForFusionMode?.takeIf { it != KEY_BEYOND_VISUAL_RANGE_MODE }?.let { + preferenceScreen.findPreferenceReal(it) + }?.also { + changeValue(it, false) + } + prevCheckedKeyForFusionMode = KEY_BEYOND_VISUAL_RANGE_MODE + preferenceScreen.findPreferenceReal(KEY_BEYOND_VISUAL_RANGE_MODE)?.also { + it.extras.putBoolean("is_checked", true) + changeValue(it, true) + } + } + 4 -> { + //透传模式 + FunctionBuildConfig.fusionMode = 4 + prevCheckedKeyForFusionMode?.takeIf { it != KEY_TRANSPARENT_TRANSFER_MODE }?.let { + preferenceScreen.findPreferenceReal(it) + }?.also { + changeValue(it, false) + } + prevCheckedKeyForFusionMode = KEY_TRANSPARENT_TRANSFER_MODE + preferenceScreen.findPreferenceReal(KEY_TRANSPARENT_TRANSFER_MODE)?.also { + it.extras.putBoolean("is_checked", true) + changeValue(it, true) + } + } + 5 -> { + //纯路侧模式 + FunctionBuildConfig.fusionMode = 5 + prevCheckedKeyForFusionMode?.takeIf { it != KEY_PURE_OBU_MODE }?.let { + preferenceScreen.findPreferenceReal(it) + }?.also { + changeValue(it, false) + } + prevCheckedKeyForFusionMode = KEY_PURE_OBU_MODE + preferenceScreen.findPreferenceReal(KEY_PURE_OBU_MODE)?.also { + it.extras.putBoolean("is_checked", true) + changeValue(it, true) + } + } + } + if (adasParam.overtakeMaxSpeed > 0) { + FunctionBuildConfig.overTakeSpeed = adasParam.overtakeMaxSpeed + preferenceScreen.findPreferenceReal(KEY_OVERTAKE_SPEED_THRESHOLDSS)?.update(listOf("3.0", "12.5", "${FunctionBuildConfig.overTakeSpeed}", "0.5", "m/s")) + } + } } override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { @@ -983,7 +1075,7 @@ class OperatePanelLayout : LinearLayout { lifecycleScope.launch { if (carConfigResp.speedLimit > 0) { FunctionBuildConfig.maxSpeedLimit = min(carConfigResp.speedLimit * 3.6, 60.0) - preferenceScreen.findPreferenceReal(KEY_AUTO_PILOT_SPEED_THRESHOLDS)?.update(listOf("0", "60.0", "${FunctionBuildConfig.maxSpeedLimit}", "5")) + preferenceScreen.findPreferenceReal(KEY_AUTO_PILOT_SPEED_THRESHOLDS)?.update(listOf("0", "60.0", "${FunctionBuildConfig.maxSpeedLimit}", "5", "km/h")) } } } @@ -1018,48 +1110,28 @@ class OperatePanelLayout : LinearLayout { return FunctionBuildConfig.isFaultSlowDown } KEY_ALL_MERGE_MODE -> { - val checked = FunctionBuildConfig.fusionMode == 1 - if (checked) { - prevCheckedKeyForFusionMode = KEY_ALL_MERGE_MODE - } - return checked + return false } KEY_BLIND_AREA_MODE -> { - val checked = FunctionBuildConfig.fusionMode == 2 - if (checked) { - prevCheckedKeyForFusionMode = KEY_BLIND_AREA_MODE - } - return checked + return false } KEY_BEYOND_VISUAL_RANGE_MODE -> { - val checked = FunctionBuildConfig.fusionMode == 3 - if (checked) { - prevCheckedKeyForFusionMode = KEY_BEYOND_VISUAL_RANGE_MODE - } - return checked + return false } KEY_TRANSPARENT_TRANSFER_MODE -> { - val checked = FunctionBuildConfig.fusionMode == 4 - if (checked) { - prevCheckedKeyForFusionMode = KEY_TRANSPARENT_TRANSFER_MODE - } - return checked + return false } KEY_PURE_OBU_MODE -> { - val checked = FunctionBuildConfig.fusionMode == 5 - if (checked) { - prevCheckedKeyForFusionMode = KEY_PURE_OBU_MODE - } - return checked + return false } KEY_AUTO_PILOT_SPEED_THRESHOLDS -> { - return listOf("0.0", "60.0", "${FunctionBuildConfig.maxSpeedLimit}", "5.0") + return listOf("0.0", "60.0", "${FunctionBuildConfig.maxSpeedLimit}", "5.0", "km/h") } KEY_CHANGE_LANE_SPEED_THRESHOLDS -> { - return listOf("3.0", "7.0", "${FunctionBuildConfig.detouringSpeed}", "0.5") + return listOf("3.0", "7.0", "${FunctionBuildConfig.detouringSpeed}", "0.5", "m/s") } KEY_OVERTAKE_SPEED_THRESHOLDSS -> { - return listOf("3.0", "12.5", "${FunctionBuildConfig.overTakeSpeed}", "0.5") + return listOf("3.0", "12.5", "${FunctionBuildConfig.overTakeSpeed}", "0.5", "m/s") } } return super.getDefaultVal(pref) @@ -1181,6 +1253,10 @@ class OperatePanelLayout : LinearLayout { return true } KEY_ALL_MERGE_MODE -> { + if (preference.extras.containsKey("is_checked")) { + preference.extras.remove("is_checked") + return true + } val isChecked = newValue as? Boolean ?: false if (isChecked) { FunctionBuildConfig.fusionMode = 1 @@ -1197,6 +1273,10 @@ class OperatePanelLayout : LinearLayout { return isChecked } KEY_BLIND_AREA_MODE -> { + if (preference.extras.containsKey("is_checked")) { + preference.extras.remove("is_checked") + return true + } val isChecked = newValue as? Boolean ?: false if (isChecked) { FunctionBuildConfig.fusionMode = 2 @@ -1213,15 +1293,19 @@ class OperatePanelLayout : LinearLayout { return isChecked } KEY_BEYOND_VISUAL_RANGE_MODE -> { + if (preference.extras.containsKey("is_checked")) { + preference.extras.remove("is_checked") + return true + } val isChecked = newValue as? Boolean ?: false if (isChecked) { FunctionBuildConfig.fusionMode = 3 prevCheckedKeyForFusionMode?.takeIf { it != KEY_BEYOND_VISUAL_RANGE_MODE }?.let { - preferenceScreen.findPreferenceReal(it) - }?.also { - prevCheckedKeyForFusionMode = KEY_BEYOND_VISUAL_RANGE_MODE - changeValue(it, false) - } + preferenceScreen.findPreferenceReal(it) + }?.also { + prevCheckedKeyForFusionMode = KEY_BEYOND_VISUAL_RANGE_MODE + changeValue(it, false) + } hmiAction("SOP 融合模式, ", FunctionBuildConfig.fusionMode) clickEventAnalytics("融合模式", true) CallerAutoPilotControlManager.sendFusionMode(FunctionBuildConfig.fusionMode) @@ -1229,15 +1313,19 @@ class OperatePanelLayout : LinearLayout { return isChecked } KEY_TRANSPARENT_TRANSFER_MODE -> { + if (preference.extras.containsKey("is_checked")) { + preference.extras.remove("is_checked") + return true + } val isChecked = newValue as? Boolean ?: false if (isChecked) { FunctionBuildConfig.fusionMode = 4 prevCheckedKeyForFusionMode?.takeIf { it != KEY_TRANSPARENT_TRANSFER_MODE }?.let { - preferenceScreen.findPreferenceReal(it) - }?.also { - prevCheckedKeyForFusionMode = KEY_TRANSPARENT_TRANSFER_MODE - changeValue(it, false) - } + preferenceScreen.findPreferenceReal(it) + }?.also { + prevCheckedKeyForFusionMode = KEY_TRANSPARENT_TRANSFER_MODE + changeValue(it, false) + } hmiAction("SOP 融合模式, ", FunctionBuildConfig.fusionMode) clickEventAnalytics("融合模式", true) CallerAutoPilotControlManager.sendFusionMode(FunctionBuildConfig.fusionMode) @@ -1245,6 +1333,10 @@ class OperatePanelLayout : LinearLayout { return isChecked } KEY_PURE_OBU_MODE -> { + if (preference.extras.containsKey("is_checked")) { + preference.extras.remove("is_checked") + return true + } val isChecked = newValue as? Boolean ?: false if (isChecked) { FunctionBuildConfig.fusionMode = 5 diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/operate/preferences/PreferenceWithSpeedSetting.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/operate/preferences/PreferenceWithSpeedSetting.kt index 1164fc41f1..4647c88469 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/operate/preferences/PreferenceWithSpeedSetting.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/operate/preferences/PreferenceWithSpeedSetting.kt @@ -42,13 +42,14 @@ class PreferenceWithSpeedSetting : Preference { override fun onBindViewHolder(holder: PreferenceViewHolder) { super.onBindViewHolder(holder) val speedData = mSpeedData ?: return - if (speedData !is List<*> || speedData.size != 4) { + if (speedData !is List<*> || speedData.size != 5) { throw AssertionError() } val min = (speedData.elementAt(0) as String).toDouble() val max = (speedData.elementAt(1) as String).toDouble() var cur = (speedData.elementAt(2) as String).toDouble() val step = (speedData.elementAt(3) as String).toDouble() + val unit = speedData.elementAt(4) as String if (min > max) { throw AssertionError() } @@ -60,6 +61,8 @@ class PreferenceWithSpeedSetting : Preference { } val ll = holder.findViewById(R.id.ll_speed) val btnOk = holder.findViewById(R.id.bt_ok) + val speedUnit = holder.findViewById(R.id.tv_speed_unit) as? TextView + speedUnit?.text = unit val speedLimit = holder.findViewById(R.id.tv_speed_limit) as? TextView if (cache.containsKey(key)) { cur = max(cur, cache[key] ?: 0.0) @@ -73,7 +76,7 @@ class PreferenceWithSpeedSetting : Preference { minus.onClickWidthDuration(100) { val minusAfter = cur - step if (minusAfter < min) { - ToastUtils.showShort("阈值最小可为${BigDecimal.valueOf(min).setScale(1)}km/h") + ToastUtils.showShort("阈值最小为${BigDecimal.valueOf(min).setScale(1)}$unit") return@onClickWidthDuration } cur = minusAfter @@ -89,7 +92,7 @@ class PreferenceWithSpeedSetting : Preference { add.onClickWidthDuration(100) { val addAfter = cur + step if (addAfter > max) { - ToastUtils.showShort("阈值最大可为${BigDecimal.valueOf(max).setScale(1)}km/h") + ToastUtils.showShort("阈值最大为${BigDecimal.valueOf(max).setScale(1)}$unit") return@onClickWidthDuration } holder.itemView.isEnabled = false diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/layout_operate_panel_preference_widget_edit_with_button.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/layout_operate_panel_preference_widget_edit_with_button.xml index fde0695380..7c77ecc177 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/layout_operate_panel_preference_widget_edit_with_button.xml +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/layout_operate_panel_preference_widget_edit_with_button.xml @@ -47,11 +47,12 @@