Integrate libraries and correct Home review blockers
This commit is contained in:
commit
14a74ac43b
642 changed files with 2377 additions and 169 deletions
|
|
@ -59,9 +59,9 @@ cover the Wolfskin nav.
|
|||
The independent `:wolfskin-design` module owns the shell components, fixed person
|
||||
colours, focus policy, per-person root-view memory, palette and motion. Its
|
||||
`tokens.json` is the copied approved TV-spec source, retaining the locked prototype
|
||||
SHA and provenance. `shell-tokens.json` and `home-tokens.json` add measured shell
|
||||
and Home geometry from that same prototype. Generate the committed Kotlin, CSS
|
||||
and checksum manifest together:
|
||||
SHA and provenance. `shell-tokens.json` adds shell/grid measurements and
|
||||
`home-tokens.json` adds Home geometry from that same prototype. Generate the
|
||||
committed Kotlin, CSS and checksum manifest together:
|
||||
|
||||
```sh
|
||||
python3 wolfskin-design/generate_tokens.py
|
||||
|
|
@ -125,9 +125,10 @@ attribution and project URL. The check does not depend on incremental merge file
|
|||
|
||||
Home is one lazy frame: a non-rotating resume → Next up → newest → pick hero,
|
||||
Jellyfin shelves, per-destination "Your …" shelves and the Discover continuation.
|
||||
The final action opens Discover at its top. Discover (`discover`) and See all
|
||||
(`see-all:{row-id}`) are named integration targets, not implementations of those
|
||||
later screens. Title navigation remains the shell's later-slice target.
|
||||
The final action opens Discover at its top; Discover remains its named integration
|
||||
target. Home's See all cards open the real `WolfskinSeeAllLists` grid, carrying
|
||||
the complete underlying list rather than the visible shelf window. Title content
|
||||
remains the later-slice target.
|
||||
|
||||
All Home components and immutable screen models live in `:wolfskin-design`.
|
||||
The shell's remembered view owns vertical position, each row's card and first
|
||||
|
|
@ -139,6 +140,10 @@ OK events cannot activate twice.
|
|||
Between shelves, an unvisited row selects the nearest visible card center even
|
||||
when card widths differ. A visited row restores its column. Horizontal movement
|
||||
keeps the track still while focus remains in its visible middle.
|
||||
The initial skeleton parks focus on the nav. When the first content arrives,
|
||||
an untouched fresh entry focuses hero button zero; intervening nav input prevents
|
||||
that automatic transfer. Home and Libraries use the same `ShellContentFocus`
|
||||
release/repeat guard and Back ladder.
|
||||
|
||||
`HomeReadFacade` is the only Home code importing Jellyfin API clients. Release
|
||||
variants read the selected user's Resume, Next up, newest titles and destination
|
||||
|
|
@ -157,16 +162,19 @@ network reads in tests. Conductarr sign-in is not implemented here: real signed-
|
|||
Home hides every rating and shows "Discover needs sign-in". No Seerr fallback is
|
||||
used. Catalogue data and ratings in debug captures are fixture-backed.
|
||||
|
||||
Home images request exact slot sizes, use RGB565 for posters, disable crossfades,
|
||||
share a 64 MiB memory/128 MiB disk cache, limit image work to four reads and prefetch
|
||||
the next shelf. Rating plates use the TV locale, start at 14 sp, shrink to 12 sp
|
||||
Home and Libraries share `TitleCard`, `Caption`, `LibrarySeeAllCard` and one
|
||||
`WolfskinImages` loader. Images request exact slot sizes, use RGB565 for posters,
|
||||
disable crossfades, share a 64 MiB memory/128 MiB disk cache, limit image work to
|
||||
four reads and prefetch the next shelf. Rating plates start at 14 sp, shrink to 12 sp
|
||||
and drop trailing entries rather than wrap. Their uncached read gate is 350 ms;
|
||||
cached focus returns without that delay.
|
||||
|
||||
Focus rings and native lift draw outside fixed slots. The Saved chip uses its
|
||||
own measured geometry rather than the smaller Settings pill; caption separators
|
||||
use the approved 40% opacity token. Vertical moves clamp to the short target row,
|
||||
including a final See all card, rather than preserving an invalid column.
|
||||
Focus rings and native lift draw outside fixed slots. The Saved nav chip uses its
|
||||
own geometry; the Discover section uses a warning pill. Caption separators multiply
|
||||
the existing muted colour alpha by the shared 40% token. Home-only untrimmed styles
|
||||
and `exactLineBox` honor the declared CSS line boxes despite Android's intrinsic
|
||||
paragraph minimums; shell and library typography retain their existing defaults.
|
||||
Vertical moves clamp to short target rows, including a final See all card.
|
||||
|
||||
`make test` includes `HomeCaptureTest` (23 native acceptance states) and the
|
||||
data-driven paths in `wolfskin-home-presses.json`: play next 2, resume 3, Discover
|
||||
|
|
@ -176,6 +184,44 @@ side by side with the frozen spec captures; Compose Roboto/JPEG rasterisation,
|
|||
the approved button-scale consolidation and removal of prototype sample pills
|
||||
are recorded differences, not a claim of browser pixel equality.
|
||||
|
||||
## Libraries and See all
|
||||
|
||||
Movies, Shows and Anime use the shell's retained view and a continuous six-column
|
||||
lazy grid. Up from its first row reaches Sort/Filter, then the nav; Back preserves
|
||||
the card and scroll. Sort cycles A–Z, Recently added and Rating. The letter rail
|
||||
exists only at 200 titles with A–Z selected. Card OK activates on key-up through
|
||||
the same shell hold guard, without a long-press menu.
|
||||
Down clamps a short final title row before entering the separate Try again / Show
|
||||
more row; an empty slot cannot activate recovery. An unavailable library hides
|
||||
its unknown item count.
|
||||
|
||||
Caption separators use 40% of the existing muted colour's alpha. The rail follows
|
||||
the locked prototype CSS: bold 24 px letters, with the focused letter bold 28 px,
|
||||
overriding the spec table's generic caption style for this component.
|
||||
Library header initials use the muted colour over the person's fill; navigation,
|
||||
picker and Settings avatars retain their dark initials.
|
||||
|
||||
The debug-only `wolfskin-library.json` and `library/assets/` contain the locked
|
||||
prototype's titles and local poster art. Release libraries read through
|
||||
`LibraryReadFacade`, with 200-item Jellyfin chunks and ten-minute per-server/person
|
||||
snapshots using the existing atomic disk cache. Saved data is painted before a
|
||||
quiet refresh; a failed refresh keeps it. Production ratings remain hidden until
|
||||
Conductarr sign-in exists.
|
||||
|
||||
Home/Discover shelves open a full list through
|
||||
`WolfskinSeeAllLists.open(person, key, title, fullList, navigation, loadNextPage)`.
|
||||
The optional suspend page provider returns `LibraryPage(items, hasMore)` using the
|
||||
generated Conductarr client. The grid reads within ten cards of its end, deduplicates
|
||||
title identities, and pauses on Try again or Show more rather than looping.
|
||||
Title activation pushes the explicitly named `library-title/{id}` destination for
|
||||
the title-screen implementation; this slice does not implement title pages.
|
||||
|
||||
`LibraryCaptureTest` renders the sixteen approved library/See all states offline.
|
||||
`LibraryKeysTest` reads the approved JSON path and reaches Spirited Away in exactly
|
||||
20 Android key presses. Paging and snapshot tests cover duplicate-only reads,
|
||||
failure/retry, stale copies, and person/server isolation. Captures are written to
|
||||
the same `build/wolfskin-captures/` directory as the shell captures.
|
||||
|
||||
## Toolchain and disk use
|
||||
|
||||
`Dockerfile` pins Temurin JDK `21.0.11+10` by image digest, command-line tools
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue