Skip to content

Compose for TV Phase 10: CW polish, stale handling, Hero Watch Now - #3193

Open
sika200581 wants to merge 10 commits into
recloudstream:masterfrom
sika200581:compose-tv-phase-10
Open

sika200581 wants to merge 10 commits into
recloudstream:masterfrom
sika200581:compose-tv-phase-10

Conversation

@sika200581

Copy link
Copy Markdown

Summary

  • Phase 10 only: Continue Watching rail polish (valid resume vs stale/unavailable), remove via existing DataStoreHelper.removeLastWatched + TV D-pad confirm dialog, richer availability labels across Home/Search/Watchlist/Details/CW, Hero Watch Now (Movie → bridge; Series/Anime → Phase 9-safe resolve or Details; mock never plays).
  • Preserves single canonical playback pipeline: Home/Search/Watchlist/CW/Hero → TvContentRef/TvPlaybackRequestTvPlaybackBridge → existing GeneratorPlayer. No new persistence keys.
  • Branches from compose-tv-phase-9 (sika200581).

Architectural Q

Single pipeline preserved. New persistence? NO.

Test plan

  • ./gradlew :app:compileStableDebugKotlin
  • ./gradlew :app:assembleStableDebug
  • CW: valid Resume movie/series; stale shows Unavailable/Playback Unavailable (no fake play)
  • Long-press CW → confirm dialog (Back cancels) → remove → neighbor focus
  • Hero Watch Now: Movie plays; Series opens Details (unless exact episode hint); Demo never plays
  • Home empty/error never silent-fail into demo; explicit Load demo catalog action

STOP after Phase 10.

sika200581 and others added 10 commits September 15, 2026 11:24
Introduce an isolated TvComposeProbeActivity with TvTheme and a small
focusable card/button screen using androidx.tv:tv-material:1.1.0 only.
Register the activity without launcher filters so phone and legacy TV
startup stay unchanged; document adb launch for debug builds.
Build a structural TV navigation shell with mock Home (hero + rails),
reusable focus scale/glow cards, and DEBUG-only settings entry — still
isolated from APIRepository, player, and legacy TV XML.
Wire APIRepository.getMainPage through TvHomeRepository into immutable
TV models and MVI StateContainer UI states, with explicit mock fallback
and Continue Watching kept demo-only (no history/DataStore writes).
Wire Home cards/hero Details through compact TvContentRef into
TvDetailsRepository (real load flow) and immutable Details UI; Watch Now
remains a stub with no player, and mock items never invent load IDs.
Wire Details Watch Now through an immutable TvPlaybackRequest and
TvPlaybackBridge into RepoLinkGenerator + GeneratorPlayer without
changing CS3IPlayer, extractors, or custom player UI. Movies only;
series/anime/live/torrent stay disabled for Phase 6.
Map real LoadResponse Episode/SeasonData into immutable TvSeason/TvEpisode,
add D-pad season+episode selector, and play via existing GeneratorPlayer path.
Wire TvSearchScreen through APIRepository.search into immutable
TvSearchResult/TvContentRef so Search opens the same Details and
playback path as Home. Explicit submit, cancel-safe loads, no history writes.
Bridge Local resume/bookmark/favorites DataStore reads into immutable TV
models without calling HomeViewModel.getResumeWatching (cache restore write)
or SyncRepo auth libraries; Watchlist opens shared Details for viewing only.
Wire read-only CW fields to existing TvPlaybackRequest → TvPlaybackBridge:
movies resume directly; series/anime resolve Episode.data via Details load
then fromEpisode; otherwise shared Details with season/episode restore.
No new persistence, player path, or Compose seek.
Preserve single TvPlaybackRequest → TvPlaybackBridge pipeline. CW remove uses existing removeLastWatched with TV confirm dialog; no new persistence. Hero Watch Now plays Movies directly, Series/Anime via Phase 9-safe resolve or Details; mock never plays.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant