mirror of
https://github.com/Silent1566/webhtv.git
synced 2026-10-18 07:09:16 +00:00
fix(theme): 全屏播放不再失去焦点环,改为画面内侧内缩环
用户实机报告(附大窗形态播放截图):「这里没有选中效果,或者说看不出来」。 根因(像素级证据):用户截图 817x483 中播放面板四边完全没有描边色——边界从黑直接 过渡到紫灰壁纸(仅 1px #232228 抗锯齿),候选环色(#447BF5/#7695C5/#A8C7FA/白) 全部 0 像素,面板四角为直角。排查确认两个全屏入口都在无条件移除焦点环,而宿主在 这两种形态下仍然 focusable: - VideoActivity.enterFullscreen(): mBinding.video.setForeground(null) 全屏后 @id/video 仍 focused="true"(uiautomator dump 实测),环却被移除; - TmdbDetailActivity.updatePlayerPanelFocus(): inlineFullscreen || inlinePiPLayout 分支 setStrokeColor(0)+setStrokeWidth(0) 后 return,面板仍 focusable=true。 即「可以聚焦但零视觉反馈」。 修法(方案 A):两个入口都改为在画面内侧画一圈内缩焦点环,用 InsetDrawable 把描边 推离屏幕物理边缘,避免全屏时被切掉一半、也不侵入画面中央: - 宽度取 @dimen/webhtv_focus_ring_width(全 TV 唯一来源) - 颜色取 ThemeController.focusRingColor()(= ?attr/tvPlayerRing 同一来源,视频层主题派生色) - 内缩 12dp / 圆角 8dp 新增 VideoActivity.fullscreenVideoRing() 与 TmdbDetailActivity.insetFocusRing()。 新增防回归契约: - TvFocusRingContractTest.fullscreenPlayerPathsKeepAnInsetFocusRing(断言两个入口不得再 用 setForeground(null)/清零分支移除环,且新环必须走 token 宽度 + 主题色 + InsetDrawable) - TmdbDetailChipFillTest.fullscreenPlayerPanelDrawsAnInsetThemeFocusRing(栅格化全屏面板: 焦点态必须画出内缩主题环、非焦点态无环、环不得触及屏幕物理边缘) 验证: - TvFocusRingContractTest 19/19;TmdbDetailChipFillTest 3/3 - :app:testLeanbackArm64_v8aDebugUnitTest 4168 tests / 0 failures - :app:testMobileArm64_v8aDebugUnitTest 4981 tests / 0 failures - scripts/check_ui_tokens.sh:violations=1(=基线)、hex_drawables=0、contrast failures=0 - dev1 实机(覆盖安装同签名 Debug 包,全屏播放态):环色像素 0 → 17256;环 bbox x 24..1895 / y 24..1055(内缩 24px = 12dp);左/上边界剖面 #0B57D0 环带清晰可见 Verification: VideoActivity.enterFullscreen 与 TmdbDetailActivity 全屏/PiP 分支由「移除环」改为「画面内侧内缩主题环」(宽度 token + ThemeController.focusRingColor + InsetDrawable 12dp/8dp);新增 2 条防回归契约;leanback 4168 + mobile 4981 tests 0 failures;check_ui_tokens violations=1(=基线);dev1 实机全屏播放环像素 0→17256、bbox 内缩 24px Task-Guard: inline-player-panel-focus-ring Verification: 两个全屏入口由移除焦点环改为画面内侧内缩环:VideoActivity.enterFullscreen 用 fullscreenVideoRing()(InsetDrawable 12dp 内缩 + @dimen/webhtv_focus_ring_width + ThemeController.focusRingColor),TmdbDetailActivity 全屏/PiP 分支用 insetFocusRing();新增 TvFocusRingContractTest.fullscreenPlayerPathsKeepAnInsetFocusRing(19/19)与 TmdbDetailChipFillTest.fullscreenPlayerPanelDrawsAnInsetThemeFocusRing(3/3,栅格化断言焦点态有环/非焦点态无环/环不触物理边缘);leanback 4168 + mobile 4981 tests 0 failures;check_ui_tokens violations=1(=基线);dev1 实机全屏播放环色像素 0→17256、bbox x24..1895 y24..1055(内缩 24px=12dp)、边界剖面 #0B57D0 Task-Guard: inline-player-panel-focus-ring
This commit is contained in:
parent
7948c8e979
commit
0209015d62
5 changed files with 257 additions and 3 deletions
Loading…
Add table
Add a link
Reference in a new issue