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

fix(theme): 关闭两处契约扫描盲区,6 处绕过主题绑定的弹窗改走 WebHtvAlertDialogBuilder

审计发现两道契约测试各自漏掉了真实违规——契约测试的存在不等于覆盖,它们的扫描边界外
正好住着违规。本批关闭这两处盲区。

**盲区一:ThemeBinderContractTest 漏掉全限定写法。**
该测试有两条断言:AlertDialog.Builder 那条用了带包名的正则(没问题),而
MaterialAlertDialogBuilder 那条用的是字面量 contains,只匹配不带包名的写法。
仓库里那 6 处**全部**写了全限定名,于是全部通过了测试,而 ThemeController.bindDialog
从未被调用——**用户自定义主题对这 6 个弹窗静默失效**。

- 第二条也改成同形正则;
- 6 处调用点改用 WebHtvAlertDialogBuilder:leanback/VideoActivity 的开场跳过确认与画质单选、
  mobile/VideoActivity 的开场跳过确认/画质单选/播放内核选择、Updater 的备份确认;
- Updater 那处显式传 ThemeOverlay_WebHTV_Dialog,由 (Context, int) 构造覆盖,行为不变;
  它用了 setOnShowListener,而 bindDialog 走的是 decorView 遍历、不使用该回调,所以不冲突。

**盲区二:TvFocusRingContractTest 只扫 leanback/res/drawable。**
main 源集里也有电视焦点环(被 leanback 的 presenter/layout 消费),却不在扫描范围内。
不能简单地把 main 也扫一遍——main/res/drawable 有 33 个含 state_focused 的文件,绝大多数
与电视焦点环无关(输入框/开关的 1.5dp 描边、手机端自己的 2dp 卡片描边等)。
改用**可判定特征**收口:只扫引用 tvFocusRing / tvCurrentRing 属性的文件。

由此暴露 4 个文件:selector_episode_card / selector_tmdb_cast_focus /
selector_tmdb_media_focus / shape_episode_photo_focused —— 它们仍是 3dp 字面量,
而 webhtv_focus_ring_width 已定为 1.5dp(3dp 曾在 2026-10-10 被用户判为「太粗」),
即那次收敛只改了 leanback、漏了 main;且它们的圆角与自身注释里的公式值互相矛盾。

**本批不直接改这 4 个文件**:改宽度必须同步重算圆角并重做像素级月牙复核
(参考实现 shape_vod_focused.xml 记录了完整方法:圆角 = 宿主圆角 − w/2 − 像素取整余量,
1.5dp @ density 3 实际 w/2 = 2.5px;7dp 在 6 种密度下实测 0 溢出)。
那是一个独立批次,混进来会让「关闭盲区」变成高风险几何改动。
改为把它们列进 knownUnconverged 名单,并加一条**活名单**断言:一旦有人修好其中任一文件,
测试立刻失败并要求把它从名单里删掉——避免名单腐烂成第二套豁免
(selector_video_item.xml 那条过期豁免就是教训,它已全用 token 却还挂在豁免里)。

验证:testLeanback 定向测试 BUILD SUCCESSFUL(收紧后的扫描 + theme 契约全绿);
testMobile theme + dialog 契约 BUILD SUCCESSFUL;两个 flavor 均 assemble 成功;
真机 192.168.50.3:5561(leanback)启动/首页/详情页/播放/选集面板全部正常、无崩溃,
其中选集面板正是 selector_episode_card 的宿主,说明未收敛文件的渲染无回归。

未逐一实机触发:画质单选(需多线路源,当前源只有一条)、开场跳过确认(需片头片尾命中)、
Updater 备份确认(需更新流程)。这三处都是纯类名替换、链式调用完全同形。
详见 docs/TV-FOCUS-RING-MAIN-SOURCE-20261013.md §4.4。

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