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>
4.1 KiB
Changelog
All notable changes to floret-kit are documented here. The format follows Keep a Changelog.
floret-kit is consumed from source — each app embeds it as a git submodule
and builds it through a Gradle composite build, pinning a specific commit. There
are no binary releases; "version" tracks the shared version in the root build
(currently 0.1.0). Entries are grouped by module.
[Unreleased]
Added
-
core-time(JVM library) — pure-Kotlin date/time helpers, no Android and no third-party dependencies:DayWindow.today()— local-day boundaries for smart-list logic.Instant.formatDate()/formatTime()/formatDateTime()— locale- and zone-aware display formatting overkotlin.time.Instant.TimeBridge—Longepoch-millis ↔Instant, for content-provider I/O.
-
core-crash(Android library) — privacy-respecting, on-device crash capture and reporting. Writes an allowlist-only report (app/Android/device version, locale, time, stack trace — nothing else) to private storage and chains to the platform handler; uploads nothing. Includes startup crash-loop detection, a report dialog that shows the full text before it leaves the device, and an issue-tracker hand-off. Per-app specifics (display name, issue URLs) come from aCrashConfigsupplied atinstall(); each app keeps its own thin themedCrashReportActivity. -
identity(Android library) — the family's Material 3 Expressive theme factoryFloretExpressiveTheme(lightScheme, darkScheme, …)(dynamic colour on API 31+, system light/dark fallback, the standard motion scheme) plusrememberNavSlideSpec(). Each app passes its own seed-derived colour schemes and typography — the mechanics are shared, the look is not. -
components(Android library) — the shared Compose component vocabulary:GroupedSurface/GroupedRow+Position/positionOf— the canonical press-morphing tonal grouped-row primitive (the Android-15 settings pattern).InlineTextField— the borderless tonal text input (capitalization is a parameter).OptionCard— the sanctioned selection-dialog pick.CollapsingScaffold— the collapsing settings/sub-screen scaffold; setlargeTopBar = falsefor 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 withGroupedRow(gapBelow = false), which hands the column uniform control of row spacing.DebugRibbon— a stark, un-themed "DEBUG" corner ribbon; gate onBuildConfig.DEBUGat the call site.InlineTextFieldgainedenabled(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), whereMinutescarries 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) plusReminderOverrideCodec(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
- No
foojaytoolchain resolver anywhere — it can fetch a JDK at build time, which reproducible / official F-Droid builds reject. Modules setjvmTargetdirectly. Seedocs/ARCHITECTURE.md. - AGP 9.x provides built-in Kotlin compilation, so Android modules apply only the
Android library + Compose plugins (no separate
kotlin.android).