手套箱 06 · 演进历史与问题单

本篇回答:手套箱代码是怎么长成今天这样的;每个历史坑是什么。 来源:git log --follow @ fuben31_micarsettings/MiCarSettings dev(跨分支去重)

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改了什么
840b6b3712024-08-20[Refactor][MS11-OTA3][Settings]DCD-MiCarSetting手套箱首次落仓:Controller + PasswordDialog + PasswordTools(此前在 DCD Settings 仓)
e08cae2482024-09-27[Feature][MX11-E4U3][Vehicle] 增加手套箱原子能力新增 ModulePublishService + NavigationHandler + res/raw/compartment_ddf.json(iid=32)。语音/远程开箱开口
aa42a4ac22024-10-21[Bugfix][MX11-E4U2][Vehicle] 修复代客模式下手套箱未置灰代客禁用逻辑
497ad249b / 54de5cdef2025-02-05[Feature][MX11-E4U3][Control] 密码手套箱功能优化UI 大重构:新增 GloveBoxButton/GloveBoxPreference/GloveBoxSettingsDialogActivity;删 GloveBoxPasswordController(-158 行);dcddif 与 xcddif 双 Manifest 注册
62b9c74a62025-02-19[Feature][Lemans-E4U3] 手套箱增加不可用提示GLOVE_BOX_UNAVL_REASON Toast 三分支。JIRA N801PROB-34263
d1add8b332025-02-24[Bugfix][Lemans-E4U3][Control] 手套箱P档时不拉起车主验证弹窗挡位检查 + CarConfigManager.getGloveBoxLockType()。JIRA SWIM-42604 / N801PROB-28532
0eac165c92025-02-28[Bugfix][Lemans-E4U3][Control] 手套箱走查问题修复UX 走查批修
e86aaf86c / 6f78c50712025-03-12[Feature][MS11-25RC03][Driving] 后视镜手套箱改为ButtonIconPreference双按钮控件化(现形态)
3dcb687fd2025-03-21[Bugfix][All-Vehicle][GloveBox] 输入密码未屏蔽可见即可说密码页屏蔽语音
83b57be262025-04-15[Bugfix][Lemans-E4U3.5][Display] 非用户模式屏蔽手套箱功能车主/访客模式过滤
f2a761a2c2025-05-06[Bugfix][All-Vehicle][Control] 接入账号新方案,修复快控拉起账号验证BUG拆出 GloveBoxPasswordFragment + 薄壳 Dialog + AccountVerifyUtils(158 行)。JIRA N801PROB-35871 / N801PROB-52066
17a1d86792025-05-21[Bugfix][All][Control] 更新mis SDKMIS 两文件适配新 SDK。JIRA N801PROB-51015
3eb535af02025-06-09[Bugfix][Lemans-E4U3][Control] 修改手套箱可用模式范围模式白名单调整
1cdb001232025-07-16[Bugfix][All-Vehicle][Control] 切换主题后点修改密码闪退主题切换 crash
fd7b877b82025-07-31[Bugfix][All-VehicleRC10][BodyCtrl] 手套箱开关无法打开问题修复开箱链路修复
68cf70e9c2025-10-14[Bugfix][All-Vehicle][VehicleBodyControl] 关闭手套箱密码 toast 弹出异常mIsForgetPassword 置位时机。JIRA N801PROB-73414
55ddcf397 / 5a2f3b2ee2025-10-28 / 2025-12-08[Bugfix][All-Vehicle][VehicleBodyControl] 手套箱密码设置未及时显示 / part2Application Context + 登录广播监听(mLoginReceiver 诞生)
4ed2930202025-11-12[Feature][Lemans-GT][Theme]Lemans-GT主题part2.4主题化。Meego 3050118
fde7fbfbb / a064a65282026-04-03[Feature][All-Vehicle][Lock]添加升降顶密码功能重要重构:密码基础设施平台化——PinPasswordConfig/Tools/CheckUtils/AccountVerifyUtils 下沉 base;手套箱只剩薄委托(-~425 行);新增 GloveBoxAccountVerifyUtils/GloveBoxPasswordCheckUtils。与升降顶舱共用同一框架。Meego 4924455
1c4cf181f2026-08-14[Feature][All-Vehicle][MiCarPropertySDK] 车辆信号接入迁移android.car.hardware.* → mi.car.property.hardware.*
962127a41 / 877ea9d952026-08-19[Feature][All-Vehicle][base] 车辆控制模块埋点实现VehicleControlReporter 三个手套箱事件。Meego 3860784
b57402a192026-08-24[Feature][All-Vehicle] targetSdk 升级 37 适配 part1registerReceiver 显式 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 三道门控
密码 UXToast 异常、入口未及时显示、主题切换闪退密码弹窗状态刷新靠 callback 末尾 updateUIState(),漏一处就「不更新」
对外链路MIS SDK 更新、快控拉账号验证MIS/账号验证是外部依赖,SDK 升级要回归

4. 关联 JIRA / Meego 索引

commit message 直接引用的 JIRA(本地 jira-data 暂无手套箱主题单,可按需 fetch):

单号主题对应修复
N801PROB-34263手套箱不可用提示62b9c74a6
N801PROB-28532 / SWIM-42604P 挡不拉起车主验证d1add8b33
N801PROB-35871 / N801PROB-52066快控拉起账号验证 BUGf2a761a2c
N801PROB-51015MIS SDK 更新17a1d8679
N801PROB-73414关闭密码 Toast 异常68cf70e9c

Meego 需求号:

需求号内容
2101813手套箱原子能力(MIS)
2350608密码手套箱功能优化
4924455升降顶密码 + 手套箱密码迁移通用框架
3860784车辆控制模块埋点(25 事件)
3050118Lemans-GT 主题

本地检索实证(/home/zbc/下载/test/车机JIRA/jira-data/ 全量 grep): 没有以手套箱为主题的 JIRA 单;命中均为蓝牙/网络类单的 bugreport 附件里偶然出现 GloveBox 日志行。若接手新单,先 jira-fetch 再对照本篇 commit 表定位代码形态。