diff --git a/docs/plans/INBOX.md b/docs/plans/INBOX.md index 677b2fa..b652f17 100644 --- a/docs/plans/INBOX.md +++ b/docs/plans/INBOX.md @@ -1,3 +1,31 @@ +## [已处理] 2026-10-20 | K33-H 修复:画中画返回后播放页控件与底部导航消失(仅 App 端) + +**用户指令(2026-10-20,原文)**: +> 「这里有个问题 首页 画中画播放后 再回来 播放页所有操作按钮及底部导航栏都没有了」 + +**根因分析(已定位)** +- `PlayerLogic` 中 `pip` / `pipPreparing` 为 true 时 `immersive`(即 `chromeHidden`)恒为 true; +- `player_view` 在 `logic.pip || logic.pipPreparing` 时直接渲染 `SizedBox.expand()`,浮层整体不显示; +- 首页 feed 的底部导航由 `onImmersiveChanged(chromeHidden)` 控制,同样被隐藏; +- 返回前台时只有原生 `onPipChanged(false)` 会清掉 `pip`,部分机型退出画中画不回调或回调丢失,于是 `pip` 残留为 true,控件与底栏永久隐藏。 + +**口径(只改 Flutter,不动后端、不改接口)** +1. `PlayerLogic.onLifecycle` 中,当 `state == AppLifecycleState.resumed` 且 `pip || pipPreparing` 为 true 时,强制复位: + - `pip = false; pipPreparing = false;` + - `notify();` 且 `notifyImmersive();`(让 `chromeHidden` 回到 false,首页底栏恢复显示); + - 复位逻辑放在重取票据 / `setAppResumed` 之前,保证会话按前台处理。 +2. 不改变正常进出画中画的现有流程;不修改原生代码(客户端兜底即可)。 +3. 首页 feed 与全屏播放页都走同一 `PlayerLogic`,两处一并修复;退出画中画后当前剧/集与播放进度不变。 + +**测试/门禁** +- 新增用例:模拟 `enterPip` 成功后触发 `AppLifecycleState.resumed`,断言 `logic.pip == false`、`chromeHidden == false`、`onImmersiveChanged` 最后收到 false; +- 现有播放器与 feed 测试保持通过; +- `dart analyze lib test` 零告警 + `flutter test` 全过 + `flutter build apk --debug`。 + +**流程**:从 `develop` 拉 `fix/flutter-k33-pip-resume`;作者 `Zhou Weidong <502333560@qq.com>`;`--no-ff` 合回 develop 并 push;PROGRESS 留痕;真机验收由用户执行。 + +--- + ## [已处理] 2026-10-20 | K33-G 首页 feed:rail 再下移 + 长按更多弹窗复用播放页(仅 App 端) **用户指令(2026-10-20,原文)**: diff --git a/docs/plans/PROGRESS.md b/docs/plans/PROGRESS.md index f13004b..7caff77 100644 --- a/docs/plans/PROGRESS.md +++ b/docs/plans/PROGRESS.md @@ -20789,3 +20789,30 @@ Running Gradle task 'assembleDebug'... ``` 解读:静态检查零告警,410 条测试全部通过,debug APK 构建成功。工作区原有 `pubspec.lock` 变更未纳入本批提交。真机验收由用户执行。 + +## 2026-10-20 ReelShort:K33-H 画中画回前台复位 + +- 分支:`fix/flutter-k33-pip-resume` +- 功能提交:`bc8f3bc fix(flutter): 回前台复位残留画中画状态` +- develop 合并提交:`9b99d96 merge: 合并 K33-H 画中画回前台复位`,已推送。 +- `PlayerLogic.onLifecycle`:回前台时若 `pip || pipPreparing` 为 true,先复位两者再 `notify()` + `notifyImmersive()`,随后照常做票据重取与 `setAppResumed(true)`。 +- 修复部分机型退出画中画不回调 `onPipChanged(false)` 导致 `chromeHidden` 恒 true、播放浮层与首页底栏全部消失的问题;未改原生代码、未改正常进出画中画流程,当前剧/集与进度不变,feed 与全屏页同时生效。 +- 测试:新增 `should_clear_stale_pip_when_app_returns_to_foreground`,模拟 pip 残留后 resumed,断言 pip/pipPreparing 复位、chromeHidden 为 false、onImmersiveChanged 最后为 false。 + +门禁原始输出: + +```text +$ dart analyze lib test +Analyzing lib, test... +No issues found! + +$ flutter test +00:39 +411: All tests passed! + +$ flutter build apk --debug +Running Gradle task 'assembleDebug'... + 1.953s +✓ Built build/app/outputs/flutter-apk/app-debug.apk +``` + +解读:静态检查零告警,411 条测试全部通过,debug APK 构建成功。工作区原有 `pubspec.lock` 变更未纳入本批提交。真机验收由用户执行。