Merge round-two integration updates into Home work
This commit is contained in:
commit
febcded034
22 changed files with 515 additions and 92 deletions
|
|
@ -27,6 +27,22 @@ Upstream enables JVM unit tests only for debug variants; there is no
|
|||
`testDefaultReleaseUnitTest` task. `make test` uses the closest default-flavor
|
||||
task without changing upstream's test configuration.
|
||||
|
||||
### Full-suite test diagnostics
|
||||
|
||||
The Gradle daemon heap (`org.gradle.jvmargs` in `gradle.properties`) is separate
|
||||
from the forked test-worker heap. The default test worker uses 512 MiB; changing
|
||||
the daemon's `-Xmx` does not increase it. A larger worker heap did not resolve
|
||||
the person-picker fixture's missing Compose snapshot notifications.
|
||||
|
||||
Gradle 9.8.2 runs previously failed test classes first on the next invocation.
|
||||
An immediate green `make test` rerun can therefore hide an order-sensitive
|
||||
failure rather than prove a fix. For comparisons, clear only generated binary
|
||||
test-result history (`build/test-results/<task>/binary` in each module) before
|
||||
each run and record actual class-start order; XML file listing order is not
|
||||
execution order. Keep worker heap and parallelism unchanged between samples.
|
||||
`PersonPickerSessionTest` must also pass late in the full app JVM, not just alone
|
||||
or promoted to the front by previous failures.
|
||||
|
||||
## Saved-person launch and DNS
|
||||
|
||||
Launch restores an unprotected saved Jellyfin login from local storage before
|
||||
|
|
@ -645,18 +661,21 @@ retain the approved frames except for the requested feedback changes:
|
|||
that may still be cancelled; first mount restores the intended shelf item.
|
||||
Discover uses all six approved poster slots. Person keeps the final column
|
||||
at full poster width.
|
||||
- Episode images choose episode Primary, then Thumb, then the already-read
|
||||
series Backdrop. Episode cards are 400×280 px; cast retains its 68 px clearance.
|
||||
Episode context uses the episode overview, with two summary lines on the
|
||||
focused card. Held-series headers measure their copy/actions and leave 40 px
|
||||
before seasons instead of reserving a fixed empty 900 px header.
|
||||
- Episode images choose episode Primary, then Thumb, then the already-read series Backdrop.
|
||||
Title episode cards now use 448×280 px, preserving the taller approved crop.
|
||||
Focused summaries ellipsise to one line, the show-name overlay is absent, and
|
||||
`S1 E3 · duration` plus the watched check share one line.
|
||||
Ready title headers measure their copy/actions and leave 40 px before the
|
||||
following section; series retain the empty 56 px readiness reservation.
|
||||
Poster-only movies floor that stack so Cast circles clear the poster by at
|
||||
least 20 px, including held movie fallbacks and short overviews.
|
||||
- Every Discover heading uses a 104 px band, including a 60 px title-to-card
|
||||
gap. Home heading geometry is unchanged.
|
||||
- Hero/backdrop decoding is bounded to 1920×1080; upright hero sheets request
|
||||
420×630. The shared request builder replaces conflicting Jellyfin size/encoding
|
||||
parameters: cards use WebP quality 80, while hero backdrops/sheets retain JPEG
|
||||
quality 96. Poster/tile/wide/episode requests are 256×384, 400×225, 544×306 and
|
||||
400×280; Jellyfin fill preserves aspect ratio before the UI crops. Tags and
|
||||
448×280; Jellyfin fill preserves aspect ratio before the UI crops. Tags and
|
||||
authentication query parameters remain intact. TMDB uses w342 for posters and
|
||||
portraits, w780 for landscape cards and w1280 for hero backdrops, never original.
|
||||
Lossy WebP decoding is guaranteed below minSdk 23; API 28+ additionally checks
|
||||
|
|
@ -708,6 +727,26 @@ pop a pushed title/person from content **or** nav. Initial loading has no conten
|
|||
target: Down stays in nav, while Back can still leave the title. A missing rating
|
||||
set emits no layout node, so it cannot reserve an invisible extra facts gap.
|
||||
|
||||
The title Menu replaces the old More/media-info icon action and contains Media
|
||||
info plus Add for someone when requests are permitted. It is shared by held
|
||||
movie, series and episode pages; non-held pages expose Add for someone in the
|
||||
same menu while Request/status and Not interested/Show again stay in the row.
|
||||
Version, tracks, watched and trailer controls keep their existing positions.
|
||||
Back from Media info returns to the menu; Back from the menu restores its
|
||||
opening button. The compact menu fades in for 160 ms and out for 100 ms using
|
||||
the motion ease-out token, with reduced-motion fades capped at 80 ms. Only the
|
||||
bounded menu panel owns an alpha layer; the scrim is static. Opening another
|
||||
sheet immediately removes the menu panel and scrim, preventing double darkening.
|
||||
An empty menu closes if its last permitted action disappears. Controls
|
||||
use the shared 4 px straddle focus ring. Episode details omit the redundant
|
||||
Seasons shortcut; series pages retain it. Ratings appear only in the header
|
||||
facts line, not again beside progress, on movie, series and episode pages.
|
||||
|
||||
Episode shelf skeletons use the same width, height and pitch as ready cards.
|
||||
Person filmography and related-title shelves remain posters; Home continuation
|
||||
tiles are a separate component and retain their series-name context.
|
||||
|
||||
|
||||
`TitleReadFacade` confines SDK reads, server/user-scoped last-good disk copies,
|
||||
person credits and playback mutations to one boundary. `ConductarrTitlePages`
|
||||
adds real detail, cast, related titles, performer/filmography, readiness/receipts
|
||||
|
|
@ -732,7 +771,10 @@ headers, sheets, cast and poster captions without changing shared type tokens.
|
|||
Fractional stack placement rounds only the accumulated position, preventing a
|
||||
one-pixel-per-row drift. Focused controls share the canonical lift shadow.
|
||||
`TitleKeysTest` replays real Android keys, including modal Back/hold, nearest-row
|
||||
entry, remembered columns, long-sheet visibility and full media-table geometry.
|
||||
entry, remembered columns and long-sheet visibility. `TitleRound2Test` covers
|
||||
menu Back/focus, preserved media info and household requests, movie stacking,
|
||||
the Mussolini resume example, request revocation, episode skeleton geometry,
|
||||
and native menu fade frames sampled in 16 ms steps.
|
||||
`TitleAsyncFocusTest` delays title and person replies through the real destination
|
||||
and view-model, then exercises content focus and hardware Back. Subtitles Off
|
||||
maps to the player's explicit disabled sentinel, not its unspecified default.
|
||||
|
|
@ -1016,12 +1058,30 @@ Keep and back up this file across clean builds, disposable worktrees, container
|
|||
rebuilds and Gradle cache resets. Never commit it. The standard debug passwords
|
||||
are public; this key is for local debug/optimized builds, not release signing.
|
||||
|
||||
**One-time reinstall:** the first build with the stable key still needs one
|
||||
uninstall+reinstall on the box because the signer changes once; later ones
|
||||
install in place with `adb install -r`, retaining sign-ins and settings.
|
||||
The initial uninstall removes app data, so sign in again once after that switch.
|
||||
Deleting/replacing the persistent key or choosing a different override changes
|
||||
the signer again and requires another reinstall.
|
||||
### Preserve household TV data
|
||||
|
||||
Install and update the household TV app only in place with `adb install -r`,
|
||||
using the same package and persistent debug signer. Its certificate SHA-256 is:
|
||||
|
||||
```text
|
||||
182bac72e292b9ea4d3d4e6383f92eb2161fa28ba5afcff0337cb7d5a9d5341d
|
||||
```
|
||||
|
||||
Never run `adb uninstall`, `pm uninstall` or `pm clear`, or switch signers on
|
||||
the household box: clearing/removing the app deletes saved people, sign-ins
|
||||
and settings, and a different signer cannot update the existing app in place.
|
||||
Do not delete or replace the persistent key. If an uninstall is unavoidable,
|
||||
use `adb uninstall -k <package>` to keep app data, then reinstall the same
|
||||
package with the same signer.
|
||||
|
||||
The manifest sets `android:hasFragileUserData="true"` so Android 10+ can offer
|
||||
a **keep app data** choice during interactive uninstall. Choose it when
|
||||
available; older Android versions ignore the attribute. This is a retention
|
||||
prompt, not an automatic backup or a guarantee against data clearing.
|
||||
|
||||
For an in-place update, compare `dumpsys package <pkg>` before and after:
|
||||
`firstInstallTime` must remain unchanged. The guarded installer that checks
|
||||
the signer and this timestamp lives in the operator's tooling, not this repo.
|
||||
|
||||
|
||||
## Release credentials
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue