01 · 代码结构与子系统
一、入口 Fragment
DrivingSettingsFragment(miauto.driving 包)
@VoiceSearchProvider @Module(TAG_DRIVING) @RouterProvider(path=...) @MonitorFragment
public class DrivingSettingsFragment extends TopLevelSettingsFragment implements IPageRouteHandler
getRightFragment() → BaseDrivingRightFragment(驾驶模式可视化);radar/view 下有 DrivingRadarRightFragment(雷达图,自定义模式用)。getPreferenceKeyResIdsToRemove() 按车型三选一互斥裁剪(MS11P/Kunlun·LeMansGT/其他)。
二、三大包分工(命名混乱,需注意)
| 包 | 职责 |
|---|
com.android.car.settings.miauto.driving | 主驾驶模式 Tab、一级页 Controller(悬架/能量回收/制动/蠕行/坡道/MotionWave 普通版)、车主模式入口、DrivingFragmentViewModel |
com.android.micar.settings.driving | 驾驶场景模式引擎(DriveModeBase + DriveMode/DriveModeButtonIcon + TerrainMode + LaunchMode + SafetyExam + 拖挂 + ARS/ARD) |
com.android.micar.settings.driving.custom | 自定义驾驶模式(CustomSteeringMode + 4 基类 + 18 维度 + 预设管理/分享) |
com.android.micar.settings.driving.contrast | 驾驶模式对比表 |
com.android.micar.settings.dms | DMS 驾驶员监测(疲劳/分心) |
com.android.micar.settings.avm | AVM 全景影像 |
com.android.micar.settings.vehicle | 各种模式 Open/Close/Failed Dialog |
三、Controller 继承层级(核心)
CarPropertyMgrPreferenceController<V>
├─ BaseVehicleTabPreferenceController (Tab)
│ ├─ DriveModeBasePreferenceController (1950行,场景模式核心抽象) ← 驾驶场景模式
│ │ ├─ DriveModePreferenceController (10模式文字Toggle)
│ │ ├─ DriveModeButtonIconPreferenceController (9模式大ICON)
│ │ └─ TerrainModePreferenceController (5地形,独立)
│ ├─ SteeringModePreferenceController (主驾驶模式Tab)
│ │ └─ SteeringModeExtendPreferenceController (带对比表+暗门)
│ ├─ BaseCustomSinglePropTabLayPrefController ← 自定义Tab基类
│ │ ├─ CustomEnergyRecoveryMode / SteerAssistantParam / SuspensionHeightParam
│ │ ├─ SuspensionDampingParam / CustomARS / CustomESC / CustomTC / CustomELSD
│ │ └─ TractionRatioModeParam / CustomMotionWaveModeTab
│ └─ BrakingStrengthTab / EnergyModeTab / AvmNarrowRoad / AvmBlindSpotTab
├─ BaseVehicleNewSwitchPrefController (Switch)
│ ├─ MotionWaveParamSwitch / DrivingAtmosphere / DrivingSteeringAssist
│ ├─ SuspensionHeightFollowSpeed / AutomaticSuspension / SimulatedGearShift
│ ├─ BaseCustomNewSwitchPrefController ← 自定义Switch基类
│ │ ├─ CustomAntiRoll / TractionRatioManualCompensation
│ │ └─ CustomSteeringMode (入口)
│ └─ BaseLockBeep-style: AvmDelayClose / AvmReverseTransparency / AvmBlindSpot
├─ BaseVehicleProgressPrefController (Slider)
│ ├─ AccelerateParam / BrakingStrength / BrakePedalFeel
│ ├─ SuspensionHeight / TractionRatioParam
│ └─ BaseCustomVehicleProgressPrefController ← 自定义Slider基类
│ ├─ CustomEnergyRecoveryStrength
│ └─ CustomMotionWaveInsideCar/OutsideCarVolumeSlider
├─ BaseVehicleButtonToggleGroupPropController (多按钮)
│ └─ AvmRearViewButtonToggle
├─ BaseAudioSettingsSwitchPrefController / BaseAudioSettingsTabLayPrefController (AudioSettings非CarProperty)
│ ├─ MotionWaveSwitch / MotionWaveModeTab / MotionWaveInsideCarVolumeSlider (普通版)
│ └─ BaseCustomAudioSettingSwitch / BaseCustomSingleAudioTabLay ← 自定义Audio基类
│ └─ CustomMotionWaveParamSwitch / CustomMotionWaveModeTab (M1/M2版)
└─ (直接继承)
├─ DriveModePreferenceController(主模式入口,列表版)
├─ CustomSteeringModeMenuPreferenceController (菜单:编辑/添加/导入/分享)
├─ LaunchModePreferenceController (弹射教程入口)
├─ SafetyExamReviewPreferenceController (安全考试)
├─ OwnerModeEntranceController (车主模式,标题随信号切)
└─ ARS/ARD/TowModeWarning/DamperSetting...
⚠️ SpecialSteeringModePreferenceController.java / ..UPreferenceController.java 是 0 字节空文件(历史占位),真正生效的是 DriveModePreferenceController / DriveModeButtonIconPreferenceController。
四、主 XML 11 个 Category(miauto_driving_settings_fragment.xml)
| Category | 关键 Controller |
|---|
| ①驾驶模式+能量模式 | SteeringModeExtend + CustomSteeringMode + CustomSteeringModeExtend + EnergyModeTab + EV优先 + 强制充电 |
| ②地形模式 | TerrainMode(5 选 1) |
| ③驾驶场景模式(按钮版) | DriveModeButtonIcon + TowModeWarning |
| ④驾驶参数 | SteerAssistant + BrakingStrengthTab/Preference + CreepSpeed + RampAssist + BrakePedalFeel |
| ⑤转向辅助 | DrivingSteeringAssist + SteerAssistant(MX11/Kunlun) |
| ⑥动效音波+氛围+模拟换挡 | MotionWaveSwitch/Mode/Volume + DrivingAtmosphere + SimulatedGearShift |
| ⑦悬架 | SuspensionHeight + FollowSpeed + Automatic + ARS + ARD |
| ⑧AVM全景影像 | AvmDelayClose + ReverseTransparency + NarrowRoad + ShortRangeObstacleWarning(跨模块) + RearViewButtonToggle + RearViewAuto + BlindSpot |
| ⑨DMS | DmsFatigue(Pref+Switch) + DmsDistraction(Pref+Switch) |
| ⑩驾驶模式(列表版)+弹射 | DriveModePreferenceController + TowWarning + LaunchMode |
| ⑪安全考试+车主模式 | SafetyExamReview + OwnerModeEntrance |
自定义页 XML(micar_custom_steering_mode_fragment)含 18 维度,详见《04-自定义驾驶模式专题》。
五、关键 Fragment/Dialog
| 类 | 作用 |
|---|
DrivingRadarRightFragment | 自定义模式雷达图右栏(多维度可视化) |
CustomSteeringModeFragment | 自定义模式参数页(二级) |
SteeringModeShareFragment | 预设分享(9 位码 + 雷达图) |
LaunchModeGuideFragment / DragRacingModeGuideFragment | 弹射/直线竞速教程(二级页) |
EnergyModeEvPriorityFragment / EnergyModeForceChargeFragment | 强制纯电/充电(二级页,增程车) |
DamperSettingDialogActivity | 避震阻尼(注释掉,工程模式) |
| 模式 Dialog(20+) | EcoMode/WetMode/OffRoadMode/HdcMode/WadingMode/CrabRowMode/MotionSicknessMode/DragRacingMode/TowMode 的 Open/Close/Failed/Request + TowBarExtend/Retract + EcoMode/WetMode SmartOpen |
SteeringModeContrastDialog | 驾驶模式对比表(行=维度,列=模式) |
CustomModeListDialog | 预设管理(编辑/删除/分享) |
EditSteeringModeNameDialog | 预设命名 |
六、ViewModel
| ViewModel | 作用 |
|---|
DrivingFragmentViewModel | 主页状态 |
SteeringModeViewModel | 自定义预设核心(M1/M2 切换、创建/删除/分享,MAX_LIST_SIZE=10) |
DamperSettingViewModel | 避震阻尼 |
七、代码异味(对抗验证)
| # | 异味 |
|---|
| 1 | 三大包命名混乱(miauto.driving / micar.settings.driving / micar.settings.driving.custom) |
| 2 | SpecialSteeringMode*.java 0 字节空文件(历史占位未删) |
| 3 | STEERING_MODE=DRIVE_MODE、BRAKING_MODE=REGENERATION_MODE(命名陷阱) |
| 4 | SUSPENSION_DAMP_NORMAL=运动、SUSPENSION_DAMP_SPORT=运动+(信号名与 UI 语义错位) |
| 5 | MotionWave 普通版(MotionWaveSwitch 系)与自定义版(CustomMotionWave 系)两套并存 |
| 6 | DamperSetting(避震阻尼 1-10 档)注释掉,工程模式专属 |
| 7 | 暗门:SteeringModeExtendPreferenceController 标题暗门点击→强制关闭驾驶安全保护 |
| 8 | 跨模块引用:AVM 组用 MiCarAutoPilotShortRangeObstacleWarning(autopilot 模块) |
| 9 | AI 生成密集:roof/password 式的 BATTLE/Track/Drag/Launch 相关(DeepSeek/Claude) |