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 条裁剪规则 */ }
}

继承链VehicleLockSettingsFragmentTopLevelSettingsFragment(直接,无 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基类信号功能
DoorModeLockControllerTabDoor.POWER_OPERATED_DOOR_MODE_STATUS电动门模式(手动/电吸/Auto),按 reason 弹 toast
VehicleDoorToggleCtrl ⚠️vehicleButtonTogglePOWER_OPERATED_DOOR_BUTTON_STATUS+MOVING_STATUS4 门电动开合(主/副/左后/右后),开/关/暂停三态,UI 先行+1s 校验
DoorOpenAngleLockControllerTabMAXIMUM_POWER_OPERATED_DOOR_PARAMETER_SET车门开启角度(标准/最大)
AutoDoorCloseSwitchControllerSwitchLockCtrl.DOOR_CINCH_ENABLE_STATUS车门自动吸合(反直觉:电动门支持时反而隐藏)
HandleAutoFoldSwitchControllerSwitchLockCtrl.HANDLE_AUTO_RETURN门把手自动内翻

② 童锁 + 车窗锁

Controller基类信号功能
VehicleLockToggleCtrl ⚠️vehicleButtonToggleWindowCtrl.REAR_LOCK_STATUS+LockCtrl.CHILDREN_LOCK4 按钮(左/右后童锁 + 左/右后车窗锁),2 列布局
ChildLockCustomController入口(Intent 跳 HyperTask)童锁自定义(仅 Kunlun≥26RC11)

③④⑤ 车窗/鸣笛/迎宾

Controller信号功能
CloseWindowWhenLockControllerLockCtrl.CLOSE_WINDOW_WHEN_LOCK锁车自动关窗
LockBeepController(extends BaseLockBeep)LockCtrl.LOCK_BEEP锁车鸣笛(LIGHT_AND_HORN=开)
CustomBeepControllerLockCtrl.LOCK_BEEP个性锁车音效(跳 toybox,海外隐藏)
WelcomeCarpetControllerLockCtrl.WELCOME_CARPET迎宾毯灯(⚠️在 Light XML 引用)
WelcomeWithTailSwingControllerLockCtrl.TAIL_WELCOME_MODE迎宾尾翼随动(⚠️在 Light XML 引用)
WelcomeLightLinkController(Intent)迎宾灯效入口(跳灯光页,Kunlun 选不同 widget)

⑥ 盖板(gate 包)

Controller信号功能
ElectricReleaseHeadGateControllerDoor.STATE(area=HOOD)电释放前备箱(单按钮 Toggle)
ElectricHeadGatePreferenceControllerDoor.FRUNK_DCD_STATE电动前备箱(FrunkDcdState 7 态状态机,5 态 UI)
HeadGateSwitchControllerDoor.UWB_TRUNK_SET(area=HOOD)自动开启前备箱(UWB)
HeadGateHeightPrefControllerDoorCtrl.ELECTRIC_HEAD_GATE_HEIGHT前备箱高度限值(40-100%,step10)
ElectricTailGatePreferenceControllerDoor.ELECTRIC_TAIL_GATE电动后备箱(7 态状态机)
TailGateSwitchControllerDoor.UWB_TRUNK_SET(area=REAR)自动开启后备箱(UWB)
TailGateHeightPrefControllerDoorCtrl.ELECTRIC_TAIL_GATE_HEIGHT后备箱高度限值
FuelLidControllerDoorCtrl.FUEL_LID_STATUS油箱盖(仅增程式,3 态 LOCKD/UNLCKD/DECPRSING)

前备箱=FRUNK(Front Trunk);HeadGate/TailGate Switch 共用 Door.UWB_TRUNK_SET 信号,靠 area(HOOD/REAR) 区分。

⑦ 遮阳帘天幕(详见 03 专题)

Controller信号
SmartSunRoofTabController / SmartRearSunRoofTabControllerDIM_ROOF_TRANSMIT_LEVEL(LEVEL1/LEVEL5)
SmartSunRoofSyncControllerDIM_ROOF_TRANSMIT_SYNC
RoofSunShadePositionControllerSUN_SHADE_ADJ_HMI(点动)+SUN_SHADE_CURRENT_POSN(目标位置)
RoofSunShadeAutoController / RearSunShadeAutoCloseControllerLOCK_CAR_CLOSE_SUN_SHADE_CONFIGURATION(共用,area 区分)
CustomRearSunshadeCurtainPreferenceControllerSUN_SHADE_LEARN_STATUS(校准判断)
RearSunshadeAdjustment/Calibration Fragment+ControllerSUNSHADE_TARGET_POSITION+SUN_SHADE_LRN_SET

⑧ 升降车顶 + 安全锁密码(详见 03 专题)

Controller信号功能
RoofTentAdjustController(旧,E4U3前)Body.POWER_LIFTING_ROOF_MODULE_*车顶帐篷入口(P 挡保护+密码)
RoofPreferenceController(新,E4U3后)Body.POWER_LIFTING_ROOF_*(18 信号)升降车顶大组件(开/升/降)
RoofSafetyLockControllerSettings.Global安全锁开关(非车信号+MIS)
RoofPasswordEntryController/RoofPasswordFragment(密码验证)4 位 PIN 输入

⑨ 门锁逻辑

Controller信号功能
VehicleApproachUnLockControllerDoorCtrl.APPROACHING_UNLOCK无感解锁时机(拉门/走近)
VehicleUnlockModeTabLayoutPrefControllerDoorCtrl.DRIVER_UNLOCK_SETTING解锁范围(整车/仅主驾,弹 Dialog)
WalkAwayLockControllerLockCtrl.WALK_AWAY_LOCK离车自动锁车
PGearAutoLockControllerLockCtrl.P_GEAR_AUTO_LOCKP 挡解锁
AutomaticSuspensionLoweringControllerDrivingCtrl.EASY_ENTRY锁车降悬架(踏板开启时二次确认)
UnlockAutoVentilationControllerLockCtrl.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 包
2WelcomeCarpet/WelcomeWithTailSwing 跨模块(定义 Lock,用 in Light)
3DoorAndWindowLockRightFragmentController 空壳(形式主义)
4门吸逻辑反直觉(电动门支持或 UNKNOW 时反而隐藏)
5整个 roof/password 包 + RoofTent + ChildLockCustom 都是 AI 生成(DeepSeek/Claude)
6SUN_SHADE_CURRENT_POSN 命名陷阱(实际是目标位置 SUNSHADE_TARGET_POSITION)
7CoverStateController/RoofPasswordEntry 用系统 Preference 而非 BasicPreference(风格不一)