fix(timers): keep a ramp from restarting mid-ring and a migration from guessing

A timer ring that hands over from one expired timer to another now starts at full volume instead of ramping again from near silence.

The timer-vibrate migration only treats an install as fresh when the package was never updated and the store is empty. An updated install whose store was replaced after corruption, or an Auto Backup restore onto a new device, keeps the alarm default as before.

The Vibrate row now says whether it is on, and only when it is off adds that a silent timer still vibrates.

Refs #22
This commit is contained in:
makiolaj committed 2026-10-21 18:56:07 +02:00
1 parent fbc3a192bf
commit 8910ab7fbf
10 files changed
+90 -23

No files matched your search

+5 -3
View File
@@ -1911,9 +1911,11 @@ alarm that should buzz the bed and a kitchen timer that should only beep are
different questions. A fresh install has it **off**. An install from before
the setting existed had its timers vibrate exactly when the alarm default did,
so `TimerVibrateMigration` (a DataStore migration, run before the first read)
writes that value once rather than silently changing what its timers do; it
tells a fresh install by an empty store, since anything that has run has
written its boot id. Silent with vibration off is still not silence:
writes that value once rather than silently changing what its timers do. Only
a package never updated since install *and* an empty store count as fresh;
anything else (an update, an Auto Backup restore, a store replaced after
corruption) keeps the old behaviour. A ring that hands over from one expired
timer to another mid-ring does not start the ramp again. Silent with vibration off is still not silence:
`AudioSourcePolicy` gives Silent no sources, and the player's `onSilenced`
starts the vibrator regardless of the setting.