feat: Android renders custom themes and the text size (#127) #155

Merged
nalum merged 1 commit from feat/android-theme-workshop into main 2026-08-18 16:44:40 +00:00
Owner

Closes #127. PR 17 of the #137 stack, based on #154.

The two synced preferences (ADR-0029) the web could set and Android silently ignored:

  1. Custom themes render. A custom family no longer degrades to Hearth: the theme layer overlays the web workshop's token overrides (the nine colour tokens plus --radius, #rgb/#rrggbb/#rrggbbaa parsed defensively — a bad value keeps the base) on the default family in both modes, and the Material scheme, typography and every component follow. Settings shows an honest Custom (made on the web) chip as the current family instead of silently highlighting a fallback.
  2. Text size renders and is controllable. The synced text_scale now drives the whole two-face type scale (1.0 / 1.15 / 1.33), and the Appearance sheet gains the web's three-step control (Standard / Larger / Largest) writing through the same synced record.

Recorded tier decision (system rule 1): the workshop itself — the token editor — stays a web tool; building a theme is fine-grained colour work for a big screen, and this device now renders the result faithfully.

Emulator-verified against the live deploy: a workshop theme (deep purple surfaces, orange accent) written from the web side rendered end to end — header, cards, mark edges, the Done bar — with the type at Largest. make check and Android unit tests green; the test settings were restored afterwards.

🤖 Generated with Claude Code

Closes #127. PR 17 of the #137 stack, based on #154. The two synced preferences (ADR-0029) the web could set and Android silently ignored: 1. **Custom themes render.** A `custom` family no longer degrades to Hearth: the theme layer overlays the web workshop's token overrides (the nine colour tokens plus `--radius`, `#rgb`/`#rrggbb`/`#rrggbbaa` parsed defensively — a bad value keeps the base) on the default family in both modes, and the Material scheme, typography and every component follow. Settings shows an honest **Custom (made on the web)** chip as the current family instead of silently highlighting a fallback. 2. **Text size renders and is controllable.** The synced `text_scale` now drives the whole two-face type scale (1.0 / 1.15 / 1.33), and the Appearance sheet gains the web's three-step control (Standard / Larger / Largest) writing through the same synced record. **Recorded tier decision** (system rule 1): the workshop itself — the token *editor* — stays a web tool; building a theme is fine-grained colour work for a big screen, and this device now renders the result faithfully. Emulator-verified against the live deploy: a workshop theme (deep purple surfaces, orange accent) written from the web side rendered end to end — header, cards, mark edges, the Done bar — with the type at Largest. `make check` and Android unit tests green; the test settings were restored afterwards. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
feat(android): render synced custom themes and the text size
Some checks failed
check / commits (pull_request) Successful in 5s
check / web (pull_request) Successful in 1m40s
check / go (pull_request) Successful in 2m49s
check / report (pull_request) Successful in 5s
android / build (pull_request) Successful in 5m28s
android / report (pull_request) Successful in 4s
android / report (push) Has been cancelled
check / commits (push) Has been cancelled
check / go (push) Has been cancelled
check / report (push) Has been cancelled
check / web (push) Has been cancelled
tag / tag (push) Has been cancelled
android / build (push) Has been cancelled
ab4165dbe1
The two synced preferences the web could set and Android silently
ignored (#127, ADR-0029): a custom family degraded to Hearth and
text_scale was preserved but never rendered. The theme layer now
applies the web workshop's token overrides on top of the base family
(colours and radius, both modes), the type scale follows text_scale,
and Settings gains the web's three-step text-size control plus an
honest Custom chip when the member's theme was built in the workshop.
The workshop itself — the token editor — stays a web tool by design:
building a theme is fine-grained colour work for a big screen; this
device renders the result faithfully, recorded here per system rule 1.

Test report

Suite Tests Result Skipped
Unit 1370 ✅ pass 1
Integration 87 ✅ pass —

Coverage: 27.3%

Updated by the check workflow · commit ab4165dbe1

<!-- ci-test-report --> ## Test report | Suite | Tests | Result | Skipped | | --- | --: | --- | --: | | Unit | 1370 | ✅ pass | 1 | | Integration | 87 | ✅ pass | — | **Coverage:** 27.3% <sub>Updated by the check workflow · commit ab4165dbe1ecf1e6b2d64c2879ffb59b052238db</sub>

Android test report

Suite Tests Result Skipped
Unit (debug) 31 ✅ pass 0

Coverage: 2.4% of lines

Updated by the android workflow · commit ab4165dbe1

<!-- android-test-report --> ## Android test report | Suite | Tests | Result | Skipped | | --- | --: | --- | --: | | Unit (debug) | 31 | ✅ pass | 0 | **Coverage:** 2.4% of lines <sub>Updated by the android workflow · commit ab4165dbe1ecf1e6b2d64c2879ffb59b052238db</sub>
nalum changed target branch from feat/android-notification-kinds to main 2026-08-18 16:44:33 +00:00
nalum merged commit ab4165dbe1 into main 2026-08-18 16:44:40 +00:00
nalum deleted branch feat/android-theme-workshop 2026-08-18 16:44:40 +00:00
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
2 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
eagraiclainne/app!155
No description provided.