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

fix(ui): 修掉两处实测不达标的对比度缺陷(审计 P0)

审计实测出两处对比度不达标,本批都修掉。

**缺陷一:手机端「追更」卡片的硬编码固定色。**
mobile/res/layout/item_following.xml 有两处写死的调色板色值,而 main 源集的同名文件在
**同一位置**用的是语义属性——手机端独有的偏离:
  L73「新 N 集」角标  #174EA6  vs main 的 ?attr/colorPrimary
  L124「检查失败」    #B3261E  vs main 的 ?attr/colorError
底材是语义 token(角标走 shape_sync_direction = ?attr/colorSurfaceContainer,随主题变),
文字却不跟——实测深色底 #2A2F34 上只有 1.72:1 与 2.07:1(正文门槛 4.5:1),深色模式下基本
不可读。而 #B3261E 正是浅色表的 M3 错误红,承载的却是「检查失败」这个 §9.9 管辖的错误态。
改法:两处对齐 main 的语义属性(这是对齐既有正确实现,不是新设计)。

**缺陷二:空态/错误态描述文字直接压在壁纸上。**
**关键:这不是「差一点」,而是物理上不可达。** 描述文字是 #CCFFFFFF(80% 白)、16sp 正文、
门槛 4.5:1。壁纸实机取样合成亮度 L=0.1217/0.1476/0.2019:
  80% 白:4.61 / 4.08 / 3.30:1  → 平均与最亮处不达标
  90% 白:5.33 / 4.67 / 3.72:1  → 最亮处仍不达标
  纯白  :6.12 / 5.31 / 4.17:1  → **最亮壁纸上限也只有 4.17:1**
即 4.5:1 物理上不可达,靠调色无解。

更根本的是它违反明文要求:§5.3「图片上的文字必须有 scrim/gradient;不得假设海报亮度足够」、
§5.4「所有内容表面必须有不透明或可控的 surface 层」——而空态/错误态的文字直接压在壁纸
(一张图)上、没有任何 scrim。

算过需要多强:20% 黑 scrim 就能让三种壁纸全部达标(6.02/5.43/4.53:1),且**不需要改文字色**。
仓库已有 webhtv_color_overlay_dark = #52000000(约 32% 黑),正好够用——而它正是审计发现的
「只声明、从未赋值」的属性之一,本批把它接上。

为什么加 scrim 而不是像 TV-6 那样加实心底:空态在电视端是居中大段文字 + 插画 + 按钮,
加实心小底会很难看;scrim 盖整屏,观感是「页面暗下来」,符合「内容之上的浮层」语义。
加在 ProgressLayout 自身而不是 view_empty.xml 的内容块:后者是居中 wrap_content 内容块,
给它加背景会变成「文字后面一块小方框」;ProgressLayout 是 match_parent 的宿主层。
且只在 EMPTY/ERROR 态加、其余 setBackground(null) 清掉,否则会盖住正常内容;
PROGRESS 态刻意不加(短暂加载瞬间,加 scrim 会让页面闪一下暗)。

新增两个契约测试:
- MobileFollowingCardSemanticContractTest 3 项:两处对齐语义角色;该布局里不应再有任何
  写死的 textColor;两端同名布局必须用同一套角色;
- StateSurfaceScrimContractTest 4 项:EMPTY/ERROR 必须带 scrim;PROGRESS/CONTENT 刻意不带
  (边界守卫);webhtvColorOverlayDark 必须真的接线(只声明不接线等于没有);描述文字必须
  仍是 16sp 正文(scrim 的对比度按正文门槛核算)。

验证:testLeanback 定向测试 BUILD SUCCESSFUL(2m38s);testMobile 定向测试 BUILD SUCCESSFUL
(1m51s);leanback assemble BUILD SUCCESSFUL;真机 192.168.50.3:5561 在历史页删空后确认
scrim 生效(空态区域壁纸被压暗、文字明显更清晰、与上方工具栏可见分界),且同一页在 CONTENT
态**无 scrim**——一次观测同时验证了「EMPTY 加」与「CONTENT 不加」。

未验证:手机端追更卡片的修复未在真机确认(需追更列表有数据且深色主题);未在浅色主题下
实测 scrim;错误态 scrim 未单独截图(与 EMPTY 走同一分支)。详见文档 §5.4。

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