01 · 代码结构与子系统

一、入口 Fragment

VehicleControlSettingsFragmentsettingsPage/VehicleBodyControl/.../vehicle/VehicleControlSettingsFragment.java

@VoiceSearchProvider(priority = 2)
@RouterProvider(path = VEHICLE_CONTROL_URI_PATH)
@Module(SettingsConstant.TAG_VEHICLECONTROL)
public class VehicleControlSettingsFragment extends TopLevelSettingsFragment
        implements IPageRouteHandler {
 
    @Override public String getPageAlias() { return PageAlias.PAGE_QUICK_CONTROL; }  // ← "快控"叫法源头
    @Override public int getPreferenceScreenResId() {
        return R.xml.miauto_vehicle_body_ctrl_settings_fragment;  // 单页
    }
    @Override public BaseRightFragment getRightFragment() {
        if (mRightFragment == null) mRightFragment = new VehicleControlRightFragment();
        return mRightFragment;
    }
    @Override public List<Integer> getPreferenceKeyResIdsToRemove() { /* 按配置字裁剪 */ }
}

结构特点

  • 单页 + 多 MiCarPreferenceCategory 分组,无二级 Tab。二级交互靠 Dialog-style Activity/Fragment 弹窗。
  • Fragment 本身只做减法getPreferenceKeyResIdsToRemove 按车型/配置字移除不支持项),不动态生成。
  • 右栏 VehicleControlRightFragment(仅 15 行)只显示静态车模图 micar_car_model_vehicle_control_main,无交互。
  • 副驾座椅跳转 RC10 起废弃(注释 “Seat adjust no more exist!“),交给舒控 app。

二、Controller 继承体系(4 基类对应 4 种 UI)

所有车控 Controller 继承自 CarPropertyMgrPreferenceController<V>(持有 SettingsCarPropertyManager)。按 UI 形态分 4 个基类(均在 base/settingsVehicleLib/.../vehicle/):

基类Preference 类型UI 形态典型用途
BaseVehicleNewSwitchPrefControllerMiCarNewSwitchPreference单开关锁车折叠、防眩目、NFC、无线充电
BaseVehicleTabPreferenceControllerNewTabPreference多档位 Tab倒车下翻、雨刮、侧翼、踏板自动
BaseVehicleButtonToggleGroupPropControllerButtonTogglePreference单按钮开关态前挡清洁、踏板单次
BaseVehicleButtonIconToggleGroupPropControllerButtonIconTogglePreference双按钮带 icon后视镜调节、手套箱

另有非车控基类 BaseTabPreferenceController(纯 UI,如后视镜左右选择)、PreferenceController<BasicPreference>(纯跳转入口,如方向盘/PUI/中控键入口)、FragmentVehicleController(Dialog 内部控制器,如调节弹窗)。

三、12 个子系统逐一详解

3.1 mirror 后视镜(8 类,最完整子系统)

