0
Fork 0
mirror of https://github.com/Silent1566/webhtv.git synced 2026-10-18 07:09:16 +00:00

fix(tv): Tab 条焦点环不再整块写死调色板,改为跟随主题

selector_mpv_tab_focus.xml 的焦点/按下两态整块写死调色板(#E8F0FE 填充 / #1A73E8 描边 /
#D2E3FC 按下)+ 写死 2dp 宽度,不引用任何主题属性。4 个消费方(AdBlockStatsDialog、
PlaybackPerformanceDialog、UpdateSettingsDialog、dialog_mpv_config_manager)都是电视端
Tab 条,用户改主题的「焦点色」槽时它们纹丝不动。

**先确认它到底是不是漂移**:仓库里有个看起来一样但性质相反的文件 selector_ad_stats_item,
它也用 #1A73E8/#E8F0FE,但注释写明这是有依据的——宿主 shape_ad_stats_content 是固定浅色
#FAFBFC(两张表相同),夜间表的浅蓝环压在上面只有约 1.6:1。所以判据是**宿主面板是否固定
明暗**,不能因为「都是 Tab、都写死了色值」就一起改。

核对两个文件的宿主:
- selector_ad_stats_item 的宿主固定浅色 → 环色必须与调色板无关 ✓ 现状正确,本批不动它;
- selector_mpv_tab_focus 的 4 个宿主全部用 shape_shell_proxy_dialog =
  ?attr/colorSurfaceContainerHigh(随主题变)→ 环色也必须跟着变,现状是**错配**:
  宿主变了、环没变。

实测(非文本 UI 门槛 3:1):写死 #1A73E8 在浅色面板 3.69:1、深色面板 3.00:1(刚好卡在
门槛上,无余量);改用 ?attr/tvFocusRing 后浅色 5.23:1、深色 12.63:1。

- 焦点/按下态填充改为 ?attr/colorSurfaceContainerHighest(与宿主同族、高一级表达强调);
- 描边改为 @dimen/webhtv_focus_ring_width + ?attr/tvFocusRing;
- 注释里写清判据、反例与两组实测值;
- 新增 TvTabFocusRingPaletteContractTest 3 项,其中一项是**反例守卫**:固定浅色面板上的环色
  不得改用主题属性——防止有人按「都是 Tab」把它们统一掉而让夜间环消失。

首轮测试失败,但**是我的断言写错了、文件本身是对的**:selector_ad_stats_item 里
?attr/tvFocusRing 只出现在注释里(它故意提到该属性来说明为什么不能用它),而我的断言直接
扫全文,把解释当成了违规。这与本会话此前反复踩到的同一类错误一致,修法是断言前先剥掉 XML
注释。

验证:testLeanback 定向测试 BUILD SUCCESSFUL(修正断言后);leanback assemble
BUILD SUCCESSFUL;真机 192.168.50.3:5561 在「设置 → 关于 → 检查更新」打开的「版本更新」
弹窗里确认 Tab 条焦点环为主题浅蓝、焦点态填充为主题面板色而非写死的 #E8F0FE 亮白,无崩溃。

未验证:另外三个消费方未逐一实机触发(引用同一 drawable,同构);未在浅色主题下实测。
详见 docs/TV-TAB-FOCUS-PALETTE-20261013.md §6.5。

环境限制:本会话无可用 bash,check_ui_tokens.sh 与 task_guard.sh 无法执行,
按同等意图手工暂存/提交/打 tag。
This commit is contained in:
Silent1566 2026-10-13 15:38:31 +08:00
commit 7ac2d124f6
3 changed files with 236 additions and 3 deletions