A minimal, distraction-free countdown timer for Android that keeps you informed with a glance—right from your notification shade.
I wanted a countdown timer that shows a progress bar in the notification panel and doesn't make any sound when it finishes. I should be able to tell how much time is left just with a quick glance.
Example use cases:
- When you're on a flight, If you start the timer after takeoff, you can track the flight progress. Some flights show this on a screen, but not all of them do.
- When you watch a movie in a theater, you can set the movie's duration and start the timer when it begins. The progress bar in your notifications will show how much of the movie is left.
• Persistent notification with progress bar – see the remaining time and percentage at a glance, with a reset button for quick timer control.
• No sounds, no alarms – the timer ends silently with a single "done" notification so it never interrupts a movie, a flight, or your focus.
• Flexible countdown options – set timers based on duration (hours/minutes) or specific end time for precise scheduling.
• Timer scheduling – schedule timers to start automatically at a specific time (up to 24 hours in advance). Perfect for planning ahead—set a timer for your movie start time or flight departure, and it will begin automatically.
• Label your timers – optionally name each countdown (e.g. "Flight to JFK" or "Barbie movie").
• Edge-to-edge Compose UI – built entirely with Kotlin and Jetpack Compose.
• State restoration – progress is preserved across configuration changes and app restarts.
| Home screen | In-app progress | Notification progress |
|---|---|---|
![]() |
![]() |
![]() |
• Android Studio Iguana (or newer)
• Android SDK 35 (compile & target)
• Minimum Android 7.0 (API 24)
- Clone the repository:
git clone https://github.com/your-username/simple-progress.git cd simple-progress - Open the project in Android Studio or build via command line:
./gradlew :app:installDebug
- Deploy the
simple-progressAPK to a connected device or emulator running API 24+.
- Enter the desired hours and/or minutes.
- Tap Start and (optionally) name your timer.
- Minimize the app—the ongoing notification shows a determinate progress bar and the remaining time.
- When finished, a silent "Timer is done!" notification appears.
- Enter the desired hours and/or minutes for the timer duration.
- Tap Schedule to open the time picker.
- Select the time when you want the timer to start (must be within 24 hours).
- Optionally name your scheduled timer.
- The timer will automatically start at the scheduled time, even if the app is closed.
- View or cancel your scheduled timer from the scheduled timers list.
The app follows MVVM architecture with Jetpack Compose:
• UI Layer: Compose components in components/ package with Material 3 theming
• ViewModel Layer: TimerViewModel manages timer state using StateFlow and Coroutines
• Data Layer: TimerActionBus handles timer events and TimerResetReceiver manages system interactions
• Utils: TimeUtils provides time formatting and calculation utilities
The core timer logic leverages Kotlin Coroutines for background processing and StateFlow for reactive UI updates. The notification system uses a low-importance channel to display persistent progress without interrupting the user experience.
This project is licensed under the MIT License—see the LICENSE file for details.


