Reminders can count from a task's start as well as its due date (#72), and each reminder on an all-day task can have its own time (#78). ## Changes - A reminder counts from the start or the due date. Tasks with only a start date get reminders. Defaults in Settings can mix both, globally and per list. - Each reminder on an all-day task can have its own time of day. Reminders without one ring at the all-day time set in Settings. 00:00 can't be stored, so it becomes 00:01. - The editor shows the defaults a new task, or a newly added date, will get, and keeps them in step with dates, list and all-day until you change a reminder. What it shows is what gets saved. Removing the shown defaults now leaves the task without a reminder (Room store only; OpenTasks mode still falls back to the default). - Switching between timed and all-day converts the reminders right away in the editor. Switching straight back restores them. - Labels name the date when a task has both: "15 minutes before the start", "On the due date at 09:00". New reminders preselect the start. - Defaults that have already passed don't ring when the task is saved. - Sync: reminders rounded to whole days by builds before 1.2 pick up their real time of day on the next download. ## Deviations from the issues - The start/due anchor lives in floret-kit (`ReminderLead`, floret-kit#19) rather than being packed into minute values. That PR is additive, so Calendula is unaffected. - `error_reminder_without_due` was renamed to `error_reminder_without_date`, and the "(before start)/(before due)" strings were replaced by full sentences. The stale keys were deleted from the translation files so lint passes, and Weblate needs to offer the new strings to translators. - The dead single-reminder API (`setAlarm`, `alarms()`, `editable()`, `reminderFor`) was removed. - `AlarmLift` is back to its frozen 2→3 migration state. ## Release branch `release/v1.2.0` is merged into this branch. Through it, this PR also brings main's commits the release branch was missing, including the reminder sync from #81 that this work builds on. I resolved conflicts in the data source interface, `TaskAlarmDao`, CHANGELOG, PRIVACY.md and the floret-kit pointer by keeping both sides. Closes #72 Closes #78 Co-authored-by: Weblate <noreply-mt-weblate@weblate.org> Co-authored-by: Sup99999 <alelmnour1o234@proton.me> Co-authored-by: Robin Schanbacher <robin@schanbros.de> Co-authored-by: Knee8811 <mk-weby@protonmail.com> Co-authored-by: Sonja Kraus <klein.felix@pm.me> Co-authored-by: Weblate <noreply@weblate.org> Co-authored-by: Jean-Luc Makiola <business@jeanlucmakiola.de> Reviewed-on: https://codeberg.org/jlmakiola/agendula/pulls/88