mirror of
https://github.com/Silent1566/webhtv.git
synced 2026-10-31 16:25:49 +00:00
fix(theme): 播放页焦点/当前态环统一宽度并统一为受主题控制的派生色
用户实机报告(dev1):播放页按钮的边框太粗,按钮和播放器选中后的边框颜色也不统一。
根因(实机像素实测,非推测):
- selector_video_item(播放页 11 个文本按钮)焦点环写死 3dp,而同一屏的芯片族
selector_chip(26+14 个 Control 按钮)是 1.5dp → 实机量到 6px vs 3px,「太粗」即 3dp 那族;
- 环色三套并存:芯片族写死 @color/white、文本按钮族 ?attr/tvFocusRing、当前态写死绿
#2CC56F;且 shape_chip_activated/round_activated 完全没有描边。
关键约束(为什么不能直接换 ?attr/tvFocusRing):播放页控制条直接叠在视频上(背景
transparent,播放态黑色渐变被视频遮住),另一类宿主是固定深靛玻璃。实测白环对纯白视频
1.00:1、浅色表 FOCUS 深蓝 #0B57D0 对玻璃 1.83:1、写死绿对亮视频 2.25:1 —— 没有任何
调色板原色能同时在两类极端背景上达到 3:1。
方案(本轮经用户确认的「方案 A」):
- 新增 ThemeTokens.colorPlayerFocusRing / colorPlayerCurrentRing,由 ThemeResolver 用
已有的 readableAccent 在 PLAYER_RING_BACKDROPS = {纯白视频 + 三档玻璃} 上夹取到
MIN_PLAYER_RING_CONTRAST = 3.0(WCAG 2.2 SC 1.4.11 非文本门槛,与 outline/focus 同口径),
保持用户槽的色相与彩度、只走明度;
- 新增主题属性 ?attr/tvPlayerRing / ?attr/tvPlayerCurrentRing(attrs.xml 声明 + 两个 flavor
Theme.Base 绑定);
- 「当前播放/当前生效」环色提升为独立用户可编辑槽位 playerCurrent(ThemeProfile.SlotSet /
ThemeEditor.Slot.PLAYER_CURRENT / Validator / ThemePreviewView 新增「播放器」分组 /
ThemePresets 同步),满足用户「当前态独立一个设置,主题色彩中没有就添加」;
- 分层固化:视频层 → tvPlayerRing/tvPlayerCurrentRing;应用表面(含与详情页/手机版共用的
selector_episode_card、selector_tmdb_*)→ tvFocusRing/tvCurrentRing。
派生值(编译期默认,写入 webhtv_tokens.xml):
light playerFocus #447BF5 playerCurrent #00A95A
dark playerFocus #7695C5 playerCurrent #00A95A
验证:
- TvFocusRingContractTest 16/16(新增播放页环「统一宽度 + 主题色」契约,以及
playerRingColoursClearNonTextContrastOnVideoAndGlass 的实测对比度断言 +
「调色板原色不可行」的回归钉子)
- NativeEnhancedPlaybackStyleFocusTest / ThemeContractTest / ThemeEditor* / ThemePresets* 全绿
(色板资源数 49→51、新增槽位已全链路接线)
- :app:testLeanbackArm64_v8aDebugUnitTest 4163 tests / 0 failures
- :app:testMobileArm64_v8aDebugUnitTest 4980 tests / 0 failures
- scripts/check_ui_tokens.sh:violations=1(=基线)、hex_drawables=0、contrast failures=0
- dev1 实机(覆盖安装同签名 Debug 包)实测:焦点环带 6px(3dp)→3px(1.5dp)、当前态 3px(1.5dp);
焦点环色 #447BF5、当前态 #00A95A,与派生值逐字节一致
Verification: 9 个播放页环 drawable 统一到 @dimen/webhtv_focus_ring_width 与 tvPlayerRing/tvPlayerCurrentRing;ThemeResolver 按「纯白视频+三档玻璃」夹取 ≥3:1 派生(light #447BF5/#00A95A、dark #7695C5/#00A95A);新增 playerCurrent 用户槽位全链路;TvFocusRingContractTest 16/16、leanback 4163 + mobile 4980 tests 0 failures、check_ui_tokens violations=1(=基线);dev1 实机覆盖安装后环带 6px→3px、环色与派生值逐字节一致
Task-Guard: tv-player-ring-unified
Verification: 9 个播放页环 drawable 统一宽度 token + tvPlayerRing/tvPlayerCurrentRing;ThemeResolver 在「纯白视频 + 三档玻璃」上 readableAccent 夹取 ≥3:1(light #447BF5/#00A95A、dark #7695C5/#00A95A,与 webhtv_tokens.xml 逐字节一致);新增 playerCurrent 用户槽位(Profile/Editor/Validator/PreviewView/Presets 全链路);TvFocusRingContractTest 16/16(含两类极端背景对比度断言与「调色板原色不可行」回归钉子)、NativeEnhancedPlaybackStyleFocusTest/ThemeContractTest/ThemeEditor*/ThemePresets* 全绿;leanback 4163 + mobile 4980 tests 0 failures;check_ui_tokens violations=1(=基线)、hex_drawables=0;dev1 覆盖安装实机:焦点环带 6px(3dp)→3px(1.5dp)、当前态 3px,环色 #447BF5/#00A95A 逐字节吻合
Task-Guard: tv-player-ring-unified
This commit is contained in:
parent
b8581afc41
commit
c3bb6a63d9
32 changed files with 478 additions and 68 deletions
Loading…
Add table
Add a link
Reference in a new issue