Advanced alarm clock
Find a file
2026-07-16 20:56:25 +03:00
app first commit 2026-07-16 20:56:25 +03:00
gradle first commit 2026-07-16 20:56:25 +03:00
.gitignore first commit 2026-07-16 20:56:25 +03:00
build.gradle.kts first commit 2026-07-16 20:56:25 +03:00
DEVLOG.md first commit 2026-07-16 20:56:25 +03:00
gradle.properties first commit 2026-07-16 20:56:25 +03:00
gradlew first commit 2026-07-16 20:56:25 +03:00
gradlew.bat first commit 2026-07-16 20:56:25 +03:00
README.md first commit 2026-07-16 20:56:25 +03:00
settings.gradle.kts first commit 2026-07-16 20:56:25 +03:00

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.