Appearance had become the drawer everything got tossed into: 18 rows, half
of which weren't appearance at all. Views held three. Backup hid inside the
calendar manager, where nobody goes looking for "keep a copy of my
calendars".
The hub now reads as three labelled groups — look & behaviour, data, app —
and everything sits under the heading it belongs to:
- Appearance keeps theme/colour, the two fonts, and the app name (18 → 6).
- Views takes the per-view settings, grouped by the view they change: all
views, month, week & day, agenda — then the two ordering lists (3 → 17).
- Widgets & tiles is new: the agenda widget's own range and size, plus the
Quick Settings tile. "Agenda range" no longer sits one row above "Agenda
widget range" pretending to be the same setting.
- Backup & restore is new: export, restore and automatic backup, lifted out
of the calendar manager, which keeps a pointer row to it. Same screen
logic, same either/or fallback when there's nothing exportable; it shares
CalendarsViewModel and is hoisted in CalendarHost like the manager, since
both are driven by the calendar list rather than by preferences.
Descriptions follow one rule now: a toggle says what happens when it's on
(Dynamic colour finally does), and a picker row shows its value, with the
explanation in the picker itself when the value alone says nothing — the
shape widget size and month style already used. Four picker descriptions
added, no string keys renamed or removed, so the translations stay
consistent.
SettingsScreen.kt is split one file per sub-screen (2108 → 409 lines); the
2000-line single file was why this drifted in the first place.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>