2️⃣🔣1️⃣🔣0️⃣
Всем привет! Новое пятничное обновление шагомера выпущено. Что внутри:
Изменения для пользователей:
- Улучшена производительность и плавность приложения
- Исправлены ошибки при смене пользователей и сбросе шагов
ps: Изменения для специалистов: 1. Архитектурный рефакторинг (Clean Architecture) Проведена глобальная перестройка структуры проекта. Код распределен по слоям для лучшей модульности:
Выделение слоя core: Создан единый центр для системных механизмов. Туда перенесены темы (app_theme), внедрение зависимостей (di), базовые модели и сервисы.
Инкапсуляция логики: Пакеты utils и ui/theme упразднены в пользу более строгой иерархии. Теперь UI-компоненты отделены от базовых настроек темы.
Переход к интерфейсам: В слое данных и домена внедрена практика работы через интерфейсы (например, ISettingsRepository, ITokenRepository), что упрощает замену реализаций и написание Unit-тестов.
2. Унификация логики (Base-классы) Внедрен паттерн для разработки экранов, что сокращает дублирование кода:
BaseViewModel: Теперь все ViewModel наследуются от единого базового класса. Он предоставляет готовую структуру для состояний (State), событий (Event) и одноразовых действий (Action).
Безопасное выполнение: Метод runSafely в базовой модели автоматически обрабатывает исключения в корутинах и отправляет их в логгер, избавляя от необходимости писать try-catch в каждом методе.
3. Оптимизация работы с датчиками (AppSensorsManager) Логика подсчета шагов стала более надежной и реактивной:
Реактивные потоки (Flow): Обновление данных о шагах теперь завязано на tokenFlow. Система автоматически реагирует на смену пользователя, подгружая актуальные данные.
Устранение Race Conditions: Метод truncate (сброс данных) переведен в suspend режим и дополнен флагом isDataLoaded. Это гарантирует, что датчики не будут записывать новые данные в БД, пока идет процесс очистки или смены аккаунта.
Атомарность: Использование AtomicInteger для currentSteps повышает потокобезопасность при частых обновлениях от сенсора.
4. Обновление системы внедрения зависимостей (Koin) Файл KoinModule.kt был полностью переписан:
Область видимости: Добавлены определения для новых ViewModel (Main, Settings, Auth, Ratings).
Улучшенная конфигурация сети: В NetworkClient (Ktor) обновлена логика перехвата токенов. Теперь loadTokens и refreshTokens работают напрямую через интерфейс репозитория, что делает авторизацию более стабильной.
5. Улучшение системы диагностики (Logging) Внедрена расширенная система логирования. Вместо простых текстовых сообщений, функции логгера теперь принимают контекст объекта (this):
logger(LoggerType.Debug, this, "message") Это позволяет в консоли разработчика сразу видеть, в каком конкретном экземпляре класса произошло событие, что критически важно для отладки фоновых сервисов и StepCounterService.
6. UI и ресурсы Style Guide: Константы текстовых стилей (AppTextStyles) и тем перенесены в core, становясь "единственным источником истины" для всего приложения.
Оптимизация темы: В Theme.kt почищены неиспользуемые параметры цветов и доработана поддержка темной/светлой темы через CompositionLocalProvider.