First commit, imported from the working folder: Android TV app, loopback guide server, design sources and per-release verification notes. Includes the 0.16 tuning screen, built and tested but not yet confirmed on the box. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
4.0 KiB
Orbit TV 0.15.0 — Orbit After Dark 102
Approved scope: a small explicit film-selection flow and playable channel 102 using the existing engine, with the approved silver/magenta branding and lit-window background. The user's later motion request is delivered as a separate optional-ident proof, not injected into playback.
Flow: restored connection (or sign in) → Menu → Connect Emby → 102 Orbit After Dark — choose films → Check Horror / Check Thriller / Check Science Fiction → select two or three films → Create / rebuild 102 → Watch channel. One GET /Items request per explicit category action, Movie only, Genres filter, StartIndex=0, Limit=20, Fields=Genres,MediaStreams, images/userdata disabled. At most 20 returned records parsed; requires returned genre evidence, valid Movie IDs, bounded strings/genre lists. Genre labels differing from configured names may return no confirmed matches. No returned matches is not proof the whole library lacks suitable films. Candidate accumulation deduplicates IDs and caps at 60. Initial selection is empty; no automatically approved replacements. This is a sample, not a full importer or refresh engine. Horror/Thriller/Science Fiction are initial candidate pools for broader late-night/cult programming; no explicit-content or age-control feature is claimed.
Two or three approved film IDs must belong to the checked cache. Each gets PlaybackInfo with IsPlayback=false, no live opening/transcoding. Every selected film needs an eligible direct container/source/runtime; errors identify the film and stop the build without publishing a partial replacement. Source IDs and real runtimes are locked. Existing UTC join/rollover, Now/Next, transition check, Retry and green tuning number are reused. Existing 102 lineup remains until a new build succeeds. Normal watching reports to Emby as before.
Saved state adds optional afterDark/darkMovies/approvedDark fields under the existing encrypted schema/key/AAD. Missing fields default empty for 0.14 records. Selected channel has a new optional selectedChannel field; legacy selected stays 101 when new selection is 102, preserving readable legacy navigation fields. Tests prove loading pre-102 records and preserving 101/103/102 timelines after a round trip. All three built channels appear as guide switch choices. Login/token lifecycle unchanged. Downgrading to older APKs can drop unrecognised 102 fields on a subsequent save; downgrade is not a 102-preserving rollback strategy.
Approved static compact logo and lit-window WebP background are compiled resources. A small ChannelBrands registry maps the existing 102 number to the orbit-after-dark asset identity. After Dark review and guide use the background and logo; network navy/yellow focus remains. Other channels retain their existing presentation. No persistent bottom-left bug, ident playback or new settings are added; those remain optional integration increments. Original multi-channel time grid remains a future step.
Validation: final offline assembleDebug, testDebugUnitTest and lintDebug passed; 87 unit tests, zero failures/errors. Eight new tests cover genre query/token scope, returned genre evidence, ID/type rejection, server ignoring limits, cache caps/deduplication, explicit approval bounds, metadata-only source probes/runtime/source locking, rate-limit stop, legacy records and all three saved timelines/guide ordering. APK signature verified. No private account/catalogue/media, device app data or logs accessed by tools. Provider genre behavior, remote layout/focus, 102 playback/rollover and persistent three-channel navigation require the Xiaomi test after installation. No dependencies, device permissions, VPS/firewall/services or full-library queries added.
Motion proof 03: 4.2-second/720p/25fps silent H.264. Twelve separately animated windows, editable vector Trim Paths trail, then logo reveal. Fully decoded and inspected via contact sheet and final native frame; collected EffectCraft project includes relative footage and source assets. It is not an APK asset and cannot delay channel playback.