Skip to content

Sutemi67/KotlinJC_FriendsActivity_app

Repository files navigation

FriendsActivity — счётчик шагов с рейтингом (Kotlin + Jetpack Compose)

Кросс‑платформенный по современным практикам Android‑проект на Kotlin и Jetpack Compose. Приложение реализует базовый аутентификационный поток, отображение статистики активности пользователя (шаги/длительность), экран настроек, а также навигацию между экранами. Архитектура строится на внедрении зависимостей через Koin, сетевых запросах на Ktor, сериализации данных через Kotlin Serialization, фоновом выполнении задач с WorkManager и безопасном хранении токенов при помощи Android Security.


Содержание


Возможности

MVP:

  • 🔐 Аутентификация: регистрация и вход по email/паролю.
  • 👣 Главный экран пользователя: отображение базовой статистики активности (например, шаги и длительность активности). На старте — mock‑данные, затем подключение реальных источников.
  • ⚙️ Настройки: тема (светлая/тёмная), базовые уведомления и пр.
  • 🧭 Навигация: Compose Navigation между основными экранами.
  • 💾 Персистентность: хранение токена аутентификации и настроек.
  • 🧩 DI через Koin: модули для сети, хранения и т. д.

Вне MVP (планируется/опционально):

  • 📶 Синхронизация статистики в фоне (WorkManager).
  • 📈 Расширенная аналитика активности, графики и рейтинг/лидерборд.
  • 🙌 Социальные фичи (друзья, сравнение прогресса) и улучшенные разрешения.

Архитектура и стек

  • Язык/UI: Kotlin + Jetpack Compose.
  • Навигация: androidx.navigation.compose (см. Destinations.kt, NavigationHost.kt).
  • Сеть: Ktor Client для запросов к бэкенду.
  • Сериализация: kotlinx.serialization.
  • DI: Koin (модули: сеть, хранилище, интеракторы/репозитории).
  • Фоновые задачи: WorkManager (например, отложенная синхронизация статистики).
  • Безопасность: AndroidX Security (шифрование чувствительных данных).

Принципы: разделение слоёв (UI → domain → data), однонаправленный поток данных, чистые компоненты, тестируемость и минимальные связности между слоями.


Экраны

  • Auth / Registration — экраны регистрации и входа по email/паролю.
    Примеры файлов: AuthScreen.kt, RegistrationScreen.kt.

  • Main User Screen — простая панель статистики активности: нынешние шаги, длительность активности (mock‑данные на MVP).
    Пример: MainUserScreen.kt.

  • Settings — переключение темы (light/dark), базовые настройки уведомлений и прочие опции.
    Примеры: SettingsScreen.kt, SettingsScreenNavigation.kt.

  • Navigation — декларативный граф в Compose.
    Примеры: Destinations.kt, NavigationHost.kt.


Хранение данных

  • Токены аутентификации: безопасно сохраняются локально.
    Пример: TokenStorageImpl.kt (EncryptedSharedPreferences/AndroidX Security).

  • Настройки: сериализуются и сохраняются локально (например, DataStore + Kotlin Serialization).
    Пример: SettingsStorageImpl.kt.

  • Модели: сериализуемые DTO через kotlinx.serialization.


Права и датчики

Для подсчёта шагов/активности и уведомлений приложению могут требоваться:

  • ACTIVITY_RECOGNITION — распознавание физической активности (Android 10+).
  • BODY_SENSORS — при обращении к отдельным датчикам (если используется).
  • POST_NOTIFICATIONS — для отправки уведомлений (Android 13+).
  • FOREGROUND_SERVICE — при длительном сборе данных в фоне (по необходимости).

Обработка запросов разрешений инициируется в MainActivity.kt через менеджер разрешений, чтобы корректно получать данные от сенсоров.


Структура кода (основные узлы)

app/
 ├─ data/                # Источники данных, DTO, репозитории, Ktor‑клиент
 ├─ domain/              # Интерфейсы, use‑case/интеракторы, модели домена
 ├─ ui/                  # Compose‑экраны, темы, навигация
 │   ├─ auth/            # AuthScreen.kt, RegistrationScreen.kt
 │   ├─ main/            # MainUserScreen.kt
 │   ├─ settings/        # SettingsScreen.kt (+ навигация)
 │   └─ navigation/      # Destinations.kt, NavigationHost.kt
 ├─ di/                  # Koin‑модули: networkModule, storageModule, appModule
 └─ MainActivity.kt      # Точка входа, управление разрешениями и NavHost

Точное расположение файлов может отличаться; см. исходники проекта.


Дальнейшие планы (MVP → релиз)

  • Расширить графики/аналитику, экспорт/импорт данных.
  • Реализовать восстановление пароля и продвинутую валидацию форм.
  • Покрыть key‑модули юнит‑тестами; UI‑тесты критических сценариев.

Скриншоты


Автор

  • Sergey Boykov (Sutemi67) — разработка и поддержка проекта.