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:
parent
585b0bcb25
commit
f6eede67dc
6 changed files with 215 additions and 20 deletions
Loading…
Add table
Add a link
Reference in a new issue