Reminders onboarding & polish, plus the Settings screen (landed early). - One-time reminder onboarding gate after the provider grant (ReminderOnboardingScreen + OnboardingScaffold), requesting POST_NOTIFICATIONS on API 33+; choice recorded in prefs. - Settings screen, structured after Calendula as a category hub with sliding sub-screens (CollapsingScaffold + grouped rows + full-screen OptionPicker): About card, Appearance (theme, dynamic colour), Task form (default edit-form fields, default list, add-a-subtask-row opt-out), Reminders, Language, and Report a problem. Reached via an expressive shaped action button (MaterialShapes.Cookie4Sided) on the lists overview. Back from a sub-screen returns to the hub. - Reminders: master enable toggle (gates the whole engine; re-requests the notification permission), a default lead time with a Custom amount/unit editor, an Android-12 exact-alarm status row, and per-list overrides of the default (Inherit / None / custom lead), honoured by ReminderScheduler per task. - Per-app language (AppLanguage + locales_config.xml + appcompat locales service); add-a-subtask-row opt-out wired into the task list. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
4.6 KiB
4.6 KiB
Changelog
All notable changes to this project are documented here. The format follows
Keep a Changelog; the latest released git tag is
the source of truth for version codes (see Calendula's docs/RELEASING.md).
[Unreleased]
Added
- M5 reminders onboarding & polish: a one-time reminder onboarding step after the
provider grant explains that Floret delivers due reminders itself and requests
POST_NOTIFICATIONS(API 33+). A new Settings screen (gear on the lists overview), structured after Calendula as a category hub with sliding sub-screens (CollapsingScaffold+ grouped category rows + full-screenOptionPicker): an About card, Appearance (theme, dynamic colour), Task form (which optional edit-form fields show by default, default list, the add-a-subtask-row opt-out), and Reminders (a master enable switch that re-requests the notification permission, a "when to remind" default offset, and — on Android 12 only — an exact-alarm status row that deep-links to system settings). - The reminders master switch gates the whole engine: turning it off clears every scheduled alarm and suppresses any that fire.
- Expressive top-bar actions: a reusable
ShapedActionButtonwraps an action icon in a tonal M3 ExpressiveMaterialShapescontainer (the settings entry uses the faceted Gem shape, tertiary tones), with a small press scale/rotate flourish. Future top-bar actions pick their own shape from theActionShapesregistry.
[0.2.0] - 2026-06-27
Added
- M2 Material 3 Expressive UI — the app is fully navigable now: the provider/permission onboarding gate, the lists overview (smart lists + user lists grouped by account), and the task list (swipe-to-complete / -delete, inline add, smart-list section headers), detail, and create/edit screens, all wired to the M1 ViewModels.
- M3 detail/edit polish: a "Progress" slider (percent-complete, 5% detents,
written to
Tasks.PERCENT_COMPLETE) and conflict-safe saves —updateTaskre-checks the provider'slast_modifiedagainst the value captured when the form loaded and surfaces an overwrite-or-cancel prompt instead of clobbering an external change (e.g. a DAVx5 sync). - M4 subtasks (UI): reparent — a full-width, searchable "Parent task" sheet on the edit form, with candidates grouped by due-date section, files a task under any active top-level task in its list (or "None" to promote it); switching list clears the now-invalid parent. Tapping a subtask in the detail screen opens its own detail, which shows a "Part of …" parent card. On the task list a parent has a dedicated expand button that reveals its children as a nested grouped run, ending with an inline "add a subtask" row (an opt-out toggle is planned for the M6 settings screen).
- Priority is coloured by level (green / amber / red pastels) on the list, detail, and edit screens.
Fixed
- Overview open-counts now count top-level tasks only, so subtasks — and especially open subtasks under a completed parent — no longer inflate a list's "N open" or the smart-list counts.
- Swipe-to-delete now reveals its red background + icon as you drag (tracking the live direction, not just the settled target), and a floating "Deleted · Undo" chip defers the actual delete so it can be restored.
[0.1.0] - 2026-06-18
Added
- M1 data layer + logic ("backoffice"): the full non-visual stack over the
OpenTasks
TaskContractprovider (authority resolved at runtime —org.tasks.opentasksfor tasks.org,org.dmfs.tasksfor OpenTasks).- Vendored
TaskContractsubset,ProviderResolver,ColumnReader, mappers,AndroidTasksDataSource(Instances query + ContentObserver), andTasksRepositoryexposing live Flows of lists/tasks/detail. - Domain models, smart-list filtering (Today/Upcoming/Overdue/No-date/All/
Completed), sorting, form validation, sub-tasks via
parent_id. - Self-scheduled due-reminder engine (AlarmManager + boot/provider-change re-sync), notifications, DataStore prefs.
- Render-only ViewModels + UiState for every screen (lists, task list, detail, edit, settings, permission) so the UI is build-only.
- 24 JVM unit tests (mappers, filtering, sorting, form, value mapping, day
windows).
RootScreenis a functional scaffold over the real data, to be replaced screen-by-screen with the Material 3 Expressive design.
- Vendored
- M0 skeleton: project scaffolding copied from Calendula (Gradle, version catalog, Hilt, Material 3 Expressive theme, Gitea CI/release workflows), reseeded to a warm-mauve palette. Builds and shows a themed placeholder.