Controller基类信号功能
MirrorSettingControllerButtonIconToggleGroupREAR_VIEW_MIRROR_FOLD主入口”后视镜调节”双按钮(折叠+调节)
MirrorAutoDownControllerTabTURN_DOWN_CONFIG倒车自动下翻 4 档(关/主驾/副驾/两侧)
MirrorFoldWhenLockControllerSwitchLockCtrl.MIRROR_FOLD_WHEN_LOCK锁车自动折叠(⚠️ 信号在 LockCtrl 域)
MirrorAntiDazzleControllerSwitchAUTO_ANTIDAZZLE自动防眩目(标题随配置字切”内”/“内外”)
MirrorAutoHeatControllerSwitchMIRROR_AUTO_HEAT外后视镜自动加热
MirrorSelectControllerBaseTab(UI 基类,非车控)调节弹窗内左/右镜选择(持久化到 MiCarSettings)
MirrorAdjustControllerNewFragmentVehicleControllerSTEERWHEEL_MIRROR_HUD_ADJUST调节弹窗逻辑:进入下发 EXTR_MIRR_ADJUST_PUP_UP + 心跳,退出回 IDLE
MirrorAdjustDialogDialogSettingsFragment调节弹窗(加载 micar_mirror_adjust_fragment.xml

注意micar_mirror_adjust_fragment.xml 现是空壳(只剩 MirrorSelectController),其余设置项已迁回主页。

3.2 steeringwheel 方向盘(3 类)

Controller角色功能
SteeringWheelEntryController跳转入口点击发 POSITION_ADJUST_ACTION 启动 SteeringWheelDialog
SteeringWheelAdjustControllerNewDialog 内部进入/退出下发 STEERWHEEL_MIRROR_HUD_ADJUST + 心跳;通过 active_window 与后视镜调节互斥(共用同一信号
SteeringWheelDialogDialogSettingsFragment按 W-HUD 可选车型(MS11/MS11P/Kepler/KunLun)加载不同 layout

3.3 consolekey 中控键(多类协作)

XML:pk_settings_vehicle_console_key_3 / _4

功能
ConsoleKeyCustomController(⚠️文件名小写 k)键 3 入口,读 Settings.Global[custom_console_key_1]
ConsoleKey4CustomController键 4 入口,缓存键 _2
ConsoleKeyCustomDialogActivity自定义弹窗(Tab 切键3/4 + 3列 Grid + HyperTask)
ConsoleKeyCustomDialogController弹窗逻辑,监听 MIS HYPERTASK_SELECTED/CHANGED,did=DID_PUI_CONSOLE_3/4
ConsoleKeyConfig3/4功能列表(无功能/AVM/除雾/尾翼/悬架/能量回收/扩散器)+ HyperTask

功能 ID:0=无功能, 2=AVM, 3=APA, 4=对讲, 5=行车拍照, …, 101=HyperTask动作, 102=任务。

3.4 wiper 雨刮(3 类,⚠️ 在 service 包不在 wiper

Controller基类信号功能
WiperAdjustTabLayPrefControllerTabService.WIPER_SPEED_MODE雨刮 6 档(关/1/2/3/4/自动),areaId=WINDOW_FRONT_WINDSHIELD
WiperRainSensorTabLayPrefControllerTabService.WIPER_RAIN_SENSOR_DETECT_LEVEL自动灵敏度 4 档(dependKey 指向上面)
FrontWindshieldDeepCleaningControllerButtonToggleBody.DEEP_CLEANING_STATUS前挡深度清洁(AI(deepseek) 2026-02 生成,不可用时 5 类原因 toast)

3.5 seat 座椅(3 类,⚠️ 位置调节 RC10 起移除)

Controller基类信号功能
DriverSeatBolsterControllerTabACTIVE_BOLSTER_STATE主驾主动侧翼 3 档(关/标准/运动),areaId=SEAT_ROW_1_LEFT
DriverSideBolsterSeatBeltControllerSwitchSIDE_BOLSTER_RELATED_SEAT_BELT_STATUS侧翼随安全带(AI(deepseek) 2025-12 生成)
HvacAppSeatEntranceController跳转“查看更多”跳舒控 app(comfort://homepage/

座椅位置调节(BACK/HORIZONTAL/HEIGHT_ADJUST)UI 已移除,但信号仍定义在 SeatAdjustControl 域。

3.6 pedal 电动踏板(2 类)

Controller基类信号功能
SingleOpenPreferenceControllerButtonToggleELECTRIC_PEDAL_TEMPORARY_SWITCH_STATUS单次开启(越野/便利进入时二次确认)
ElectricPedalModeControllerTabELECTRIC_PEDAL_AUTO_MODE_STATUS自动模式 4 档(关/左/右/两侧)

3.7 glovebox 手套箱(最复杂,带密码 + MIS)

角色
GloveBoxControllerButtonIconToggle 主入口(开关+密码设置),监听 DrivingCtrl.GLOVE_BOX + CAR_MODE_STATUS
GloveBoxPasswordFragment继承 BasePinPasswordFragment,密码输入
GloveBoxPasswordDialog / GloveBoxSettingsDialogActivity密码宿主/管理页(singleInstance
GloveBoxNavigationHandlercompartment SDK,接收 MIS 语音/远程开箱(返回码 1001成功/1002需密码/1003不支持/1004需车主验证)
GloveBoxModulePublishService向 MIS 发布手套箱能力

3.8 pui 方控热键自定义(多类)

Controller功能
PUIHotKeyCustomEntryController标准滚轮入口(非 kunlun)
PUILeftHotKeyCustomEntryControllerkunlun 左键(不支持 HyperTask)
PUIRightHotKeyCustomEntryControllerkunlun 右键
CustomPUIDialog + CustomPUIDialogController自定义弹窗(3列 Grid + HyperTask,did=DID_PUI

3.9 hood 前机盖(信号驱动弹窗)

FrontHoodCloseRemindDialogFragment(继承 BaseTipsDialogFragment):监听 POWER_FRUNK_HOOD_CLOSE_REMIND 信号弹出(非 Preference 点击触发),onResume 播警告音,正向按钮下发 HOOD_CLOSE_USER_CONFIRMATION_RESPONSE=DRIVER_CONFIRM_IGNORED

3.10 childseat 童锁座椅(IoT + 信号)

功能
ChildSeatEntryController入口,通过 IotClientManager 按 model 含 carseat 识别米家儿童座椅,有设备时显示”去智能设备设置”
ChildSeatInstallPositionDialogActivity安装位置弹窗(5/6/7 座适配,SeatConfigFactory
ChildSeatDataStore/ChildSeatSignalSyncFR 信号同步、Settings.Global 读写

3.11 NFC / 无线充电 / EasyEntry

Controller基类信号功能
NfcDetectStatusPreferenceControllerSwitchBodyCtrl.NFC_DETECT_STATUS卡片钥匙检测(关闭时二次确认)
WirelessChargePreferenceControllerSwitchEnergyManagement.WIRELESS_CHARGE / RIGHT_WIRELESS_POWER_CHARGE主/副驾无线充电(按 position 区分)
EasyEntrySwitchPrefControllerSwitchDrivingCtrl.EASY_IN_OUT_MODE便利进出(CUSTOM/OFF),EventBus 接 QuickControlCmd 跳转
EasyEntryResetPrefController跳转OUT_POSITION_AVAILABLE”设置离车位置”(不可用时按 EASY_IN_OUT_NOT_AVI_RSN 显示原因)

四、主 XML 完整结构(36 项)

miauto_vehicle_body_ctrl_settings_fragment.xml,根 key = psk_settings_vehicle_quickctrl_entry。按 Category 分组:

Category包含项(key/controller)
后视镜调节mirror_adjust(MirrorSetting) · mirror_fold_when_reversing(MirrorAutoDown) · lock_mirror_fold_when_lock(MirrorFoldWhenLock) · mirror_anti_dazzle(MirrorAntiDazzle) · mirror_auto_heat(MirrorAutoHeat)
方向盘steering_wheel_adjust(SteeringWheelEntry) · pui_hotkey_custom(PUIHotKey) · pui_hotkey_left(PUILeftHotKey) · pui_kunlun_right(PUIRightHotKey)
中央扶手按键console_key_3(ConsoleKeyCustom) · console_key_4(ConsoleKey4)
雨刮wiper_entry(WiperAdjust) · wiper_sensor(WiperRainSensor, dependKey=wiper_entry) · front_windshield_deep_cleaning(FrontWindshieldDeepCleaning)
座椅lock_easy_entry(EasyEntrySwitch) · lock_easy_reset_entry(EasyEntryReset, dependKey=easy_entry) · child_seat_position(ChildSeatEntry) · seat_driver_bolster(DriverSeatBolster) · driver_side_bolster_seat_belt(DriverSideBolsterSeatBelt) · seat_adjust_guide_to_hvac(HvacAppSeat)
手套箱glove_box_toggle(GloveBox)
电动踏板electric_pedal_single_open(SingleOpen) · electric_pedal_voluntarily_open(ElectricPedalMode)
无线充电板wireless_charge_entry · right_wireless_charge_entry · voice_suggest(手机遗忘) · nfc_detect_status
更多nfc_detect_status_more(无充电板时 NFC 落此)
内链建议(hiddenFeatures=lemans_ece)sun_roof(调光天幕跳转)

dependKey 实现父子联动:wiper_sensor 依赖 wiper_entry(自动雨刮灵敏度仅在雨刮=自动时显示);easy_reset 依赖 easy_entry

五、特殊类与已知问题

说明
VehicleControlRightFragment全模块最简单(15 行),只返回车模图
VehicleAdjustHeartBeat调节类功能心跳(详见 03 文档)
compartment SDK仅手套箱用;ConsoleKey/PUI 用更底层 mis-device SDK
重复逻辑ConsoleKeyCustomDialogControllerCustomPUIDialogController 几乎对称(HyperTask 查询/事件订阅各写一遍),可抽象为基类
ConsoleKeyCustomControllerConsoleKey4CustomController仅缓存键/did 不同,可合并
AI 生成代码PUI 左右键、侧翼随安全带、前挡深度清洁等多为 AI 生成(带 BEGIN/END 标记)