Android-приложение для осознанного использования смартфона. Перехватывает отслеживаемые приложения и показывает экран осознанной паузы перед тем, как пользователь сможет ими воспользоваться.
- Экран осознанной паузы — дыхательное упражнение, мотивирующее сообщение и таймер перед входом в приложение
- Блокировка приложений — временная блокировка (от 15 минут до бесконечности) или дневной лимит открытий
- Статистика — подсчёт решений «Продолжить» и «Выйти» за всё время
- Гибкая настройка — настраиваемые сообщения, длительность дыхания и таймера
com.tabek.mindfulpause/
├── MainActivity.kt # Точка входа, навигация (Home / Stats)
├── data/
│ ├── SettingsRepository.kt # Хранение настроек (DataStore)
│ ├── BlockRepository.kt # Правила блокировки и счётчики
│ ├── EventLog.kt # Лог событий (pauses / blocks)
│ ├── Permissions.kt # Проверка системных разрешений
│ └── AppInfo.kt # Модель информации о приложении
├── overlay/
│ ├── PauseOverlayController.kt # Управление full-screen overlay поверх приложений
│ ├── PauseScreen.kt # UI экрана паузы (Compose)
│ └── BlockedScreen.kt # UI экрана блокировки с обратным отсчётом
├── service/
│ └── InterceptAccessibilityService.kt # AccessibilityService для перехвата запусков
└── ui/
├── MainViewModel.kt # ViewModel для главного экрана
├── screens/
│ ├── HomeScreen.kt # Настройка отслеживаемых приложений
│ ├── StatsScreen.kt # Экран статистики
│ ├── AppPicker.kt # Выбор приложений для отслеживания
│ ├── BlockSheet.kt # Настройка блокировки конкретного приложения
│ ├── GestureSettings.kt # Настройка дыхания и сообщения
│ ├── PermissionGate.kt # Запрос разрешений overlay + accessibility
│ └── Components.kt # Переиспользуемые UI-компоненты
└── theme/
└── Theme.kt # Цветовая палитра и тема
- AccessibilityService слушает
TYPE_WINDOW_STATE_CHANGEDи определяет, когда приложение из списка отслеживаемых попадает на передний план - Если приложение заблокировано (таймер или дневной лимит) — показывается
BlockedScreenс обратным отсчётом - Если приложение отслеживается и нет активной блокировки — показывается
PauseScreenс дыхательным упражнением, сообщением и опциональным таймером - Пользователь выбирает: «Продолжить» (вход в приложение) или «Выйти» (возврат на домашний экран)
- Решение записывается в
EventLogиSettingsRepositoryдля статистики
- Kotlin + Jetpack Compose
- AccessibilityService для перехвата запусков приложений
- WindowManager (TYPE_APPLICATION_OVERLAY) для full-screen overlay
- DataStore Preferences для хранения настроек и блокировок
- Coroutines + Flow для реактивного обновления состояния
./gradlew assembleDebugAPK будет в app/build/outputs/apk/debug/
Приложение требует два системных разрешения:
- Overlay — для отображения поверх других приложений
- Accessibility Service — для перехвата запусков приложений
MIT