0.2.42 - DTS surround sound support
This commit is contained in:
@@ -1196,14 +1196,26 @@ in the next idle window rather than constructing one per title.
|
||||
screen every launch shows and the clip was the one thing Memby owns that nobody ever saw
|
||||
there. It borrows the *same* cached instance — no second decoder, no second copy of the
|
||||
file — and hands it back on dispose, so the next playback still opens on a prepared player.
|
||||
Things to preserve: it is **decoration and never a gate**, so every failure is silent and
|
||||
leaves the pulsing-logo screen exactly as it was, and the logo only fades out on
|
||||
`onRenderedFirstFrame` rather than on having asked the player to start; it is acquired
|
||||
**after** `withFrameNanos`, because a cold start has nothing cached and constructing an
|
||||
ExoPlayer inside the first composition of the screen that must appear immediately is the
|
||||
cost the idle-handler prepare exists to avoid; it is muted and looped, where the pre-roll
|
||||
before a programme is audible and must *end* — `PrerollPreloader.acquire`/`recycle`
|
||||
normalise volume and repeat mode so a borrower cannot leave the next one wedged. And
|
||||
**It now gates the launcher**, which is the whole point of it: it was decoration, uncovered
|
||||
whenever the app happened to be ready, and on a warm start that was a fraction of a second —
|
||||
so the one thing Memby owns was in practice never seen. The clip plays once from the
|
||||
beginning, its last frame is held for `LAUNCH_INTRO_HOLD_MS` (2s), and only then is the home
|
||||
screen composed. Things to preserve: **it gates but it can never trap** — no player, a
|
||||
decoder error, or no rendered frame within three seconds all report finished immediately,
|
||||
and `LAUNCH_INTRO_MAX_MS` (9s, the clip's four plus the hold plus room for a weak box) is
|
||||
`AppRoot`'s outer bound on top of that, because a viewer must never be held on a black
|
||||
screen by a branding clip; **`LaunchIntro.played` is process-scoped, not saved**, so an
|
||||
activity Android recreates behind somebody is not a second launch and a profile switch does
|
||||
not replay it; the pulsing mark and the welcome line fade *out* under the clip and back in
|
||||
if the app is still opening when it ends, since the waiting screen and a four-second sting
|
||||
said two things at once; and it no longer loops — looping existed so a slow cold start never
|
||||
froze on the last frame, which the hold and the fade-out do instead, and a clip that never
|
||||
ends cannot gate anything. It is still muted, because it now runs on every single app open,
|
||||
where the pre-roll before a programme is audible and must *end* — `PrerollPreloader.acquire`
|
||||
/`recycle` normalise volume and repeat mode so a borrower cannot leave the next one wedged.
|
||||
It is acquired **after** `withFrameNanos`, because a cold start has nothing cached and
|
||||
constructing an ExoPlayer inside the first composition of the screen that must appear
|
||||
immediately is the cost the idle-handler prepare exists to avoid. And
|
||||
`AppRoot` calls `MembyLoadingScreen` from **one** call site: the three states meaning "still
|
||||
opening" were three, and Compose identifies a composable by where it is called from, so
|
||||
moving between them disposed the screen and rebuilt it — which now means returning and
|
||||
@@ -1616,6 +1628,14 @@ that never names a colour. Shape and punctuation are deliberately *not* themeabl
|
||||
palette that could move a corner radius could make a layout wrong from the server, and the
|
||||
whole safety of this feature is that the worst a bad theme does is look bad.
|
||||
|
||||
**The colour-scheme picker is currently withheld from Settings** —
|
||||
`THEME_PICKER_ENABLED` in `ui/settings/SettingsSheet.kt`, one `const val` to put back.
|
||||
Choosing a scheme does not reliably repaint the app, and a control that appears to do
|
||||
nothing is read as a fault in the television rather than as an unfinished feature.
|
||||
Everything below is otherwise untouched: seasonal themes still arrive and still apply, the
|
||||
synced `themeId` preference is still carried, and the palette plumbing is unchanged. This
|
||||
hides the question, not the answer.
|
||||
|
||||
**Themes** are `server/internal/api/themes.go`, and there are two kinds. A **selectable**
|
||||
theme is the viewer's own choice, held as the ordinary synced preference `themeId` and
|
||||
picked in Settings → Appearance. A **seasonal** theme (Halloween, Christmas, Easter) is not
|
||||
|
||||
Reference in New Issue
Block a user