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

feat(mobile): 播放器错误层补上重试动作,复用既有的重置路径

设计文档 §9.9 要求错误态有「重试动作」。改动前手机端播放器的错误层是一个**纯文本**
TextView(@id/error 本身就是那行文本),只有失败原因,没有任何可操作的东西。

根因与电视端 TV-7 相同:不是缺能力,是错误层从来没把已有能力暴露出来——
播放器早就有控制层的「重置」按钮(onReset()),手机端的 onReset/onReplay/onRefresh
与电视端逐字相同。

- view_widget_vod.xml:@id/error 由 TextView 改为 LinearLayoutCompat 容器,
  内含 @id/errorText(原因,沿用原配色字号)+ @id/errorRetry(MaterialButton +
  Widget.WebHTV.Button.Tonal,文案复用 error_retry),并把 inset/minHeight 压到 0
  以免在 pill 里过高;
- VideoActivity:showError/hideError 的目标由 widget.error 改到 widget.errorText
  (容器不再是 TextView);initEvent 里紧挨控制层那行接线
  mBinding.widget.errorRetry.setOnClickListener(guarded(this::onReset));
- 新增 testMobile 的 MobilePlayerErrorRetryContractTest 3 项,与电视端契约同构,
  其中一项专门钉住「不得再对容器调用 setText」。

诚实说明本批的增量价值低于电视端:电视端错误浮层出现后遥控器没有别的入口,
而手机端控制层就在屏幕上、用户可以再点一次播放。本批的价值是规格一致性与就近可操作。

验证:testMobile 定向测试 BUILD SUCCESSFUL(新增 3 项全绿);assembleMobileArm64_v8aDebug
BUILD SUCCESSFUL;在 5561 上装 mobile flavor 用 iptables 只拦应用 uid 制造真实播放失败,
确认错误层渲染为「播放失败,请重试或切换播放器」+「重试」按钮、接线无崩溃。

未确认:「手指点在那枚新按钮上是否真的触发 onReset」没有取到有效观测——唯一一次点击
落点偏了(点到播放器表面)。已静态核查 onReset->onRefresh->invalidatePlayerContent
链路没有任何 finish(),确认那次退出与重试无关;风险低(与控制层「重置」是同一个动作,
本批只新增一个 setOnClickListener 注册),但这仍是推理不是观测,详见文档 §6.3。

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