A new setting in Settings > Alarms: while the ring screen shows, the volume buttons change the volume (the default, and what they did before), snooze, dismiss, or do nothing. It is app-wide, stored next to the clock defaults, and included in the backup; a backup without it restores "change the volume". A press is made without looking, so VolumeButtonPolicy keeps it from ending an alarm more finally than the ring screen would. Dismiss with a dismiss challenge set snoozes instead, so the challenge still stands. With no snoozes left, Snooze (and Dismiss behind a challenge) falls back to changing the volume, never to the engine's refused-snooze path, which dismisses. The key's snooze also asks the engine to keep ringing if the limit turns out to be reached after all (AlarmEngine.snooze's new dismissIfRefused). The ring screen decides whether a press is its own on key down and keeps that for the release, leaves the keys alone once another alarm has taken over the ring, and ignores a second snooze or dismiss while the first is still running. Only the ring screen handles the keys. While the ring is a heads-up over another app, a background app gets no key events, and the one way around that does not hold up: a remote-playback MediaSession whose VolumeProvider takes the keys. On Android 13 and later MediaSessionRecord.canHandleVolumeKey refuses such a session from an app without a MediaRouter2 routing session, which Clockula's would be, so on current Pixels the keys never reach it. Where it does work, it loses to whatever app is in front or played last, shows a cast-volume slider and a phantom media player, and takes media buttons while the alarm rings. AOSP DeskClock and BlackyHawky's Clock also handle the keys in their alarm activity only. ARCHITECTURE.md records the limitation. Fixes #18
Clockula — documentation
Clockula is a Material 3 Expressive clock app for Android: alarms, timers,
stopwatch and world clock. Third floret of the bloom, after
Calendula (calendar) and
Agendula (tasks). See the top-level
../README.md for the pitch.
Unlike its siblings, Clockula owns its storage, because there is no open provider behind
a clock. What that costs and how the open-standards commitment is honoured anyway
is the first section of PLAN.md.
Index
| Doc | What it covers |
|---|---|
PLAN.md |
The spec. Thesis, locked decisions, the alarm engine, data model, system interop, identity, pipeline, and how ClockMaster is used. The "why". |
ROADMAP.md |
Status and the work queue: milestones M0–M11 and post-v1. What the build loop works through. |
ARCHITECTURE.md |
How Clockula is built today: layers, the data seam, the alarm engine, DI, build/tooling, manifest. Written from M2 onward. |
RELEASING.md |
How to cut a release. Written at M0 alongside the pipeline. |
PROVENANCE.md |
Third-party code and assets carried in-tree, and under what licence (PLAN.md §11). |
Also: ../CHANGELOG.md (Keep a Changelog format; tag sections
feed the release notes).
How the docs relate
- PLAN is the design decisions (stable; the "why").
- ARCHITECTURE is the current shape of the code (kept in sync as it grows).
- ROADMAP is the moving status layer (updated as milestones land).
- RELEASING is the operational runbook.