- Overlay shows current programme (title, time range, EPG progress) and
what's next; resurfaces briefly on programme change, hides after 5s.
- Audio tracks: listed from the stream, switchable via D-pad left/right
on live streams (seek keeps left/right on seekable media), via chips
in the overlay and from the phone remote (set_audio message).
- Main UI font switches to Inter; Space Grotesk stays for the wordmark.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The live proxy resolves /proxy/ts/stream/<key> by channel uuid (or stream
hash) — integer ids 404, so every Dispatcharr channel failed to play.
Streams now use the uuid, channels use effective_name/effective_tvg_id and
skip hidden_from_output entries.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- Compose for TV scaffold: D-pad app shell (Live/Einstellungen), channel list
with focus handling, fullscreen player with auto-hiding overlay; zapping via
channel/D-pad keys (closes#2)
- Generic source end-to-end: M3U + XMLTV configurable on the TV, Now/Next with
progress in the list, channel cache (closes#3)
- OIDC device-flow login: server URL is the only input, issuer/client id come
from the fork's status endpoint; QR + user code screen, silent refresh,
logout (closes#4)
- Dispatcharr source via Bearer API: channels, groups, EPG grid; switchable
against the generic source (closes#5)
- Per-user favorites: star via long-press, favorites filter, backend-synced
(closes#6)
- Stream profile selection (Standard/Passthrough/audiofix/720p from the
backend profile list), applied per stream URL (closes#7)
- Phone remote: Now/Next lines, favorites star + filter over the WebSocket
protocol (closes#8)
Device verification pending (TV currently in use).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
ControlServer.Listener declared onPause()/onResume(); implementing them in
MainActivity overrode Activity.onPause/onResume without super calls, so the
first resume died with SuperNotCalledException. Renamed to onPauseCast/
onResumeCast (matching onStopCast). Also drop R8 optimize variant.
Verified on a Sony Bravia (Android TV 14). Version 0.1.1.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Signed with the local release keystore when CASTARR_STORE_* env vars are
set; minSdk raised to 26 to match the adaptive-icon-only resources.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Package/applicationId com.nodecast.tv -> dev.castarr.tv, all branding in app
and remote page renamed, remote localStorage key changed. Foojay toolchain
resolver + jvmToolchain(17) so hosts with only a JRE can build.
Closes#1
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Imported the native TV app (Kotlin, ExoPlayer, embedded remote server, QR
pairing) plus CONTEXT.md and ADRs 0001-0005. Rename, Compose for TV UI and
the Dispatcharr integration follow as tracked issues.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>