Skip to content

Repository files navigation

MindfulPause

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             # Цветовая палитра и тема

Как это работает

  1. AccessibilityService слушает TYPE_WINDOW_STATE_CHANGED и определяет, когда приложение из списка отслеживаемых попадает на передний план
  2. Если приложение заблокировано (таймер или дневной лимит) — показывается BlockedScreen с обратным отсчётом
  3. Если приложение отслеживается и нет активной блокировки — показывается PauseScreen с дыхательным упражнением, сообщением и опциональным таймером
  4. Пользователь выбирает: «Продолжить» (вход в приложение) или «Выйти» (возврат на домашний экран)
  5. Решение записывается в EventLog и SettingsRepository для статистики

Технологии

  • Kotlin + Jetpack Compose
  • AccessibilityService для перехвата запусков приложений
  • WindowManager (TYPE_APPLICATION_OVERLAY) для full-screen overlay
  • DataStore Preferences для хранения настроек и блокировок
  • Coroutines + Flow для реактивного обновления состояния

Сборка

./gradlew assembleDebug

APK будет в app/build/outputs/apk/debug/

Разрешения

Приложение требует два системных разрешения:

  • Overlay — для отображения поверх других приложений
  • Accessibility Service — для перехвата запусков приложений

Лицензия

MIT

About

Пауза — осознанный вход в соцсети (аналог OneSec для Android)

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages