[6.7.0][运营面板] 融合模式逻辑优化

This commit is contained in:
renwj
2024-10-15 12:18:06 +08:00
parent a116d6b8f9
commit 6628c735fa
3 changed files with 146 additions and 50 deletions

View File

@@ -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<TwoStatePreference>(it)
}?.also {
changeValue(it, false)
}
prevCheckedKeyForFusionMode = KEY_ALL_MERGE_MODE
preferenceScreen.findPreferenceReal<TwoStatePreference>(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<TwoStatePreference>(it)
}?.also {
changeValue(it, false)
}
prevCheckedKeyForFusionMode = KEY_BLIND_AREA_MODE
preferenceScreen.findPreferenceReal<TwoStatePreference>(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<TwoStatePreference>(it)
}?.also {
changeValue(it, false)
}
prevCheckedKeyForFusionMode = KEY_BEYOND_VISUAL_RANGE_MODE
preferenceScreen.findPreferenceReal<TwoStatePreference>(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<TwoStatePreference>(it)
}?.also {
changeValue(it, false)
}
prevCheckedKeyForFusionMode = KEY_TRANSPARENT_TRANSFER_MODE
preferenceScreen.findPreferenceReal<TwoStatePreference>(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<TwoStatePreference>(it)
}?.also {
changeValue(it, false)
}
prevCheckedKeyForFusionMode = KEY_PURE_OBU_MODE
preferenceScreen.findPreferenceReal<TwoStatePreference>(KEY_PURE_OBU_MODE)?.also {
it.extras.putBoolean("is_checked", true)
changeValue(it, true)
}
}
}
if (adasParam.overtakeMaxSpeed > 0) {
FunctionBuildConfig.overTakeSpeed = adasParam.overtakeMaxSpeed
preferenceScreen.findPreferenceReal<PreferenceWithSpeedSetting>(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<PreferenceWithSpeedSetting>(KEY_AUTO_PILOT_SPEED_THRESHOLDS)?.update(listOf("0", "60.0", "${FunctionBuildConfig.maxSpeedLimit}", "5"))
preferenceScreen.findPreferenceReal<PreferenceWithSpeedSetting>(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<TwoStatePreference>(it)
}?.also {
prevCheckedKeyForFusionMode = KEY_BEYOND_VISUAL_RANGE_MODE
changeValue(it, false)
}
preferenceScreen.findPreferenceReal<TwoStatePreference>(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<TwoStatePreference>(it)
}?.also {
prevCheckedKeyForFusionMode = KEY_TRANSPARENT_TRANSFER_MODE
changeValue(it, false)
}
preferenceScreen.findPreferenceReal<TwoStatePreference>(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

View File

@@ -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

View File

@@ -47,11 +47,12 @@
</LinearLayout>
<TextView
android:id="@+id/tv_speed_unit"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginStart="@dimen/dp_10"
android:text="km/h"
tools:text="km/h"
android:textColor="#ffffff"
android:textSize="@dimen/dp_30"
tools:ignore="HardcodedText,SpUsage" />