Fix Android config save feedback and mirror watch reading layout
build / build (push) Successful in 3m8s

Gray out Save until settings are dirty, add a Cancel button that
discards edits, reorder ReadingScreen to match the watch's
build_content() (adds the missing Attitude/Outcome preview and the
day-significance rank/count), and fix UI chrome to follow the app's
own language setting instead of system locale (values-de/strings.xml
+ appStringResource()/localizedContext()).
This commit is contained in:
ml
2026-07-19 09:13:10 +02:00
parent 3bc1263294
commit 7c60af5142
11 changed files with 325 additions and 107 deletions
+24 -1
View File
@@ -179,7 +179,30 @@ key-value persist API. The daily notification uses WorkManager (a
self-rescheduling one-shot chain, not `AlarmManager`, since a "roughly
this time daily" reminder doesn't need `AlarmManager`'s exact-alarm
permission burden) - the Android analog of `watch/src/c/notify.c`'s own
daily-wakeup contract.
daily-wakeup contract. `ReadingScreen`'s layout mirrors
`watch/src/c/ui_report_window.c`'s `build_content()` section-for-section
(date → day significance, shown with its rank/count e.g. "Notable
(2/4)" → a Guidance section leading with an Attitude/Outcome card
preview, image only, then the day's top transit, then the guidance
paragraph → the full significant-transits list → the full Celtic Cross
spread), not the interpreter's own `--format html` layout, which orders
sections differently and is a separate, standalone rendering path.
The compiled-in `.lang` strings the JNI bridge already localizes (card
text, narrative, guidance) don't cover the Compose UI's own chrome
(nav labels, section headings, notification text) - those are ordinary
Android string resources, which by default resolve against the
*device's* system locale, not `DeckConfig.lang`. Since this app's
reading language is an explicit in-Settings choice independent of the
system locale (`android/app/src/main/res/values-de/strings.xml` holds
the German chrome strings), every chrome string is read through
`ui/AppStrings.kt`'s `appStringResource()` instead of Compose's own
`stringResource()` - it wraps the `Context` in a `Configuration`
forced to `LocalAppLanguage` (provided once, at the root, from
`ConfigRepository`'s `DeckConfig.lang`) via
`util/LocaleUtils.kt`'s `Context.localizedContext()`, the same helper
`ReadingNotificationWorker` uses for its own notification/channel text
outside Compose entirely.
**CI needs network access for this target specifically** - unlike the
CLI/Pebble build path above (deliberately zero network access needed