mirror of
https://github.com/Silent1566/webhtv.git
synced 2026-10-18 07:09:16 +00:00
feat(tv): 播放器错误层补上重试动作,复用既有的重置路径
设计文档 §9.9 要求错误态有「重试动作」。改动前播放器错误层只有一个 56dp 警告图标 加一行失败原因,没有任何可操作的东西——播放失败后用户唯一的办法是退出重进。 而播放器其实早就有正确的动作:控制层的「重置」按钮 onReset()。 根因不是缺能力,是错误层从来没把已有能力暴露出来:浮层里没有任何 focusable 控件, 而播放页平时把焦点放在视频面上(mBinding.video.requestFocus() 共 6 处), 所以即使加了按钮,不主动交焦点遥控也未必走得到。 - view_widget_vod.xml 的 @id/error 内新增 @id/retry(可聚焦可点击,46dp 高, 文案复用 TV-5 的 @string/error_retry); - 背景用既有的 selector_control_sheet_button 而不是空态那套 selector_empty_action: 错误面板是 shape_widget(black_40,两张表相同)属**固定深玻璃族**,焦点环必须取 ?attr/tvPlayerRing;空态那套取 ?attr/tvFocusRing,浅色表在深玻璃上只有约 1.8:1。 这条边界在 selector_control_sheet_button 的注释里已有记录,本批只是遵守它; - showError 显示浮层后把焦点交给重试;hideError 仅在重试确实持有焦点时才交还视频面, 避免抢走剧集网格等控件的焦点; - 重试复用 guarded(this::onReset),与控制层「重置」完全同一条路径, 因此不新写恢复逻辑、不会与既有的自动换源 startFlow() 形成第二套逻辑。 验证:leanback 定向测试 BUILD SUCCESSFUL(含新增 TvPlayerErrorRetryContractTest 4 项); 真机 192.168.50.3:5561 上用 iptables 只拦应用自身 uid 的出网制造真实播放失败: 错误层出现「重试」且自动获得焦点(焦点环清晰),移除拦截后按确认键错误层消失、 画面恢复播放并续播到 30:16/36:30,焦点归还视频面,无崩溃;规则已确认移除。 未单独验证:与自动换源 startFlow() 的竞态(本机这次错误层持续显示,说明自动换源 未生效或无可用源);全屏播放路径(与详情页预览共用同一 showError/hideError)。 详见 docs/TV-PLAYER-ERROR-RETRY-20261013.md §6.4。 环境限制:本会话无可用 bash,check_ui_tokens.sh 与 task_guard.sh 无法执行, 按同等意图手工暂存/提交/打 tag。
This commit is contained in:
parent
c4b6a20811
commit
a2932aeac2
4 changed files with 266 additions and 0 deletions
Loading…
Add table
Add a link
Reference in a new issue