Skip to content

Compose for TV Phase 11: Settings over existing preferences - #3194

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

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

Conversation

@sika200581

Copy link
Copy Markdown

Summary

  • Adds Compose TV TvSettingsScreen that reads/writes through existing AppSettingsPreferenceManager (same store as phone; no parallel prefs / new DataStore keys).
  • Curated 10ft categories: Playback, Appearance, Language, Downloads, App — boolean toggles, enum dialogs, read-only account display, DEBUG focus probe kept.
  • Restart-required locale uses TV confirm then activity.recreate() (no custom restart system). Settings destination activated in TvNavigationShell.

Test plan

  • ./gradlew :app:compileStableDebugKotlin
  • ./gradlew :app:assembleStableDebug
  • Open Compose TV debug → Settings; toggle a playback bool and confirm phone settings reflects it
  • Change app language → confirm dialog → activity recreates
  • DEBUG: Open focus probe action still works; release builds omit it

sika200581 and others added 11 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.
Wire TvSettingsScreen to AppSettings/PreferenceManager (same store as phone).
Expose curated Playback/Appearance/Language/Downloads/App rows with TV dialogs;
no parallel prefs, OAuth, or plugin UI. Keep Phase 2 DEBUG focus probe.
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