Skip to content

Rework iOS / iPadOS / tvOS app to match Android TV cinematic UI + behaviour #268

@jonathaneoliver

Description

@jonathaneoliver

Follow-up to #251. The Android TV app was rebuilt around a cinematic TV-native UI with new design tokens, a slide-from-right settings drawer, a server-picker grid, fullscreen-first playback, and a focused recovery model (Retry / Reload). Behavioural decisions are documented in android/InfiniteStreamPlayer/BEHAVIOR.md.

This issue covers porting that rework across the Apple targets — iPhone, iPad, and Apple TV. The existing project already shares one /InfiniteStreamPlayer/ source folder between the iOS and tvOS targets, so the rewrite lands across all three at once with platform branches where layout has to differ.

Scope

  • Design tokens — Fraunces / Inter Tight / JetBrains Mono via SwiftUI fonts, warm gold accent, coral LIVE badge, focus-ring + scale rules where the platform supports them.
  • Server picker — cinematic grid replacing the current button row + AddServerSheet. Pairing + mDNS discovery + manual entry preserved.
  • Home — Continue Watching hero + frequency-ordered live preview tiles + bottom nav removed. iPhone/iPad get adapted layouts; tvOS matches Android TV's spec closely.
  • Playback — fullscreen first; HUD reveal on tap (iOS) / D-pad-Down (tvOS). Same metadata pills, transport, scrubber.
  • Settings drawer — slide-from-right (46% on tvOS/iPad, full-width sheet on iPhone). Picker-list-pop-then-close Back semantics. Six Advanced toggles parity with Android.
  • Recovery — Retry (re-prepare same URL on same AVPlayer) + Reload (replace AVPlayer instance and re-issue original proxy URL). No Restart. Auto-recovery: codec retry up to 3× with backoff, non-codec single retry when flag enabled.
  • Persistence — UserDefaults parity with Android's SharedPreferences: server list, flags, lastPlayed, viewCounts (per clip_id), /api/content cache (stale-while-revalidate).
  • State layer — single PlayerViewModel analogue holding all state, persisted bits hydrated on init.

Out of scope (this issue)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions