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

fix(playback): 被作废的取流请求必须释放加载态,消除永久转圈与同集无法再播

修复两处同族遗漏分支(上一次修复 7809ff4952 的延续):

① leanback VideoActivity.setPlayer(null) 早退不释放守卫。
   原写法 `if (result == null || isFinishing() || isDestroyed()) return;` 让三条路径共用一次早退,
   而 result == null 是可达的:SiteViewModel.cancelPlayerContent() 会向 PLAYER LiveData 写 null。
   4 个调用点中 onRefresh 的路径真会漏:cancelPlayerContent() 之后
   `if (mFlagAdapter.getItemCount() == 0) return;` 提前返回、不再重新置位,守卫残留使
   onStateChanged(READY) 的 break 与 hidePlaybackProgressIfStale() 同时为假,圈再无清除路径。
   修法:把 null 视为「请求已作废、不会再有结果回调」,在该分支释放守卫。

② 详情页 inlinePlaybackPending 缺归属判定。applyTmdbResultNow()(TMDB 详情异步装载完成重排剧集)
   与 onResume→refreshSelectionAfterExternalPlayback() 会重设选择面但不自增代际,在途回调因
   isInlinePlaybackRequestCurrent() 为假直接返回,标记再无释放路径 ⇒ 圈永久留存,且
   isSamePendingInlinePlayback() 恒真使同一集无法再次起播。
   修法:新增 inlinePlaybackPendingGeneration 记录置位代际,回调失效分支按归属释放
   (避免旧回调清掉新请求的标记),两处显式作废点改用无条件重载。任务被取消时回调不执行,
   故显式作废点的同步释放仍必要,二者互补。

Verification: 双 flavor Arm64 Debug Java 编译成功;:app:testMobileArm64_v8aDebugUnitTest 定向跑
VideoActivityLayoutTest 154/154、TmdbDetailDirectPlayTransitionSourceTest 4/4、PlaybackOwnershipSourceTest
16/16 全绿(含本任务新增/扩展断言)。新断言对 base 源码必然变红(逐方法体字符串校验:修复前无
独立 null 分支、三个方法与 helper 均不含 releaseInlinePlaybackPending*)。过程中自查 git diff 发现
并修回了首轮批量编辑误删的 `float speed = player().getSpeed();` 与一处空行。

Task-Guard: ABANDONED-REQUEST-LOADING-RELEASE-20261009

Verification: compileLeanback/Mobile Arm64 debug Java OK; VideoActivityLayoutTest 154/154, TmdbDetailDirectPlayTransitionSourceTest 4/4, PlaybackOwnershipSourceTest 16/16 all green; new assertions provably red at base commit via per-method string check; accidental deletion of float speed line and a blank line found via diff review and repaired before verification

Task-Guard: ABANDONED-REQUEST-LOADING-RELEASE-20261009
This commit is contained in:
Silent1566 2026-10-09 18:06:17 +08:00
commit d7b9439201
5 changed files with 161 additions and 13 deletions