mirror of
https://github.com/Silent1566/webhtv.git
synced 2026-10-20 10:22:50 +00:00
fix(theme): 修复对话框主题缺 tv* 属性导致的黑色边框,并收口代码挂环的硬编码宽度
用户实机报告两点: 1. 「现在选中播放器看不出选中的效果,好像是黑色的边框,不应该是统一的选中边框颜色吗?」 2. 「还有个性推荐等卡片的边框粗细没有改小没有统一」 缺陷一(上一轮引入的回归):selector_control_sheet_button(播放器控制面板按钮)的焦点环 从写死半透明白改成 ?attr/tvPlayerRing / ?attr/tvPlayerCurrentRing,但这两个属性当时只在 Theme.Base(= Theme.App)里绑定,而播放器控制面板(ControlDialog,BottomSheet)用的是 Material 默认 bottomSheetDialogTheme、Alert 对话框用的是 Theme.Material3.DayNight.Dialog.Alert —— 两者都不继承 Theme.WebHTV。属性解析不到时 ?attr/xxx 静默退化为黑色/透明且不崩溃, 这就是「黑色边框」的来源(Robolectric 实测:Theme.WebHTV.Dialog / bottomSheetDialogTheme 下 tvPlayerRing = UNRESOLVED,修复后 = #FF447BF5)。 修法:Theme.WebHTV(基底)/ Theme.WebHTV.Dialog / ThemeOverlay.WebHTV.Dialog 三处都绑定 全部五项 tv* 属性;selector_control_sheet_button 补上缺失的 state_activated 分支 (部分入口用 ArrayAdapter.setActivated 表达「当前生效」,缺该分支就完全看不到选中环)。 缺陷二:前几轮统一的是 drawable 层的环宽,而一批控件是代码挂环(直接 setStrokeWidth / GradientDrawable.setStroke),全部漏掉:TmdbRecommendationPresenter(FOCUS_WIDTH_DP=3)、 TmdbCardFocusHelper(FOCUS_STROKE_DP=3)、TmdbEpisodeAdapter(3)、TmdbVideoAdapter(2)、 InlineEpisodeAdapter(2)、TmdbDetailActivity(11 处 FOCUS_STROKE_DP=3)。 修法:全部改为从 @dimen/webhtv_focus_ring_width 读像素;TmdbCardFocusHelper.foregroundBorder 参数语义由 dp 改为 px(避免再次隐式写死);TmdbRecommendationPresenter 环色改走 ThemeController.focusRingColor(原来直接取颜色常量,绕过主题覆写通道)。 新增防回归契约: - ThemeContractTest.everyReferencedTvFocusAttrIsAssignedByATheme:扫描全部 ?attr/tv* 引用, 断言每个都被至少一个主题赋值,且基底主题自带全部五项(这类回归不崩溃、只有人眼能发现) - TvFocusRingContractTest.noJavaCodeHardcodesAFocusRingWidth:扫描 9 个 Java 源, 断言「按焦点分支设描边宽度」的真分支不含 dp 字面量/ *_DP 常量(实测扫到 12 处; 实施中真的抓出一处漏改:TmdbDetailActivity.applyInlineEpisodeModeButtonState) - TvFocusRingContractTest.noJavaCodeHardcodesAFocusRingColour 验证: - ThemeContractTest 全绿;TvFocusRingContractTest 18/18 - :app:testLeanbackArm64_v8aDebugUnitTest 4166 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 包):选集项焦点环实测 3px #447BF5(此前 3dp 写死色); Robolectric 复核 dialog_control#player 的 focus/selected/activated 三态分别为 #FF447BF5 / #FF00A95A / #FF00A95A Verification: 三个对话框主题补绑 tv* 五项 + control_sheet_button 补 state_activated 分支(黑框回归消失,实测 dialog_control#player activated 由无描边变为 #FF00A95A);6 个 Java 挂环位置改读 @dimen/webhtv_focus_ring_width(个性化推荐等卡片宽度统一);新增 3 条防回归契约;leanback 4166 + mobile 4981 tests 0 failures;check_ui_tokens violations=1(=基线);dev1 实机选集项环 3px #447BF5 Task-Guard: tv-ring-dialog-attr-recommendation Verification: Theme.WebHTV/Theme.WebHTV.Dialog/ThemeOverlay.WebHTV.Dialog 三处补绑 tv* 五项(Robolectric 实测 dialog 主题 tvPlayerRing 由 UNRESOLVED→#FF447BF5);selector_control_sheet_button 补 state_activated 分支(dialog_control#player activated 由无描边→#FF00A95A);6 个 Java 代码挂环位置(TmdbRecommendationPresenter/TmdbCardFocusHelper/TmdbEpisodeAdapter/TmdbVideoAdapter/InlineEpisodeAdapter/TmdbDetailActivity 11 处)改读 @dimen/webhtv_focus_ring_width;新增 3 条防回归契约(tv 属性必被主题赋值、Java 不得写死环宽/环色);leanback 4166 + mobile 4981 tests 0 failures;check_ui_tokens violations=1(=基线) hex_drawables=0;dev1 实机选集项焦点环 3px #447BF5 Task-Guard: tv-ring-dialog-attr-recommendation
This commit is contained in:
parent
c3bb6a63d9
commit
7948c8e979
13 changed files with 361 additions and 37 deletions
Loading…
Add table
Add a link
Reference in a new issue