Автор: Илья Воскобойников — Android-разработчик в ООО “Технологии надежности”, выпускник курса “Android Developer. Professional”

Проблематика

В современном мире, насыщенном стрессами, высокой информационной нагрузкой и стремительным ритмом жизни, вопросы психоэмоционального благополучия выходят на первый план. Всё больше людей испытывают эмоциональное выгорание, тревожность, упадок настроения и даже потерю мотивации к повседневной деятельности. В таких условиях становится крайне важным развитие практик самонаблюдения, саморефлексии и эмоционального контроля.

Однако несмотря на растущий интерес к теме ментального здоровья, на Android-платформе остаётся крайне мало качественных инструментов, которые позволяли бы пользователю отслеживать свое состояние просто, быстро и регулярно. Большинство существующих приложений либо перегружены интерфейсом, либо ограничены в функциональности, либо не предоставляют возможности анализа — пользователь может записать эмоции, но не может понять, почему он чувствует себя именно так и как можно изменить это состояние к лучшему.

Кроме того, в большинстве приложений отсутствует персонализированный подход. Приложения фиксируют данные, но не умеют предлагать актуальные советы, основанные на истории состояний конкретного пользователя. Пользователь остаётся один на один со своими записями, не получая обратной связи или поддержки.

Также важной проблемой является низкая визуализация данных. Даже если пользователь регулярно отмечает своё настроение, ему сложно отследить динамику, выявить корреляции (например, между настроением и сном или погодой), а значит — и сделать выводы. Отсутствие визуального календаря или графика демотивирует вести дневник, особенно если эффект непонятен и не виден сразу.

В целом, можно выделить 3 ключевые проблемы:

  1. Сложность и непонятность — приложения перегружены, не интуитивны или требуют много времени на заполнение.
  2. Отсутствие аналитики и обратной связи — пользователь не получает персональных советов или выводов.
  3. Недостаток мотивации — низкий уровень визуального поощрения, отсутствие ачивок или помощника.

Эти проблемы делают попытки вести дневник настроения краткосрочными и неустойчивыми. Приложение, которое будет не только фиксировать эмоции, но и анализировать их, предлагать рекомендации, визуализировать путь пользователя и поддерживать геймификацией — решает все 3 задачи одновременно.

Цель работы

Основной целью разработки стало создание мобильного Android-приложения, которое помогает пользователю отслеживать свое эмоциональное состояние, выявлять влияющие на него факторы и получать персонализированные советы для улучшения благополучия.

Были поставлены следующие задачи:

  1. Создать удобный и быстрый интерфейс для регулярного заполнения дневника настроения. Интерфейс должен быть интуитивным, с минимальным количеством экранов и кликов. Пользователь должен иметь возможность за 1-2 минуты внести информацию о своём дне.
  2. Интегрировать визуальные элементы, помогающие видеть динамику состояния. Это включает календарь с цветовой индикацией эмоций по дням и график изменений настроения за месяц. Эти инструменты позволяют пользователю буквально «увидеть» свой путь и распознать закономерности.
  3. Разработать систему категорий влияющих факторов, таких как сон, питание, погода, общение, привычки и др. Пользователь может выбирать релевантные факторы, тем самым формируя богатую и контекстную картину дня.
  4. Интегрировать ИИ-алгоритм анализа состояний на основе записей пользователя. Используя возможности GigaChat API от Сбер, приложение предлагает обратную связь — краткий анализ записей и советы, помогающие улучшить состояние. Это делает приложение интерактивным и персонализированным.
  5. Реализовать систему геймификации — ачивки, виртуальный помощник, напоминания, чтобы поддерживать регулярность и мотивацию пользователя.
  6. Соблюдать принципы архитектуры Clean Architecture, MVVM и модульности. Проект должен быть технически устойчивым, масштабируемым и легко расширяемым. Это особенно важно с учетом планов по дальнейшему развитию — добавлению синхронизации с облаком, возможности делиться своими эмоциями с друзьями и созданию персональной статистики.

Таким образом, проект решает не только проблему фиксации настроения, но и ставит более амбициозную цель: помочь пользователю лучше понимать себя, находить внутренние связи между событиями и эмоциями, и действовать осознанно, улучшая качество жизни. 

Ход работы

Проект был реализован с применением современных подходов к архитектуре Android-приложений, следуя принципам Clean Architecture и MVVM (Model-View-ViewModel). Работа велась поэтапно — от проектирования моделей и интерфейсов до интеграции стороннего API и построения пользовательского интерфейса.

Архитектура и модульность

Проект был разбит на логически обособленные Gradle-модули:

  • core — содержит общие утилиты, темы, расширения и базовые компоненты UI;
  • data — реализация репозиториев, локального и удаленного хранилищ;
  • domain — бизнес-логика в виде use case’ов и сущностей;
  • (feature-модули) — экраны приложения: дневник, календарь, графики, настройки и др.

Это решение позволяет повысить читаемость, переиспользуемость и облегчить покрытие кода тестами.

AI Mood Tracker: трекинг настроения с помощью искусственного интеллекта

Моделирование данных

