docs: multi-value reminders + new components; drop stray README conflict marker
Record core-reminders (multi-value) and the new components in CHANGELOG, README module table and the ROADMAP extracted list; clarify that only the reminder *scheduler* stays app-local. Also removes a leftover '>>>>>>> origin/main' merge-conflict marker committed in README by an earlier merge. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
18
CHANGELOG.md
18
CHANGELOG.md
@@ -37,13 +37,29 @@ are no binary releases; "version" tracks the shared `version` in the root build
|
||||
- `InlineTextField` — the borderless tonal text input (capitalization is a
|
||||
parameter).
|
||||
- `OptionCard` — the sanctioned selection-dialog pick.
|
||||
- `CollapsingScaffold` — the collapsing settings/sub-screen scaffold.
|
||||
- `CollapsingScaffold` — the collapsing settings/sub-screen scaffold; set
|
||||
`largeTopBar = false` for a pinned single-line bar (the picker variant).
|
||||
- `FullScreenPicker` / `OptionPicker` — the full-screen single-select picker.
|
||||
- `ReorderableColumn` — dependency-free drag-to-reorder for the short, fixed
|
||||
grouped-card Settings lists; pairs with `GroupedRow(gapBelow = false)`, which
|
||||
hands the column uniform control of row spacing.
|
||||
- `DebugRibbon` — a stark, un-themed "DEBUG" corner ribbon; gate on
|
||||
`BuildConfig.DEBUG` at the call site.
|
||||
- `InlineTextField` gained `enabled` (a disabled field dims to a locked value).
|
||||
- `pastelize()` — softens a raw provider colour to a theme-fitting pastel.
|
||||
|
||||
App-agnostic by design: apps compose their own screens and keep their own
|
||||
identity chips/icons. String resources here (e.g. `back`) are fallbacks an app
|
||||
can override.
|
||||
- **`core-reminders`** (JVM library) — the app-agnostic reminder-override model:
|
||||
`ReminderOverride` (`Inherit` / `None` / `Minutes`), where `Minutes` carries a
|
||||
**list** of lead-times so a target can hold several reminders at once (an app
|
||||
that offers a single reminder just uses a one-element list). Map helpers
|
||||
(`reminderOverrideFor`, `reminderLeadsFor`, `applyReminderOverride`,
|
||||
`reminderOverrideForMinutes`, `normalizeReminders`) plus `ReminderOverrideCodec`
|
||||
(three configurable separators; single legacy values round-trip byte-identically)
|
||||
and the lead-time unit model (`ReminderUnit`, `decomposeReminderMinutes`). The
|
||||
labels/presets and the alarm scheduler stay per-app.
|
||||
|
||||
### Conventions
|
||||
|
||||
|
||||
@@ -39,7 +39,7 @@ See [`docs/ARCHITECTURE.md`](docs/ARCHITECTURE.md) for the full consumption mode
|
||||
| `core-locale` | Android | Per-app language plumbing (`AppLanguage`): read the shipped languages from the app's `res/xml/locales_config.xml`, get/set the applied language via `AppCompatDelegate`, render each language's autonym. The app passes its own `locales_config`; appcompat only, no Compose. |
|
||||
| `core-crash` | Android | Privacy-respecting on-device crash capture + report dialog + issue-tracker hand-off. Parameterized per app via `CrashConfig`. |
|
||||
| `identity` | Android | The M3 Expressive theme factory `FloretExpressiveTheme(…)`, `rememberNavSlideSpec()`, the content transitions (`expandEnter`/`collapseExit`/`itemEnter`/…) and the `predictiveBack` peek. Each app supplies its own seed/palette. |
|
||||
| `components` | Android | Shared Compose vocabulary + recipes: `GroupedSurface`/`GroupedRow`, `InlineTextField`, `OptionCard`, `CollapsingScaffold`, `OptionPicker`, `pastelize()`, `DialogControls`, `OnboardingScaffold`, `OptionalFormSection`, `AboutCard`, `LanguagePickerRow`. |
|
||||
| `components` | Android | Shared Compose vocabulary + recipes: `GroupedSurface`/`GroupedRow`, `InlineTextField`, `OptionCard`, `CollapsingScaffold`, `OptionPicker`, `ReorderableColumn`, `DebugRibbon`, `pastelize()`, `DialogControls`, `OnboardingScaffold`, `OptionalFormSection`, `AboutCard`, `LanguagePickerRow`. |
|
||||
|
||||
_The principle: the **mechanics** are shared, the **look** stays per-app. See
|
||||
[`docs/ROADMAP.md`](docs/ROADMAP.md) for what's extracted, deferred, and
|
||||
@@ -51,7 +51,6 @@ See [`docs/`](docs/) — start with [`docs/README.md`](docs/README.md)
|
||||
([ARCHITECTURE](docs/ARCHITECTURE.md), [ROADMAP](docs/ROADMAP.md)) and
|
||||
[`CONTRIBUTING.md`](CONTRIBUTING.md) to add or change a module.
|
||||
[`CHANGELOG.md`](CHANGELOG.md) tracks what landed.
|
||||
>>>>>>> origin/main
|
||||
|
||||
## Build
|
||||
|
||||
|
||||
@@ -12,6 +12,7 @@ divergent or app-specific code where it lives.
|
||||
| Module | Type | Consumers |
|
||||
|---|---|---|
|
||||
| `core-time` | JVM | Agendula (and Calendula's pending branch) |
|
||||
| `core-reminders` | JVM | Agendula (and Calendula's pending branch) |
|
||||
| `core-crash` | Android | Agendula |
|
||||
| `identity` | Android | Agendula |
|
||||
| `components` | Android | Agendula |
|
||||
@@ -47,11 +48,14 @@ See [`../CHANGELOG.md`](../CHANGELOG.md) for the contents of each.
|
||||
captured instead at the **component** level (shared `GroupedRow`/section
|
||||
primitives + `CollapsingScaffold` + `OptionPicker`); each app composes its own
|
||||
settings from those.
|
||||
- **`core-reminders`** (unified) — Agendula self-schedules alarms (pull),
|
||||
Calendula is provider-event-driven (push). Opposite architectures over
|
||||
incompatible data models; forcing a shared abstraction would be leaky. A tiny
|
||||
`core-notification` (idempotent channel setup, `POST_NOTIFICATIONS` checks)
|
||||
*might* land later; schedulers stay app-local.
|
||||
- **The reminder *scheduler*** — the shared `core-reminders` module is the
|
||||
app-agnostic override *model* only (`ReminderOverride` + codec + unit model,
|
||||
now multi-value). The *delivery* stays app-local: Agendula self-schedules
|
||||
alarms (pull), Calendula is provider-event-driven (push) — opposite
|
||||
architectures over incompatible data models, so forcing a shared scheduler
|
||||
abstraction would be leaky. A tiny `core-notification` (idempotent channel
|
||||
setup, `POST_NOTIFICATIONS` checks) *might* land later; schedulers stay
|
||||
app-local.
|
||||
- Domain-specific UI (date/time fields tied to a domain, calendar/timeline
|
||||
widgets, recurrence text, domain pickers) and all string wording — these encode
|
||||
each app's model and resist parameterization.
|
||||
|
||||
Reference in New Issue
Block a user