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

feat(mobile): 首页加载失败不再是一片空白,给出错误态与可用的重试

手机端首页的状态由 StateEvent(EventBus)广播、VodFragment 消费。改动前只有
EMPTY/PROGRESS/CONTENT,而消费方对 EMPTY 的处理**只是隐藏转圈**:

  case EMPTY: hideProgress(); break;   // 什么都不显示

而 HomeActivity 的配置加载失败路径正是发 EMPTY 再弹一个会消失的吐司。两者一叠加,
内容源加载失败后首页就是**一片空白**——用户既不知道原因,也没有重试入口。
这是电视端 TV-5 修过的同一类缺陷,但发生在手机端最大的面(首页)上。

根因有两条:StateEvent 把「失败」和「没有内容」混成了一个 EMPTY;消费方根本没渲染
任何状态视图。

- StateEvent 增加 message 字段与 Type.ERROR / error(message) 工厂,其余三态仍不带原因;
- HomeActivity 的配置加载失败改发 StateEvent.error(msg);崩溃重启那次保持 EMPTY
  (它是「本次跳过加载」,不是失败);
- fragment_vod.xml 在既有 @id/progress 旁新增一个**空的** ProgressLayout(@id/state):
  复用它的四态与 setEmptyContent/showError,不重复实现;放在同级而不是包一层,
  是因为根是 CoordinatorLayout + AppBarLayout,包裹会破坏 toolbar 的滚动行为;
- VodFragment:ERROR -> 错误色标题 + 原因 + 重试;EMPTY -> 三件套空态;
  PROGRESS/CONTENT -> 收起状态浮层;
- 三语字符串 home_empty_*。

**真机验证抓出一个缺陷并已修**:最初把错误态的重试接成 homeContent(),点了毫无反应——
首页的错误来自 HomeActivity.initConfig() 的配置加载,而 homeContent() 重载的是首页内容,
配置根本没被重新拉取。我用 dumpsys 取按钮精确 bounds 确认点击命中(排除「点偏」),
然后新增 VodFragment.ConfigRetry 回调接口、由 HomeActivity 实现并接到 initConfig(),
重试期间先切回加载态。空态的主动作仍保持 homeContent()——「确实没有内容」时重载内容才对。

验证:testMobile 定向测试 BUILD SUCCESSFUL(新增 7 项);mobile assemble BUILD SUCCESSFUL;
真机 192.168.50.3:5561(竖屏 1080x1920,真实手机形态)在启动前用 iptables 只拦应用 uid
制造真实失败:首页显示错误色标题「内容源加载失败」+ 原因「配置取得失败 / Failed to connect
to /192.168.50.50:4567」+「重试」;移除拦截后点重试,首页完整恢复(分类与海报网格全部回来)。
规则已确认移除,设备已恢复电视端 flavor。

未观测:空态(EMPTY,对应崩溃重启跳过加载或内容源确实为空,都不易构造);
StateEvent 的 CONTENT 分支(没有找到广播它的调用点)。详见文档 §6.5。

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