手套箱 06 · 演进历史与问题单
本篇回答:手套箱代码是怎么长成今天这样的;每个历史坑是什么。 来源:
git log --follow@fuben31_micarsettings/MiCarSettingsdev(跨分支去重)
1. 演进时间线
timeline title 手套箱功能演进 2024-08-20 : DCD 仓迁入 MiCarSettings<br/>三件套落仓(Controller/PasswordDialog/PasswordTools) 2024-09-27 : MIS 原子能力<br/>ModulePublishService + NavigationHandler + compartment_ddf 2024-10-21 : 代客模式未置灰修复 2025-02-05 : 密码手套箱 UI 大重构<br/>SettingsDialogActivity 登场,删 PasswordController 2025-02-19 : 不可用提示(UNAVL_REASON 三分支) 2025-02-24 : P 挡不拉起车主验证 2025-03-12 : 双按钮控件化(ButtonIconToggleGroup) 2025-05-06 : 账号验证链路重构<br/>Fragment 拆分 + AccountVerifyUtils 2025-10-14 : 关闭密码 Toast 异常修复 2025-10~12 : 密码设置入口未及时显示 part1/part2<br/>引入登录广播监听 2026-04-03 : 迁移通用 PIN 框架(与升降顶共用)<br/>精简 ~425 行 2026-08-14 : 信号接入迁移 MiCarPropertySDK 2026-08-19 : 埋点落地(3 事件) 2026-08-24 : targetSdk 37 适配(RECEIVER_EXPORTED)
2. 关键提交详表
| Hash | 日期 | Subject | 改了什么 |
|---|---|---|---|
840b6b371 | 2024-08-20 | [Refactor][MS11-OTA3][Settings]DCD-MiCarSetting | 手套箱首次落仓:Controller + PasswordDialog + PasswordTools(此前在 DCD Settings 仓) |
e08cae248 | 2024-09-27 | [Feature][MX11-E4U3][Vehicle] 增加手套箱原子能力 | 新增 ModulePublishService + NavigationHandler + res/raw/compartment_ddf.json(iid=32)。语音/远程开箱开口 |
aa42a4ac2 | 2024-10-21 | [Bugfix][MX11-E4U2][Vehicle] 修复代客模式下手套箱未置灰 | 代客禁用逻辑 |
497ad249b / 54de5cdef | 2025-02-05 | [Feature][MX11-E4U3][Control] 密码手套箱功能优化 | UI 大重构:新增 GloveBoxButton/GloveBoxPreference/GloveBoxSettingsDialogActivity;删 GloveBoxPasswordController(-158 行);dcddif 与 xcddif 双 Manifest 注册 |
62b9c74a6 | 2025-02-19 | [Feature][Lemans-E4U3] 手套箱增加不可用提示 | GLOVE_BOX_UNAVL_REASON Toast 三分支。JIRA N801PROB-34263 |
d1add8b33 | 2025-02-24 | [Bugfix][Lemans-E4U3][Control] 手套箱P档时不拉起车主验证弹窗 | 挡位检查 + CarConfigManager.getGloveBoxLockType()。JIRA SWIM-42604 / N801PROB-28532 |
0eac165c9 | 2025-02-28 | [Bugfix][Lemans-E4U3][Control] 手套箱走查问题修复 | UX 走查批修 |
e86aaf86c / 6f78c5071 | 2025-03-12 | [Feature][MS11-25RC03][Driving] 后视镜手套箱改为ButtonIconPreference | 双按钮控件化(现形态) |
3dcb687fd | 2025-03-21 | [Bugfix][All-Vehicle][GloveBox] 输入密码未屏蔽可见即可说 | 密码页屏蔽语音 |
83b57be26 | 2025-04-15 | [Bugfix][Lemans-E4U3.5][Display] 非用户模式屏蔽手套箱功能 | 车主/访客模式过滤 |
f2a761a2c | 2025-05-06 | [Bugfix][All-Vehicle][Control] 接入账号新方案,修复快控拉起账号验证BUG | 拆出 GloveBoxPasswordFragment + 薄壳 Dialog + AccountVerifyUtils(158 行)。JIRA N801PROB-35871 / N801PROB-52066 |
17a1d8679 | 2025-05-21 | [Bugfix][All][Control] 更新mis SDK | MIS 两文件适配新 SDK。JIRA N801PROB-51015 |
3eb535af0 | 2025-06-09 | [Bugfix][Lemans-E4U3][Control] 修改手套箱可用模式范围 | 模式白名单调整 |
1cdb00123 | 2025-07-16 | [Bugfix][All-Vehicle][Control] 切换主题后点修改密码闪退 | 主题切换 crash |
fd7b877b8 | 2025-07-31 | [Bugfix][All-VehicleRC10][BodyCtrl] 手套箱开关无法打开问题修复 | 开箱链路修复 |
68cf70e9c | 2025-10-14 | [Bugfix][All-Vehicle][VehicleBodyControl] 关闭手套箱密码 toast 弹出异常 | mIsForgetPassword 置位时机。JIRA N801PROB-73414 |
55ddcf397 / 5a2f3b2ee | 2025-10-28 / 2025-12-08 | [Bugfix][All-Vehicle][VehicleBodyControl] 手套箱密码设置未及时显示 / part2 | Application Context + 登录广播监听(mLoginReceiver 诞生) |
4ed293020 | 2025-11-12 | [Feature][Lemans-GT][Theme]Lemans-GT主题part2.4 | 主题化。Meego 3050118 |
fde7fbfbb / a064a6528 | 2026-04-03 | [Feature][All-Vehicle][Lock]添加升降顶密码功能 | 重要重构:密码基础设施平台化——PinPasswordConfig/Tools/CheckUtils/AccountVerifyUtils 下沉 base;手套箱只剩薄委托(-~425 行);新增 GloveBoxAccountVerifyUtils/GloveBoxPasswordCheckUtils。与升降顶舱共用同一框架。Meego 4924455 |
1c4cf181f | 2026-08-14 | [Feature][All-Vehicle][MiCarPropertySDK] 车辆信号接入迁移 | android.car.hardware.* → mi.car.property.hardware.* |
962127a41 / 877ea9d95 | 2026-08-19 | [Feature][All-Vehicle][base] 车辆控制模块埋点实现 | VehicleControlReporter 三个手套箱事件。Meego 3860784 |
b57402a19 | 2026-08-24 | [Feature][All-Vehicle] targetSdk 升级 37 适配 part1 | registerReceiver 显式 RECEIVER_EXPORTED(:318-325) |
3. 从 commit 史读出的三个规律
3.1 四次大改,方向都是「拆薄」
flowchart LR V1["2024-08 初代<br/>Controller+Dialog+Tools<br/>全自己写"] --> V2["2025-02 密码管理独立<br/>+SettingsDialogActivity<br/>-PasswordController"] V2 --> V3["2025-05 账号链路拆分<br/>+Fragment +AccountVerifyUtils"] V3 --> V4["2026-04 框架平台化<br/>PIN 框架下沉 base<br/>手套箱剩薄委托"]
每次重构都让手套箱包更小:2026-04 后 glovebox 目录 10 个类里 4 个是 40-60 行的薄委托(PasswordTools/PasswordCheckUtils/AccountVerifyUtils/PasswordFragment)。 读老问题单时注意按时间对代码形态:2026-04 前的「密码逻辑在 GloveBoxPasswordTools」 与现在的「密码逻辑在 PinPasswordTools」是同一个功能的两代实现。
3.2 车型标签分布
- 显式覆盖:
MS11-OTA3、MX11-E4U2/E4U3、Lemans-E4U3/E4U3.5/GT、All-Vehicle(含 RC10/25RC09/26RC05); KUNLUN-E3U1仅通用 Lock 代码间接触及,无手套箱独立提交;- 结论与 01 篇一致:没有车型白名单硬编码,运行时按配置字 POWER 显隐;flavor
dcd / xcd_cn_a14 / xcd_global_a14 / xcd_cn_a17 / xcd_global_a17全量编译 (settingsPage/VehicleBodyControl/build.gradle:11-32)。
3.3 问题集中在三个面
| 面 | 代表单 | 教训 |
|---|---|---|
| 模式/门控 | 代客未置灰、非用户模式屏蔽、可用模式范围、P 挡拉起验证 | 门控分支多,改动必须过一遍 01 篇 §3 三道门控 |
| 密码 UX | Toast 异常、入口未及时显示、主题切换闪退 | 密码弹窗状态刷新靠 callback 末尾 updateUIState(),漏一处就「不更新」 |
| 对外链路 | MIS SDK 更新、快控拉账号验证 | MIS/账号验证是外部依赖,SDK 升级要回归 |
4. 关联 JIRA / Meego 索引
commit message 直接引用的 JIRA(本地 jira-data 暂无手套箱主题单,可按需 fetch):
| 单号 | 主题 | 对应修复 |
|---|---|---|
| N801PROB-34263 | 手套箱不可用提示 | 62b9c74a6 |
| N801PROB-28532 / SWIM-42604 | P 挡不拉起车主验证 | d1add8b33 |
| N801PROB-35871 / N801PROB-52066 | 快控拉起账号验证 BUG | f2a761a2c |
| N801PROB-51015 | MIS SDK 更新 | 17a1d8679 |
| N801PROB-73414 | 关闭密码 Toast 异常 | 68cf70e9c |
Meego 需求号:
| 需求号 | 内容 |
|---|---|
| 2101813 | 手套箱原子能力(MIS) |
| 2350608 | 密码手套箱功能优化 |
| 4924455 | 升降顶密码 + 手套箱密码迁移通用框架 |
| 3860784 | 车辆控制模块埋点(25 事件) |
| 3050118 | Lemans-GT 主题 |
本地检索实证(
/home/zbc/下载/test/车机JIRA/jira-data/全量 grep): 没有以手套箱为主题的 JIRA 单;命中均为蓝牙/网络类单的 bugreport 附件里偶然出现 GloveBox 日志行。若接手新单,先 jira-fetch 再对照本篇 commit 表定位代码形态。