Skip to content

Android binding review: ground the Android cards in putio-android shipped source #43

Description

@altaywtf

For the next design round (agent or human). Written from a measured, on-emulator verification of the 3.0.0 Android binding — not from the cards.

Context

The 3.0.0 Android cards were written with "no Android source repo is tracked". The repo exists: putdotio/putio-android — the native Compose rewrite, one codebase for Android mobile and Android TV. It now ships the tier-2 binding: darkColorScheme generated from the 3.0.0 DTCG graph at build time (buildSrc codegen, nothing hand-written), dark only, stock Material 3 / Compose for TV everywhere. Merged as putio-android@6fce1d4.

Read before editing any card:

What held exactly (no action)

--app-bg #161616 · surfaceContainer #232323 · brand yellow #FDCE45 · nav pill = 26% yellow over container · nav bar 80dp · TV overscan 40dp · the M3 switch divergence · dark-only under a light system theme.

Decisions needed, in priority order

  1. androidtv-s00-shell contradicts platforms/android/DESIGN.md. The card documents the old RN app (filled-row focus, "not Compose's scale-plus-elevation") and its don't-list forbids exactly what DESIGN.md §Android TV specifies. The rewrite ships DESIGN.md's version: Compose for TV platform focus, list-first. Re-draw the card from the shipped app (screenshots in the PR), the way the Roku cards are grounded.
  2. Nav indicator metric is stale. Stock M3-expressive (Compose BOM 2026.06) draws the active indicator at 56×32dp, measured on device; the card and DESIGN.md say 64×32dp (pre-expressive token). Update the metric, or add a policy line that Material's current values always win over frozen numbers.
  3. State TV metrics in dp. Cards use px on a 1920×1080 canvas; the app renders at 960×540dp (xhdpi), so every value is halved in code. Also an internal conflict: DESIGN.md says 42px TV glyph, the card says 44px — pick one.
  4. Extend the colour-role table (or bless the derivations). The 11-role map leaves M3 baseline purple in unmapped roles that stock components read. The app derives: primaryContainer/onPrimaryContainer = --yellow-solid/--primary-foreground (your FAB spec); secondaryContainer = --yellow-solid @26% and onSecondaryContainer = --yellow-solid (your nav-pill spec); background/onBackground mirror surface/onSurface. Put these in the DESIGN.md table so no app repo has to derive. Same for the Compose for TV scheme (border/borderVariant, no surfaceContainer tiers) — current projection lives in DesignTokenCodegen.kt.
  5. Fonts are specified but undeliverable. GT America and Berkeley Mono have no embeddable ttf/otf in any tracked repo and no documented app-embedding license. The app ships system fonts until files + terms exist. Deliver them, or bless system fonts for Android in DESIGN.md.
  6. SWF has no Phosphor glyph. The API's file kinds include SWF; the app maps it to file-code. Confirm or name a different stand-in in the icon section.
  7. Production launcher icon has no design-system source. It's an in-repo vector; nightly uses your app-icon-nightly-stars.png. Provide production icon art if the design system should own it.

Verifying against the live app

Clone putio-android, ./scripts/bootstrap.sh, then ./scripts/prove.sh mobile / tv for launch-verified screenshots — or read the PR #56 evidence without building.

Items 1–3 are card corrections, 4–7 are contract gaps. If only one lands this round, make it item 1.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions