Time comes from the clock, not a ticker
Rather than decrementing a counter every second, Boost stores the start and target
timestamps and derives the remaining time from the system clock. A foreground ticker
only drives the display. Android is free to suspend the process, and when the app comes
back the numbers are still right.
State survives the process being killed
Timer mode, running and paused flags, the start and target epochs, and accumulated
pause time are written to local storage through shared_preferences. The app
observes the Android lifecycle and rebuilds its state on launch, so a session continues
across an app switch or a restart.
A custom picker instead of a dialog
Choosing a duration uses a looping ListWheelScrollView rotated to run along
the bottom edge of the screen, with fixed-extent snapping. It reads as part of the
display rather than a form control, which keeps the app to a single screen.
Nothing leaves the device
There is no account, no backend, no analytics, and no third-party SDKs. Everything is
stored locally, which is why the app works with no connection and why its privacy
policy has nothing to disclose.