feat(timers): redo the add-timer flow as a full-screen calculator keypad

The Timers tab gets a full rewrite of how a timer is created, after Google
Clock as the interaction reference (PLAN.md §11):

- A dedicated TimerSetupScreen replaces the bottom-sheet/inline setup panel:
  a per-unit "00h 00m 00s" readout, a "00" key, and a big centred play
  button that never shifts position when Clear fades in beside it.
- The keypad grows into the thumb zone on its own screen (92dp keys, pushed
  toward the bottom), and both it and the readout read bold.
- Presets are dropped from the flow; TimerDurationEntry gains the matching
  domain support (hoursSegment/minutesSegment/secondsSegment,
  plusDoubleZero()).
- An empty timer list shows the same readout/keypad/Start inline, in place
  of a "tap + to add" card — the keypad is still the empty state, just the
  redesigned one.
- Timer cards are disconnected like the Alarms tab's own list, each with an
  instant, unconfirmed delete via a small corner button (re-creating a
  timer is faster than reading a confirmation dialog would be).
- Hero readouts go bold app-wide to match: stopwatch, alarm rows, world
  clock, the ring screen, and both editors' length/time displays
  (ClockulaReadoutDefaults.Hero and matching call sites).

Alongside: Android 16 Live Update support for the running-timer notification
(POST_PROMOTED_NOTIFICATIONS, ProgressStyle), the live pill restyled to a
plain tonal circle, the alarm dismiss-chooser dialog moved onto Floret's
OptionCard, and small fixes to addTime's zero/negative-result handling,
repeat-day selection and alarm routes.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
2026-10-01 17:06:54 +02:00
co-authored by Claude Sonnet 5
parent 3ff74dc1d5
commit d47220947b
48 changed files with 1102 additions and 600 deletions
+9 -2
View File
@@ -13,7 +13,6 @@
<string name="alarm_snoozed_until">Snoozed until %1$s</string>
<!-- Crash reporting (floret-kit core-crash) -->
<string name="crash_report_issue_title">Crash report</string>
<string name="report_issue_url" translatable="false">https://codeberg.org/jlmakiola/clockula/issues/new</string>
<!-- M4: the app shell's four tabs -->
@@ -35,12 +34,20 @@
<string name="timers_preset_remove">Remove preset</string>
<string name="timer_keypad_backspace">Delete a digit</string>
<string name="timer_keypad_digit">Type %1$s</string>
<string name="timer_keypad_double_zero">Type 00</string>
<string name="timers_setup_clear">Clear</string>
<string name="timer_unit_hours">h</string>
<string name="timer_unit_minutes">m</string>
<string name="timer_unit_seconds">s</string>
<string name="timer_start">Start</string>
<string name="timer_pause">Pause</string>
<string name="timer_resume">Resume</string>
<string name="timer_reset">Reset</string>
<string name="timer_stop">Stop</string>
<string name="timer_add_minute">+1 min</string>
<string name="timer_subtract_minute">−1 min</string>
<string name="timer_adjustment_added">+%1$d min</string>
<string name="timer_adjustment_removed">−%1$d min</string>
<string name="timer_finished">Finished</string>
<string name="timer_paused_at">Paused \u00b7 %1$s</string>
<string name="timer_untitled">Timer</string>
@@ -48,7 +55,7 @@
<string name="timer_row_open">Timer settings</string>
<!-- M6: the timer editor -->
<string name="timer_editor_title">Timer</string>
<string name="timer_editor_title">Countdown</string>
<string name="timer_editor_label">Label</string>
<string name="timer_editor_duration">Length</string>
<string name="timer_editor_duration_locked">Reset the timer to change its length</string>