Sort settings into the places you'd look for them (#69)

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>
This commit is contained in:
2026-07-30 19:51:19 +02:00
parent 02cf32b537
commit 08fd3467ad
13 changed files with 2502 additions and 2122 deletions

View File

@@ -64,7 +64,9 @@ flowchart TD
- **`ui/`** — one package per screen, each with Screen + ViewModel +
UiState. Shared pieces in `ui/common/` (OptionCard — the app's only
sanctioned selection-dialog style —, recurrence humanizer, FAB column,
drawer, transitions).
drawer, transitions). `ui/settings/` is the exception to "one file per
screen": one `SettingsViewModel` feeds a hub (`SettingsScreen.kt`) plus a
sub-screen per category, each in its own `*Settings.kt`.
## Navigation