Для описания пользовательской записи о дне была создана сущность DailyMoodEntry, включающая в себя:

  • дату;
  • основную оценку настроения (DayMoodRating);
  • список эмоций;
  • параметры сна, питания, погоды;
  • привычки, общение и хобби;
  • комментарий пользователя.

data class DailyMoodEntry(
    val id: String = UUID.randomUUID().toString(),
    val date: LocalDate,
    val moodRating: DayMoodRating,
    val emotions: List,
    val sleep: SleepQuality,
    val nutrition: List,
    val hobbies: List,
    val health: List,
    val weather: WeatherType?,
    val habits: List,
    val note: String

Такая структура позволяет гибко и точно описывать каждый день пользователя, а в дальнейшем — анализировать его эмоциональные паттерны.

Интерфейсы и UI

Интерфейс разработан на базе Jetpack Compose с использованием Material 3. В работе над экраном дневника использовались:

  • кастомные компоненты для выбора эмоций, сна, привычек и т.д.;
  • BottomSheet для отображения опций и выбора;
  • Navigation Compose для управления навигацией между экранами;
  • StateFlow и ViewModel для управления состоянием.

Также были реализованы:

  • Календарь — с возможностью просмотра эмоций по дням. Используются иконки в кружках, цветовая индикация и листание месяцев.
  • График настроения — построен с использованием сторонней библиотеки MPAndroidChart, отображает уровень настроения по дням месяца, соединяя точки линией.

Интеграция GigaChat API

Для анализа записей пользователя использовалось API от Сбер — GigaChat API. Алгоритм следующий:

  1. Из пользовательской записи формируется prompt, который включает дату, оценку и краткое описание.
  2. Выполняется запрос через Retrofit к GigaChat API с авторизацией по токену.
  3. Полученный ответ парсится в ChatCompletionResponse и отображается пользователю в виде краткого анализа.

Интеграция происходила через suspend-методы, а для получения токена был реализован thread-safe TokenProvider.

kotlin
CopyEdit
val encoded = Base64.encodeToString("$CLIENT_ID:$CLIENT_SECRET".toByteArray(), Base64.NO_WRAP)
val token = authService.getAccessToken("Basic $encoded").accessToken

Настройки и кастомизация

Пользователь может:

  • выбирать тему оформления (светлая/тёмная);
  • получать напоминания;
  • видеть награды и достижения.

    Все настройки сохраняются через DataStore Preferences.

Сложности и решения

Некоторые технические сложности, с которыми пришлось столкнуться:

  • LazyColumn в BottomSheet — в некоторых версиях Compose проявлялись баги скроллинга. Было решено через кастомное ограничение высоты.
  • Сохранение состояния при переключении экранов — решено с использованием rememberSaveable и ViewModel.
  • Работа с токенами GigaChat — из-за требований API приходилось следить за актуальностью токена и использовать двойную проверку с блокировкой (synchronized).

Выводы

Реализация приложения для трекинга настроения с элементами искусственного интеллекта позволила не только глубже понять принципы построения современных Android-приложений, но и на практике применить такие инструменты, как Clean Architecture, Jetpack Compose, а также сторонние API и библиотеки визуализации данных.

Что удалось достичь:

  • Функциональность
    Пользователь получает интуитивно понятный интерфейс для ежедневного ввода настроения, эмоций, сна, активности, общения, питания и других аспектов. Это позволяет ему отслеживать динамику своего состояния и находить зависимости между образом жизни и эмоциональным фоном.
  • Интеграция ИИ
    Использование GigaChat API позволило превратить обычный дневник настроений в интеллектуальный инструмент самоанализа. Генерация кратких обзоров дня помогает пользователю взглянуть на происходящее под новым углом.
  • Визуализация
    Отображение данных на календаре и в виде графиков даёт чёткое и визуально удобное представление о динамике. Пользователь может легко увидеть, какие периоды были особенно положительными или негативными.
  • Гибкость и масштабируемость
    Благодаря модульной архитектуре и соблюдению SOLID-принципов проект легко масштабировать. Например, можно добавить интеграцию с носимыми устройствами, расширить типы трекаемых данных или включить социализацию (например, делиться успехами с друзьями).

Направления развития

Возможные будущие улучшения проекта:

  • Рекомендательная система на базе ИИ
    Используя собранные данные, можно реализовать персонализированные советы по улучшению состояния: например, рекомендации по сну, питанию, активности, привычкам.
  • Награды и геймификация
    Введение системы достижений за регулярное заполнение дневника и положительную динамику поможет мотивировать пользователей.
  • Синхронизация между устройствами и облачное хранилище
    Поддержка входа в аккаунт, синхронизация записей и восстановление истории при смене телефона.
  • Анализ долгосрочных трендов
    Графики за неделю, месяц, квартал с аналитикой и сводками на базе данных пользователя.

Заключение

Данный проект стал полноценной лабораторией для оттачивания навыков в Android-разработке, архитектуре приложений, интеграции API и построении качественного пользовательского интерфейса. Полученный результат — это не просто учебная работа, а реальный цифровой инструмент, способный помочь людям стать внимательнее к своему эмоциональному состоянию и улучшить качество жизни.