- Kotlin 100%
| app | ||
| gradle | ||
| .gitignore | ||
| build.gradle.kts | ||
| DEVLOG.md | ||
| gradle.properties | ||
| gradlew | ||
| gradlew.bat | ||
| README.md | ||
| settings.gradle.kts | ||
Extralarm
Продвинутый будильник для Android без подписок — в духе Alarmy, но полностью локальный: никаких аккаунтов, серверов и платных фич.
Возможности
Будильники
- Время, название, повторы по дням недели (или разовый будильник)
- Свой звук (системные рингтоны или любой аудиофайл) и своя картинка-заставка на экране звонка
- Спокойное пробуждение: громкость нарастает за настраиваемое время до нужного уровня
- Откладывание с ограничением по количеству (или без лимита)
- Кнопка предпросмотра — проверяет звонок с текущими настройками редактора, ничего не сохраняя
- Дублирование будильника одной кнопкой
Головоломки для выключения (можно комбинировать несколько подряд, с несколькими раундами каждая)
- Математика — 3 уровня сложности
- QR / штрихкод — привязка конкретного кода или любой код; библиотека сохранённых кодов (отсканировал один раз — выбираешь в любом будильнике)
- Перепечатать фразу
- Повторить фото — снимаете эталон места (кухня, ванная…), утром нужно сфотографировать похожий кадр; сравнение перцептивным хэшем с настраиваемой строгостью (Мягко/Средне/Строго)
Пока головоломка не начата, будильник звонит в полную силу — тишина на решение включается только по кнопке «Решать задание» и не длится дольше настроенного времени; не успел — будильник снова орёт.
Проверка пробуждения — через N минут после выключения приложение спрашивает «Вы проснулись?». Нет ответа за 5 минут — будильник звонит снова. Количество проверок подряд настраивается.
Резервная сирена — если после срабатывания нет вообще никакой реакции (экран не трогают) настраиваемое время, обычная мелодия сменяется сиреной на максимальной громкости.
Защита от выключения устройства — пока будильник звонит, попытка открыть системное меню выключения (долгое нажатие кнопки питания) прерывается: приложение перехватывает потерю фокуса окна и возвращает себя на передний план.
Защита от удаления — включается в настройках приложения через администратора устройства; пока включена, Android не даст удалить Extralarm обычным способом.
Надёжность и батарея — расписание держится на AlarmManager.setAlarmClock()
(не режется Doze), foreground-сервис работает только во время самого звонка,
будильники переживают перезагрузку и смену времени.
Стек
- Kotlin, Jetpack Compose + Material3
- AGP 9 со встроенной поддержкой Kotlin (плагин
kotlin-androidне используется) - Хранение — JSON-файлы в
filesDir(без Room/базы данных) zxing-android-embeddedдля сканирования QR/штрихкодов
Сборка
./gradlew :app:assembleDebug
APK: app/build/outputs/apk/debug/app-debug.apk
Подробности реализации и история решений — в DEVLOG.md.