diff --git a/OCH/taxi/driver/src/main/java/com/mogo/och/taxi/ui/BaseTaxiTabFragment.java b/OCH/taxi/driver/src/main/java/com/mogo/och/taxi/ui/BaseTaxiTabFragment.java index b4482c5db0..cee8353a29 100644 --- a/OCH/taxi/driver/src/main/java/com/mogo/och/taxi/ui/BaseTaxiTabFragment.java +++ b/OCH/taxi/driver/src/main/java/com/mogo/och/taxi/ui/BaseTaxiTabFragment.java @@ -17,8 +17,8 @@ import android.widget.TextView; import androidx.annotation.NonNull; import androidx.annotation.Nullable; -import androidx.constraintlayout.widget.ConstraintLayout; import androidx.constraintlayout.widget.Group; +import androidx.fragment.app.FragmentActivity; import androidx.fragment.app.FragmentTransaction; import com.mogo.commons.mvp.IView; @@ -29,7 +29,6 @@ import com.mogo.eagle.core.function.api.och.toolkit.IToolKitItemClickListener; 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.CallerAutopilotRecordListenerManager; -import com.mogo.eagle.core.function.call.devatools.CallerDevaToolsManager; import com.mogo.eagle.core.function.call.och.CallerEagleBaseFunctionCall4OchManager; import com.mogo.eagle.core.function.hmi.map.MapContainerLayout; import com.mogo.eagle.core.function.view.MapRoamView; @@ -46,9 +45,6 @@ import com.mogo.och.taxi.R; import java.lang.ref.WeakReference; -import me.jessyan.autosize.utils.AutoSizeUtils; - - /** * 网约车基础Fragment,主要负责布局通用界面,处理站点面板和通话面板互斥情况 *

@@ -56,7 +52,7 @@ import me.jessyan.autosize.utils.AutoSizeUtils; * * @author tongchenfei */ -public abstract class BaseTaxiTabFragment> extends MvpFragment implements IMogoMapListener{ +public abstract class BaseTaxiTabFragment> extends MvpFragment implements IMogoMapListener { private static final String TAG = "BaseOchFragment"; private RelativeLayout ctvAutopilotStatusRL; @@ -66,7 +62,7 @@ public abstract class BaseTaxiTabFragment - onAutopilotStatusChanged(IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_DISABLE,true) + onAutopilotStatusChanged(IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_DISABLE, true) ); // 模拟 可自动驾驶,工控机连接正常,且处于人工干预状态 findViewById(R.id.btnAutopilotEnable).setOnClickListener(view -> - onAutopilotStatusChanged(IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_ENABLE,true) + onAutopilotStatusChanged(IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_ENABLE, true) ); // 模拟 自动驾驶能力,自动驾驶中,可能是停车,可能是行进,但是是机器在处理车的前进后退,不是人 findViewById(R.id.btnAutopilotRunning).setOnClickListener(view -> - onAutopilotStatusChanged(IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING,true) + onAutopilotStatusChanged(IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING, true) ); findViewById(R.id.btnAutopilotmanco).setOnClickListener(view -> - onAutopilotStatusChanged(IMoGoAutopilotStatusListener.STATUS_PARALLEL_DRIVING,true)); + onAutopilotStatusChanged(IMoGoAutopilotStatusListener.STATUS_PARALLEL_DRIVING, true)); tvOperationStatus.setOnClickListener(new OnPreventFastClickListener() { @Override @@ -190,16 +186,19 @@ public abstract class BaseTaxiTabFragment(new TaxiPersonalDialogFragment()); - personalDialogFragment.get().show(getActivity().getSupportFragmentManager(), "service_data"); + FragmentActivity activity = getActivity(); + if (activity != null) { + personalDialogFragment.get().show(activity.getSupportFragmentManager(), "service_data"); + } } }); - CallerEagleBaseFunctionCall4OchManager.INSTANCE.addSingleToolKitCustomItem(lineView, new LineView(getContext()),10); + CallerEagleBaseFunctionCall4OchManager.INSTANCE.addSingleToolKitCustomItem(lineView, new LineView(getContext()), 10); } } @@ -245,7 +244,7 @@ public abstract class BaseTaxiTabFragment(KEY_DEMO_SWITCH)?.also { + it.extras.putBoolean("is_pressed", false) + changeValue(it, checked) + } + } + } + + override fun onDestroyView() { + super.onDestroyView() + CallerHmiViewControlListenerManager.removeListener(TAG) + } + override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { setPreferencesFromResource(R.xml.operate_panel_preference_details_demo, rootKey) } @@ -427,13 +458,17 @@ class OperatePanelLayout : LinearLayout { override fun onPreferenceChange(preference: Preference, newValue: Any?): Boolean { when (preference.key) { KEY_DEMO_SWITCH -> { + val isPressed = preference.extras.getBoolean("is_pressed", true) + if (!isPressed) { + preference.extras.remove("is_pressed") + return true + } val isChecked = newValue as? Boolean ?: false hmiAction("SOP 演示模式开关, ", !FunctionBuildConfig.isDemoMode) clickEventAnalytics("美化模式", isChecked) FunctionBuildConfig.isDemoMode = !FunctionBuildConfig.isDemoMode CallerAutoPilotControlManager.setDemoMode(FunctionBuildConfig.isDemoMode) CallerHmiViewControlListenerManager.invokeFuncMode(FUNC_MODE_DEMO, FunctionBuildConfig.isDemoMode) - CallerSopSettingManager.invokeDemoModeListener(isChecked) if (!FunctionBuildConfig.isDemoMode) { //关闭美化模式时,通知工控机 CallerAutoPilotControlManager.setIPCDemoMode(FunctionBuildConfig.isDemoMode) } @@ -455,14 +490,35 @@ class OperatePanelLayout : LinearLayout { } } - class HdMapPreferenceFragmentCompat : OperatePanelDetailBase() { + class HdMapPreferenceFragmentCompat : OperatePanelDetailBase(), ISopSettingListener { companion object { + private const val TAG = "HdMapPreferenceFragmentCompat" private const val KEY_DANGER_OBSTACLES_COLOR_MARK = "danger_obstacles_color_mark" private const val KEY_ROUTE_GUIDE_LINE_DYNAMIC_EFFECT = "route_guide_line_dynamic_effect" private const val KEY_POINT_CLOUD_EFFECT = "point_cloud_effect" private const val KEY_SELF_CAR_APERTURE = "self_car_aperture" } + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + CallerSopSettingManager.addListener(TAG, this) + } + + override fun onDestroyView() { + super.onDestroyView() + CallerSopSettingManager.removeListener(TAG) + } + + override fun onPointCloudClickEvent(status: Boolean) { + super.onPointCloudClickEvent(status) + preferenceScreen.findPreferenceReal(KEY_POINT_CLOUD_EFFECT)?.also { changeValue(it, status) } + } + + override fun onCarApertureClickEvent(status: Boolean) { + super.onCarApertureClickEvent(status) + preferenceScreen.findPreferenceReal(KEY_SELF_CAR_APERTURE)?.also { changeValue(it, status) } + } + override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { setPreferencesFromResource(R.xml.operate_panel_preference_details_hdmap, rootKey) } @@ -539,11 +595,12 @@ class OperatePanelLayout : LinearLayout { private const val KEY_RED_OR_GREEN_LIGHT_MERGE_MARKER = "red_or_green_light_merge_marker" private const val KEY_FAULT_REPORT_TIP = "fault_report_tip" private const val KEY_LIMIT_SPEED_MARKER = "limit_speed_marker" - private const val KEY_SELF_ROUTING_VERIFY_MODE = "self_routing_verify_mode" - private const val KEY_LOOK_AROUND_360 = "look_around_360" private const val KEY_WEATHER_EFFECT_SWITCH = "weather_effect_switch" private const val KEY_SYSTEM_BOOT_STATUS_SHOW = "system_boot_status_show" + private const val KEY_SELF_ROUTING_VERIFY_MODE = "self_routing_verify_mode" private const val KEY_UNMANNED_DEMO_PULL_INTERVAL = "unmanned_demo_pull_interval" + private const val KEY_SWEEPER_CLOUD_CONTROL = "sweeper_cloud_control" + private const val KEY_LOOK_AROUND_360 = "look_around_360" } override fun getDefaultVal(pref: Preference): Any? { @@ -575,6 +632,16 @@ class OperatePanelLayout : LinearLayout { KEY_UNMANNED_DEMO_PULL_INTERVAL -> { return CallerUnmannedListenerManager.getVirtualTaskPullTaskIntervalF() } + KEY_SWEEPER_CLOUD_CONTROL -> { + if (!isEnabled(pref)) { + return false + } + return if (SweeperVehicleConfigUtils.isSPExistCurrentSweeperModeConfig()) { + SweeperVehicleConfigUtils.isSPCurrentSweeperCloudMode() + } else { + SweeperVehicleConfigUtils.isDefaultSweeperCloudMode(FunctionBuildConfig.sweeperDefaultMode) + } + } } return super.getDefaultVal(pref) } @@ -590,6 +657,9 @@ class OperatePanelLayout : LinearLayout { KEY_WEATHER_EFFECT_SWITCH -> { AppIdentityModeUtils.isDriver(FunctionBuildConfig.appIdentityMode) } + KEY_SWEEPER_CLOUD_CONTROL -> { + return AppIdentityModeUtils.isSweeper(FunctionBuildConfig.appIdentityMode) && (SweeperVehicleConfigUtils.isDefaultSweeperCanSwitchMode(FunctionBuildConfig.sweeperCanSwitchMode)) + } else -> super.isEnabled(pref) } } @@ -606,7 +676,7 @@ class OperatePanelLayout : LinearLayout { PreferenceWithUnmanInterval.Interval.FORTY_FIVE_SECOND -> CallerUnmannedListenerManager.dispatchVirtualTaskPullTaskInterval(45) PreferenceWithUnmanInterval.Interval.NEVER -> CallerUnmannedListenerManager.dispatchVirtualTaskPullTaskInterval(-1) } - clickEventAnalytics("Taxi无人化演练任务拉取时间间隔",true) + clickEventAnalytics("Taxi无人化演练任务拉取时间间隔", true) } } return super.onPreferenceClick(preference) @@ -701,6 +771,27 @@ class OperatePanelLayout : LinearLayout { HmiBuildConfig.isShowConnectionProgressView = isChecked CallerHmiViewControlListenerManager.updateConnectionProgressView(isChecked) } + KEY_SWEEPER_CLOUD_CONTROL -> { + val isChecked = newValue as? Boolean ?: false + val activity = AppStateManager.currentActivity() + if (activity != null) { + val confirmDialog = SweeperModeChangedConfirmDialog(activity) + confirmDialog.setClickListener(object: SweeperModeChangedConfirmDialog.ClickListener { + override fun confirm() { + CallerSweeperModeListenerManager.invokeSweeperModeListeners( + if (isChecked) SweeperVehicleConfigUtils.BUSINESS_MODE_CLOUD + else SweeperVehicleConfigUtils.BUSINESS_MODE_OPERATE + ) + } + + override fun cancel() { + preferenceScreen.findPreferenceReal(KEY_WEATHER_EFFECT_SWITCH)?.also { changeValue(it, !isChecked) } + } + }) + confirmDialog.showSweeperModeChangeConfirmDialog() + } + clickEventAnalytics("清扫云控业务",isChecked) + } } return super.onPreferenceChange(preference, newValue) } @@ -788,8 +879,9 @@ class OperatePanelLayout : LinearLayout { } } - class VehiclesPreferenceFragmentCompat : OperatePanelDetailBase() { + class VehiclesPreferenceFragmentCompat : OperatePanelDetailBase(), IMoGoAutopilotCarConfigListener, ISopSettingListener, IViewControlListener { companion object { + private const val TAG = "VehiclesPreferenceFragmentCompat" private const val KEY_PNC_PARK_INTERSECTION_CAR = "pnc_park_intersection_car" private const val KEY_PNC_PARK_OVERTAKE_CAR = "pnc_park_overtake_car" private const val KEY_DETOUR_RETARD_PARK = "detour_retard_park" @@ -807,10 +899,52 @@ class OperatePanelLayout : LinearLayout { private const val KEY_OVERTAKE_SPEED_THRESHOLDSS = "overtake_speed_thresholds" } + override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View { + CallerAutopilotCarConfigListenerManager.addListener(TAG, this) + CallerSopSettingManager.addListener(TAG, this) + CallerHmiViewControlListenerManager.addListener(TAG, this) + return super.onCreateView(inflater, container, savedInstanceState) + } + + override fun updateFuncMode(tag: String, checked: Boolean) { + super.updateFuncMode(tag, checked) + if (tag == FUNC_MODE_RAIN) { + preferenceScreen.findPreferenceReal(KEY_RAIN_DAY)?.also { + it.extras.putBoolean("is_pressed", false) + changeValue(it, checked) + } + } + } + + override fun onDestroyView() { + CallerAutopilotCarConfigListenerManager.removeListener(TAG) + CallerSopSettingManager.removeListener(TAG) + CallerHmiViewControlListenerManager.removeListener(TAG) + super.onDestroyView() + } + override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { setPreferencesFromResource(R.xml.operate_panel_preference_details_vehicles, rootKey) } + override fun onExamControlClickEvent(status: Boolean) { + super.onExamControlClickEvent(status) + preferenceScreen.findPreferenceReal(KEY_EXAM_FUNCTION_PANEL)?.also { changeValue(it, status) } + } + + override fun onRainModeClickEvent(status: Boolean) { + super.onRainModeClickEvent(status) + preferenceScreen.findPreferenceReal(KEY_RAIN_DAY)?.also { changeValue(it, status) } + } + + override fun onAutopilotCarConfig(carConfigResp: MessagePad.CarConfigResp) { + super.onAutopilotCarConfig(carConfigResp) + lifecycleScope.launch { + val max = carConfigResp.speedLimit * 3.6 + preferenceScreen.findPreferenceReal(KEY_AUTO_PILOT_SPEED_THRESHOLDS)?.update(listOf("0", "$max", "$max", "5")) + } + } + override fun isEnabled(pref: Preference): Boolean { when (pref.key) { KEY_AUTO_PILOT_SPEED_THRESHOLDS, KEY_OVERTAKE_SPEED_THRESHOLDSS -> { @@ -855,13 +989,14 @@ class OperatePanelLayout : LinearLayout { KEY_PURE_OBU_MODE -> { return FunctionBuildConfig.fusionMode == 5 } + KEY_AUTO_PILOT_SPEED_THRESHOLDS -> { + return listOf("0.0", "${FunctionBuildConfig.maxSpeedLimit}", "${FunctionBuildConfig.maxSpeedLimit}", "5.0") + } KEY_CHANGE_LANE_SPEED_THRESHOLDS -> { - return setOf("3.0", "7.0", "${FunctionBuildConfig.detouringSpeed}", "0.5") + return listOf("3.0", "7.0", "${FunctionBuildConfig.detouringSpeed}", "0.5") } KEY_OVERTAKE_SPEED_THRESHOLDSS -> { - return setOf("3.0", "12.5", "${FunctionBuildConfig.overTakeSpeed}", "0.5") - } - KEY_AUTO_PILOT_SPEED_THRESHOLDS -> { //TODO renwj 自动驾驶速度阈值,旧版本没有看到 + return listOf("3.0", "12.5", "${FunctionBuildConfig.overTakeSpeed}", "0.5") } } return super.getDefaultVal(pref) @@ -871,7 +1006,20 @@ class OperatePanelLayout : LinearLayout { Log.d(TAG, "-- onPreferenceClick --:pref -> $preference") when (preference.key) { KEY_AUTO_PILOT_SPEED_THRESHOLDS -> { - FunctionBuildConfig.detouringSpeed = preference.extras.getFloat(PreferenceWithSpeedSetting.KEY_BUNDLE_CURRENT_VALUE, FunctionBuildConfig.detouringSpeed.toFloat()).toInt() + FunctionBuildConfig.maxSpeedLimit = preference.extras.getDouble(PreferenceWithSpeedSetting.KEY_BUNDLE_CURRENT_VALUE, FunctionBuildConfig.maxSpeedLimit) + val isSuccess = CallerAutoPilotControlManager.setAutoPilotSpeed(FunctionBuildConfig.maxSpeedLimit.toInt()) + when { + isSuccess -> { + ToastUtils.showShort("车速设置成功,立即生效") + } + else -> { + ToastUtils.showShort("设置车速失败,请启动域控制器") + } + } + return true + } + KEY_CHANGE_LANE_SPEED_THRESHOLDS -> { + FunctionBuildConfig.detouringSpeed = preference.extras.getDouble(PreferenceWithSpeedSetting.KEY_BUNDLE_CURRENT_VALUE, FunctionBuildConfig.detouringSpeed.toDouble()).toInt() hmiAction("SOP 变道绕障的目标障碍物速度阈值", FunctionBuildConfig.detouringSpeed) val isSuccess = CallerAutoPilotControlManager.sendDetouringSpeed(FunctionBuildConfig.detouringSpeed.toDouble()) if (isSuccess == true) { @@ -882,9 +1030,10 @@ class OperatePanelLayout : LinearLayout { hmiAction("SOP 变道绕障的目标障碍物速度阈值设置", "失败") } clickEventAnalytics("变道速度阈值", true) + return true } KEY_OVERTAKE_SPEED_THRESHOLDSS -> { - FunctionBuildConfig.overTakeSpeed = preference.extras.getFloat(PreferenceWithSpeedSetting.KEY_BUNDLE_CURRENT_VALUE, FunctionBuildConfig.overTakeSpeed) + FunctionBuildConfig.overTakeSpeed = preference.extras.getDouble(PreferenceWithSpeedSetting.KEY_BUNDLE_CURRENT_VALUE, FunctionBuildConfig.overTakeSpeed.toDouble()).toFloat() val isSuccess = CallerAutoPilotControlManager.sendOvertakeMaxSpeed(FunctionBuildConfig.overTakeSpeed.toDouble()) if (isSuccess == true) { ToastUtils.showShort("SOP 超车目标障碍物速度阈值设置成功") @@ -894,6 +1043,7 @@ class OperatePanelLayout : LinearLayout { hmiAction("SOP 超车目标障碍物速度阈值设置", "失败") } clickEventAnalytics("超车速度阈值", true) + return true } } return super.onPreferenceClick(preference) @@ -906,12 +1056,14 @@ class OperatePanelLayout : LinearLayout { hmiAction("SOP PNC-park-会车, ", isChecked) CallerAutoPilotControlManager.sendParkVehCross(isChecked) FunctionBuildConfig.isOpenParkVehCross = isChecked + return true } KEY_PNC_PARK_OVERTAKE_CAR -> { val isChecked = newValue as? Boolean ?: false hmiAction("SOP PNC-park-超车, ", isChecked) CallerAutoPilotControlManager.sendParkVehOvertake(isChecked) FunctionBuildConfig.isOpenOvertake = isChecked + return true } KEY_DETOUR_RETARD_PARK -> { val isChecked = newValue as? Boolean ?: false @@ -919,8 +1071,14 @@ class OperatePanelLayout : LinearLayout { CallerAutoPilotControlManager.sendDetouring(isChecked) FunctionBuildConfig.isDetouring = isChecked clickEventAnalytics("绕障类功能", isChecked) + return true } KEY_RAIN_DAY -> { + val isPressed = preference.extras.getBoolean("is_pressed", true) + if (!isPressed) { + preference.extras.remove("is_pressed") + return true + } val isChecked = newValue as? Boolean ?: false hmiAction("SOP 雨天模式开关, ", isChecked) clickEventAnalytics("雨天模式", isChecked) @@ -928,6 +1086,7 @@ class OperatePanelLayout : LinearLayout { CallerAutoPilotControlManager.setRainMode(isChecked) CallerHmiViewControlListenerManager.invokeFuncMode(FUNC_MODE_RAIN, isChecked) CallerSopSettingManager.invokeRainModeListener(isChecked) + return true } KEY_WEAK_NET_DECELERATION_PARK -> { val isChecked = newValue as? Boolean ?: false @@ -935,6 +1094,7 @@ class OperatePanelLayout : LinearLayout { CallerAutoPilotControlManager.sendWeakNetSlowDown(isChecked) hmiAction("SOP 弱网减速停车, ", isChecked) clickEventAnalytics("弱网减速停车", isChecked) + return true } KEY_FAULT_DECELERATION_PARK -> { val isChecked = newValue as? Boolean ?: false @@ -942,6 +1102,7 @@ class OperatePanelLayout : LinearLayout { CallerAutoPilotControlManager.sendBreakdownSlowDown(isChecked) hmiAction("SOP 故障减速停车, ", isChecked) clickEventAnalytics("故障减速停车", isChecked) + return true } KEY_EXAM_FUNCTION_PANEL -> { val isChecked = newValue as? Boolean ?: false @@ -949,36 +1110,42 @@ class OperatePanelLayout : LinearLayout { CallerDevaToolsManager.showExamControlWindow(isChecked) hmiAction("SOP 考试功能面板, ", isChecked) clickEventAnalytics("考试功能面板", isChecked) + return true } KEY_ALL_MERGE_MODE -> { FunctionBuildConfig.fusionMode = 1 hmiAction("SOP 融合模式, ", FunctionBuildConfig.fusionMode) clickEventAnalytics("融合模式", true) CallerAutoPilotControlManager.sendFusionMode(FunctionBuildConfig.fusionMode) + return true } KEY_BLIND_AREA_MODE -> { FunctionBuildConfig.fusionMode = 2 hmiAction("SOP 融合模式, ", FunctionBuildConfig.fusionMode) clickEventAnalytics("融合模式", true) CallerAutoPilotControlManager.sendFusionMode(FunctionBuildConfig.fusionMode) + return true } KEY_BEYOND_VISUAL_RANGE_MODE -> { FunctionBuildConfig.fusionMode = 3 hmiAction("SOP 融合模式, ", FunctionBuildConfig.fusionMode) clickEventAnalytics("融合模式", true) CallerAutoPilotControlManager.sendFusionMode(FunctionBuildConfig.fusionMode) + return true } KEY_TRANSPARENT_TRANSFER_MODE -> { FunctionBuildConfig.fusionMode = 4 hmiAction("SOP 融合模式, ", FunctionBuildConfig.fusionMode) clickEventAnalytics("融合模式", true) CallerAutoPilotControlManager.sendFusionMode(FunctionBuildConfig.fusionMode) + return true } KEY_PURE_OBU_MODE -> { FunctionBuildConfig.fusionMode = 5 hmiAction("SOP 融合模式, ", FunctionBuildConfig.fusionMode) clickEventAnalytics("融合模式", true) CallerAutoPilotControlManager.sendFusionMode(FunctionBuildConfig.fusionMode) + return true } } return super.onPreferenceChange(preference, newValue) 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 aa5d4c529d..746b02b3ba 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 @@ -21,24 +21,34 @@ class PreferenceWithSpeedSetting : Preference { constructor(context: Context, attrs: AttributeSet?) : super(context, attrs) constructor(context: Context) : super(context) - private var mDefaultValueSet: Any? = null + private var mSpeedData: Any? = null + private var mFlag = true override fun setDefaultValue(defaultValue: Any?) { super.setDefaultValue(defaultValue) - mDefaultValueSet = defaultValue + mSpeedData = defaultValue notifyChanged() } + fun update(data: List) { + mSpeedData = data + notifyChanged() + } + + override fun onSetInitialValue(defaultValue: Any?) { + super.onSetInitialValue(defaultValue) + } + override fun onBindViewHolder(holder: PreferenceViewHolder) { super.onBindViewHolder(holder) - val defaultSet = mDefaultValueSet ?: return - if (defaultSet !is Set<*> || defaultSet.size != 4) { + val speedData = mSpeedData ?: return + if (speedData !is List<*> || speedData.size != 4) { throw AssertionError() } - val min = (defaultSet.elementAt(0) as String).toFloat() - val max = (defaultSet.elementAt(1) as String).toFloat() - var cur = (defaultSet.elementAt(2) as String).toFloat() - val step = (defaultSet.elementAt(3) as String).toFloat() + 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() if (min > max) { throw AssertionError() } @@ -52,7 +62,7 @@ class PreferenceWithSpeedSetting : Preference { val btnOk = holder.findViewById(R.id.bt_ok) val speedLimit = holder.findViewById(R.id.tv_speed_limit) as? TextView if (speedLimit?.tag != null && speedLimit.tag is Float) { - cur = max(cur, speedLimit.tag as Float) + cur = max(cur, speedLimit.tag as Double) } speedLimit?.text = cur.toString() val minus = holder.findViewById(R.id.iv_speed_minus) @@ -83,11 +93,14 @@ class PreferenceWithSpeedSetting : Preference { speedLimit?.tag = addAfter speedLimit?.text = addAfter.toString() } - btnOk.isEnabled = false + if (mFlag) { + mFlag = false + btnOk.isEnabled = false + } btnOk.setOnClickListener(null) btnOk.onClick { onPreferenceClickListener?.also { - extras.putFloat(KEY_BUNDLE_CURRENT_VALUE, cur) + extras.putDouble(KEY_BUNDLE_CURRENT_VALUE, cur) it.onPreferenceClick(this) } } diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/layout_operate_panel.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/layout_operate_panel.xml index 0e11fe1a9f..b33f81bce6 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/layout_operate_panel.xml +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/layout_operate_panel.xml @@ -11,7 +11,7 @@ android:layout_width="match_parent" android:layout_height="@dimen/dp_86" android:layout_marginStart="@dimen/dp_60" - android:layout_marginTop="@dimen/dp_112" + android:layout_marginTop="@dimen/dp_56" android:orientation="horizontal"> \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/layout_operate_panel_preference_header.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/layout_operate_panel_preference_header.xml index 78d511e5e8..3dfd09b5b0 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/layout_operate_panel_preference_header.xml +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/layout_operate_panel_preference_header.xml @@ -2,6 +2,7 @@ - - + + + \ No newline at end of file diff --git a/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/config/FunctionBuildConfig.kt b/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/config/FunctionBuildConfig.kt index c68c7834f4..f4b11751e2 100644 --- a/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/config/FunctionBuildConfig.kt +++ b/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/config/FunctionBuildConfig.kt @@ -441,4 +441,11 @@ object FunctionBuildConfig { @Volatile @JvmField var welcomeWords: String? = null + + /** + * 最大限速值 + */ + @Volatile + @JvmField + var maxSpeedLimit: Double = 0.0 } \ No newline at end of file diff --git a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/autopilot/CallerAutopilotCarConfigListenerManager.kt b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/autopilot/CallerAutopilotCarConfigListenerManager.kt index dbf75c5c27..be3164e6b4 100644 --- a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/autopilot/CallerAutopilotCarConfigListenerManager.kt +++ b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/autopilot/CallerAutopilotCarConfigListenerManager.kt @@ -1,5 +1,6 @@ package com.mogo.eagle.core.function.call.autopilot +import com.mogo.eagle.core.data.config.FunctionBuildConfig import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotCarConfigListener import com.mogo.eagle.core.function.call.base.CallerBase import mogo.telematics.pad.MessagePad @@ -28,6 +29,7 @@ object CallerAutopilotCarConfigListenerManager : CallerBase