01 · 代码结构与子系统
一、入口 Fragment
VehicleLockSettingsFragment(⚠️miauto.vehicle 包,不在 lock)
@MonitorFragment @VoiceSearchProvider
@Module(SettingsConstant.TAG_LOCK)
@RouterProvider(path = CarSettingsJump.VehicleLockSettings.VEHICLE_LOCK_CONTROL_URI_PATH)
public class VehicleLockSettingsFragment extends TopLevelSettingsFragment implements IPageRouteHandler {
@Override public String getPageAlias() { return PageAlias.PAGE_VEHICLE_LOCK; }
@Override public int getPreferenceScreenResId() { return R.xml.miauto_vehicle_lock_ctrl_settings_fragment; }
@Override public BaseRightFragment getRightFragment() { return new DoorAndWindowLockRightFragment(); }
@Override public List<Integer> getPreferenceKeyResIdsToRemove() { /* 14 条裁剪规则 */ }
}
继承链:VehicleLockSettingsFragment → TopLevelSettingsFragment(直接,无 AudioControl 中间层,区别于 Light)。
命名异常:入口 Fragment + 3 核心 Controller(VehicleLockToggleCtrl/VehicleDoorToggleCtrl/VehicleUnlockModeTab)都在 miauto.vehicle 包,其它门锁 Controller 在 miauto.lock。
二、Controller 继承层级图(核心参考)
CarPropertyMgrPreferenceController<V> (车信号基类)
├─ BaseVehicleNewSwitchPrefController (开关型)
│ ├─ WalkAwayLock, PGearAutoLock, UnlockAutoVentilation, CloseWindowWhenLock
│ ├─ WelcomeCarpet, WelcomeWithTailSwing (跨模块,Light 用)
│ ├─ HandleAutoFold, SmartSunRoofSync
│ ├─ AutoDoorClose (覆写 isPropertyOpen/getPropertyVal)
│ ├─ RoofSunShadeAuto, RearSunShadeAutoClose (覆写 getPropertyVal)
│ ├─ AutomaticSuspensionLowering (二次确认)
│ ├─ HeadGateSwitch, TailGateSwitch (弹 GateNoticeDialog)
│ └─ BaseLockBeep (抽象) → LockBeep
├─ BaseVehicleTabPreferenceController (Tab 型)
│ ├─ VehicleApproachUnLock, DoorModeLock, DoorOpenAngleLock
│ ├─ VehicleUnlockModeTab (弹 VehicleUnlockModeDialog)
│ ├─ SmartSunRoofTab, SmartRearSunRoofTab
├─ BaseVehicleButtonToggleGroupPropController → ButtonTogglePreference (多按钮)
│ ├─ VehicleDoorToggleCtrl (4 门电动开合) ⚠️vehicle 包
│ ├─ VehicleLockToggleCtrl (童锁+车窗锁) ⚠️vehicle 包
│ └─ ElectricReleaseHeadGate (电释放前备箱)
├─ BaseVehicleProgressPrefController (SeekBar 型)
│ ├─ HeadGateHeight, TailGateHeight (40-100%, step10)
│ └─ RoofSunShadePosition
└─ (直接继承 CarPropertyMgr)
├─ FuelLid, ElectricHeadGate, ElectricTailGate (状态机驱动)
├─ CustomBeep, CustomRearSunshadeCurtain
└─ RoofPreference (升降顶大组件), RoofTentAdjust
BaseSwitchPreferenceController (settingsBaseUi, 与车信号无关,用 Settings.Global)
└─ RoofSafetyLockController (车顶安全锁开关)
PreferenceController (直接继承)
├─ ChildLockCustom (Intent 跳 HyperTask)
├─ WelcomeLightLink (跳灯光页)
└─ RoofPasswordEntry (跳密码页)
FragmentVehicleController
├─ DoorAndWindowLockRightFragmentController (⚠️空壳)
├─ RearSunshadeAdjustmentFragmentController
└─ RearSunshadeCalibrationFragmentController
三、9 大子系统 Controller 详解
① 电动门(Doors)
| Controller | 基类 | 信号 | 功能 |
|---|
DoorModeLockController | Tab | Door.POWER_OPERATED_DOOR_MODE_STATUS | 电动门模式(手动/电吸/Auto),按 reason 弹 toast |
VehicleDoorToggleCtrl ⚠️vehicle | ButtonToggle | POWER_OPERATED_DOOR_BUTTON_STATUS+MOVING_STATUS | 4 门电动开合(主/副/左后/右后),开/关/暂停三态,UI 先行+1s 校验 |
DoorOpenAngleLockController | Tab | MAXIMUM_POWER_OPERATED_DOOR_PARAMETER_SET | 车门开启角度(标准/最大) |
AutoDoorCloseSwitchController | Switch | LockCtrl.DOOR_CINCH_ENABLE_STATUS | 车门自动吸合(反直觉:电动门支持时反而隐藏) |
HandleAutoFoldSwitchController | Switch | LockCtrl.HANDLE_AUTO_RETURN | 门把手自动内翻 |
② 童锁 + 车窗锁
| Controller | 基类 | 信号 | 功能 |
|---|
VehicleLockToggleCtrl ⚠️vehicle | ButtonToggle | WindowCtrl.REAR_LOCK_STATUS+LockCtrl.CHILDREN_LOCK | 4 按钮(左/右后童锁 + 左/右后车窗锁),2 列布局 |
ChildLockCustomController | 入口 | (Intent 跳 HyperTask) | 童锁自定义(仅 Kunlun≥26RC11) |
③④⑤ 车窗/鸣笛/迎宾
| Controller | 信号 | 功能 |
|---|
CloseWindowWhenLockController | LockCtrl.CLOSE_WINDOW_WHEN_LOCK | 锁车自动关窗 |
LockBeepController(extends BaseLockBeep) | LockCtrl.LOCK_BEEP | 锁车鸣笛(LIGHT_AND_HORN=开) |
CustomBeepController | LockCtrl.LOCK_BEEP | 个性锁车音效(跳 toybox,海外隐藏) |
WelcomeCarpetController | LockCtrl.WELCOME_CARPET | 迎宾毯灯(⚠️在 Light XML 引用) |
WelcomeWithTailSwingController | LockCtrl.TAIL_WELCOME_MODE | 迎宾尾翼随动(⚠️在 Light XML 引用) |
WelcomeLightLinkController | (Intent) | 迎宾灯效入口(跳灯光页,Kunlun 选不同 widget) |
⑥ 盖板(gate 包)
| Controller | 信号 | 功能 |
|---|
ElectricReleaseHeadGateController | Door.STATE(area=HOOD) | 电释放前备箱(单按钮 Toggle) |
ElectricHeadGatePreferenceController | Door.FRUNK_DCD_STATE | 电动前备箱(FrunkDcdState 7 态状态机,5 态 UI) |
HeadGateSwitchController | Door.UWB_TRUNK_SET(area=HOOD) | 自动开启前备箱(UWB) |
HeadGateHeightPrefController | DoorCtrl.ELECTRIC_HEAD_GATE_HEIGHT | 前备箱高度限值(40-100%,step10) |
ElectricTailGatePreferenceController | Door.ELECTRIC_TAIL_GATE | 电动后备箱(7 态状态机) |
TailGateSwitchController | Door.UWB_TRUNK_SET(area=REAR) | 自动开启后备箱(UWB) |
TailGateHeightPrefController | DoorCtrl.ELECTRIC_TAIL_GATE_HEIGHT | 后备箱高度限值 |
FuelLidController | DoorCtrl.FUEL_LID_STATUS | 油箱盖(仅增程式,3 态 LOCKD/UNLCKD/DECPRSING) |
前备箱=FRUNK(Front Trunk);HeadGate/TailGate Switch 共用 Door.UWB_TRUNK_SET 信号,靠 area(HOOD/REAR) 区分。
⑦ 遮阳帘天幕(详见 03 专题)
| Controller | 信号 |
|---|
SmartSunRoofTabController / SmartRearSunRoofTabController | DIM_ROOF_TRANSMIT_LEVEL(LEVEL1/LEVEL5) |
SmartSunRoofSyncController | DIM_ROOF_TRANSMIT_SYNC |
RoofSunShadePositionController | SUN_SHADE_ADJ_HMI(点动)+SUN_SHADE_CURRENT_POSN(目标位置) |
RoofSunShadeAutoController / RearSunShadeAutoCloseController | LOCK_CAR_CLOSE_SUN_SHADE_CONFIGURATION(共用,area 区分) |
CustomRearSunshadeCurtainPreferenceController | SUN_SHADE_LEARN_STATUS(校准判断) |
RearSunshadeAdjustment/Calibration Fragment+Controller | SUNSHADE_TARGET_POSITION+SUN_SHADE_LRN_SET |
⑧ 升降车顶 + 安全锁密码(详见 03 专题)
| Controller | 信号 | 功能 |
|---|
RoofTentAdjustController(旧,E4U3前) | Body.POWER_LIFTING_ROOF_MODULE_* | 车顶帐篷入口(P 挡保护+密码) |
RoofPreferenceController(新,E4U3后) | Body.POWER_LIFTING_ROOF_*(18 信号) | 升降车顶大组件(开/升/降) |
RoofSafetyLockController | Settings.Global | 安全锁开关(非车信号+MIS) |
RoofPasswordEntryController/RoofPasswordFragment | (密码验证) | 4 位 PIN 输入 |
⑨ 门锁逻辑
| Controller | 信号 | 功能 |
|---|
VehicleApproachUnLockController | DoorCtrl.APPROACHING_UNLOCK | 无感解锁时机(拉门/走近) |
VehicleUnlockModeTabLayoutPrefController | DoorCtrl.DRIVER_UNLOCK_SETTING | 解锁范围(整车/仅主驾,弹 Dialog) |
WalkAwayLockController | LockCtrl.WALK_AWAY_LOCK | 离车自动锁车 |
PGearAutoLockController | LockCtrl.P_GEAR_AUTO_LOCK | P 挡解锁 |
AutomaticSuspensionLoweringController | DrivingCtrl.EASY_ENTRY | 锁车降悬架(踏板开启时二次确认) |
UnlockAutoVentilationController | LockCtrl.UNLOCK_AUTO_VENTILATION | 解锁通风 |
四、主 XML 11 个 Category
miauto_vehicle_lock_ctrl_settings_fragment.xml,根 key=psk_settings_vehicle_lock_quickctrl_entry:
| Category | 内容 |
|---|
A 电动门(door_category) | 门模式 · 4门开合(dependKey) · 开启角度(dependKey) |
B 童锁车窗锁(lock_category) | 童锁+车窗锁 4 按钮 · 童锁自定义(注释,rc11) |
C 车门(door_action) | 自动吸合 · 门把手内翻 |
D 前备箱(headgate_height_category) | 电释放 · 电动 · 自动 · 高度限值 |
E 后备箱(tailgate_height_category) | 电动 · 自动 · 高度限值 |
F 车顶帐篷(roof_tent_category) | 帐篷调节 · 安全锁 · 密码入口(Kunlun E4U3) |
G 调光天幕(smart_sun_roof,hiddenFeatures=lemans_ece) | 透光度(单/双分区) · 同步 |
H 加油口(fuel_lid) | 解锁加油口(增程式) |
I 后排遮阳帘(rear_sunshade_curtain_category) | 调节入口 · 锁车自动关(Kunlun E4U3) |
J 门锁逻辑(door_lock_mode) | 无感解锁 · 解锁范围 · 离车锁 · P挡 · 关窗 · 降悬架 · 通风 · 鸣笛 · 个性音效 |
K 遮阳帘(roof_sun_shade) | 位置滑杆 · 锁车自动关(Kunlun E4U2) |
| L 升降车顶 | 升降顶大组件(Kunlun E4U3) |
M 内链(suggestion_category,hiddenFeatures=lemans_ece) | 迎宾灯效入口 |
五、特殊类
| 类 | 说明 |
|---|
DoorUnLockActivity | 车门解锁失败全屏弹窗,由 android.settings.DOOR_UNLOCK Intent 拉起(外部触发),8 秒倒计时,订阅 Door.STATE+DOOR_NOT_CLOSED_LOCK_FAILED,独立于 Controller |
DoorAndWindowLockRightFragment | 右栏静态车模图 + 升降车顶显示态信号管理(POWER_LIFT_ROOF_ADJUST_FLAG) |
DoorAndWindowLockRightFragmentController | 空壳(仅 TAG) |
GateNoticeDialog | 盖板 UWB 自动开启说明弹窗 |
RoofOptionConfirmDialog/RoofFallInspectConfirmDialog | 升降车顶二次确认/检查弹窗 |
六、代码异味(对抗验证)
| # | 异味 |
|---|
| 1 | 入口 Fragment + 3 核心 Controller 在 vehicle 包不在 lock 包 |
| 2 | WelcomeCarpet/WelcomeWithTailSwing 跨模块(定义 Lock,用 in Light) |
| 3 | DoorAndWindowLockRightFragmentController 空壳(形式主义) |
| 4 | 门吸逻辑反直觉(电动门支持或 UNKNOW 时反而隐藏) |
| 5 | 整个 roof/password 包 + RoofTent + ChildLockCustom 都是 AI 生成(DeepSeek/Claude) |
| 6 | SUN_SHADE_CURRENT_POSN 命名陷阱(实际是目标位置 SUNSHADE_TARGET_POSITION) |
| 7 | CoverStateController/RoofPasswordEntry 用系统 Preference 而非 BasicPreference(风格不一) |