HTML Diff
0 added 0 removed
Original 2026-01-01
Modified 2026-03-10
1 <ul><li><a>Проблематика</a></li>
1 <ul><li><a>Проблематика</a></li>
2 <li><a>Цель работы</a></li>
2 <li><a>Цель работы</a></li>
3 <li><a>Ход работы</a><ul><li><a>Архитектура и модульность</a></li>
3 <li><a>Ход работы</a><ul><li><a>Архитектура и модульность</a></li>
4 <li><a>Моделирование данных</a></li>
4 <li><a>Моделирование данных</a></li>
5 <li><a>Интерфейсы и UI</a></li>
5 <li><a>Интерфейсы и UI</a></li>
6 <li><a>Интеграция GigaChat API</a></li>
6 <li><a>Интеграция GigaChat API</a></li>
7 <li><a>Настройки и кастомизация</a></li>
7 <li><a>Настройки и кастомизация</a></li>
8 <li><a>Сложности и решения</a></li>
8 <li><a>Сложности и решения</a></li>
9 <li><a>Выводы</a></li>
9 <li><a>Выводы</a></li>
10 <li><a>Что удалось достичь:</a></li>
10 <li><a>Что удалось достичь:</a></li>
11 </ul></li>
11 </ul></li>
12 <li><a>Направления развития</a></li>
12 <li><a>Направления развития</a></li>
13 <li><a>Заключение</a></li>
13 <li><a>Заключение</a></li>
14 </ul><p><em>Автор: Илья Воскобойников - Android-разработчик в ООО “Технологии надежности”, выпускник курса “Android Developer. Professional”</em></p>
14 </ul><p><em>Автор: Илья Воскобойников - Android-разработчик в ООО “Технологии надежности”, выпускник курса “Android Developer. Professional”</em></p>
15 <h2>Проблематика</h2>
15 <h2>Проблематика</h2>
16 <p>В современном мире, насыщенном стрессами, высокой информационной нагрузкой и стремительным ритмом жизни, вопросы психоэмоционального благополучия выходят на первый план. Всё больше людей испытывают эмоциональное выгорание, тревожность, упадок настроения и даже потерю мотивации к повседневной деятельности. В таких условиях становится крайне важным развитие практик самонаблюдения, саморефлексии и эмоционального контроля.</p>
16 <p>В современном мире, насыщенном стрессами, высокой информационной нагрузкой и стремительным ритмом жизни, вопросы психоэмоционального благополучия выходят на первый план. Всё больше людей испытывают эмоциональное выгорание, тревожность, упадок настроения и даже потерю мотивации к повседневной деятельности. В таких условиях становится крайне важным развитие практик самонаблюдения, саморефлексии и эмоционального контроля.</p>
17 <p>Однако несмотря на растущий интерес к теме ментального здоровья, на Android-платформе остаётся крайне мало качественных инструментов, которые позволяли бы пользователю отслеживать свое состояние просто, быстро и регулярно. Большинство существующих приложений либо перегружены интерфейсом, либо ограничены в функциональности, либо не предоставляют возможности анализа - пользователь может записать эмоции, но не может понять, почему он чувствует себя именно так и как можно изменить это состояние к лучшему.</p>
17 <p>Однако несмотря на растущий интерес к теме ментального здоровья, на Android-платформе остаётся крайне мало качественных инструментов, которые позволяли бы пользователю отслеживать свое состояние просто, быстро и регулярно. Большинство существующих приложений либо перегружены интерфейсом, либо ограничены в функциональности, либо не предоставляют возможности анализа - пользователь может записать эмоции, но не может понять, почему он чувствует себя именно так и как можно изменить это состояние к лучшему.</p>
18 <p>Кроме того, в большинстве приложений отсутствует персонализированный подход. Приложения фиксируют данные, но не умеют предлагать актуальные советы, основанные на истории состояний конкретного пользователя. Пользователь остаётся один на один со своими записями, не получая обратной связи или поддержки.</p>
18 <p>Кроме того, в большинстве приложений отсутствует персонализированный подход. Приложения фиксируют данные, но не умеют предлагать актуальные советы, основанные на истории состояний конкретного пользователя. Пользователь остаётся один на один со своими записями, не получая обратной связи или поддержки.</p>
19 <p>Также важной проблемой является низкая визуализация данных. Даже если пользователь регулярно отмечает своё настроение, ему сложно отследить динамику, выявить корреляции (например, между настроением и сном или погодой), а значит - и сделать выводы. Отсутствие визуального календаря или графика демотивирует вести дневник, особенно если эффект непонятен и не виден сразу.</p>
19 <p>Также важной проблемой является низкая визуализация данных. Даже если пользователь регулярно отмечает своё настроение, ему сложно отследить динамику, выявить корреляции (например, между настроением и сном или погодой), а значит - и сделать выводы. Отсутствие визуального календаря или графика демотивирует вести дневник, особенно если эффект непонятен и не виден сразу.</p>
20 <p>В целом, можно выделить 3 ключевые проблемы:</p>
20 <p>В целом, можно выделить 3 ключевые проблемы:</p>
21 <ol><li>Сложность и непонятность - приложения перегружены, не интуитивны или требуют много времени на заполнение.</li>
21 <ol><li>Сложность и непонятность - приложения перегружены, не интуитивны или требуют много времени на заполнение.</li>
22 <li>Отсутствие аналитики и обратной связи - пользователь не получает персональных советов или выводов.</li>
22 <li>Отсутствие аналитики и обратной связи - пользователь не получает персональных советов или выводов.</li>
23 <li>Недостаток мотивации - низкий уровень визуального поощрения, отсутствие ачивок или помощника.</li>
23 <li>Недостаток мотивации - низкий уровень визуального поощрения, отсутствие ачивок или помощника.</li>
24 </ol><p>Эти проблемы делают попытки вести дневник настроения краткосрочными и неустойчивыми. Приложение, которое будет не только фиксировать эмоции, но и анализировать их, предлагать рекомендации, визуализировать путь пользователя и поддерживать геймификацией - решает все 3 задачи одновременно.</p>
24 </ol><p>Эти проблемы делают попытки вести дневник настроения краткосрочными и неустойчивыми. Приложение, которое будет не только фиксировать эмоции, но и анализировать их, предлагать рекомендации, визуализировать путь пользователя и поддерживать геймификацией - решает все 3 задачи одновременно.</p>
25 <h2>Цель работы</h2>
25 <h2>Цель работы</h2>
26 <p>Основной целью разработки стало создание мобильного Android-приложения, которое помогает пользователю отслеживать свое эмоциональное состояние, выявлять влияющие на него факторы и получать персонализированные советы для улучшения благополучия.</p>
26 <p>Основной целью разработки стало создание мобильного Android-приложения, которое помогает пользователю отслеживать свое эмоциональное состояние, выявлять влияющие на него факторы и получать персонализированные советы для улучшения благополучия.</p>
27 <p>Были поставлены следующие задачи:</p>
27 <p>Были поставлены следующие задачи:</p>
28 <ol><li>Создать удобный и быстрый интерфейс для регулярного заполнения дневника настроения. Интерфейс должен быть интуитивным, с минимальным количеством экранов и кликов. Пользователь должен иметь возможность за 1-2 минуты внести информацию о своём дне.</li>
28 <ol><li>Создать удобный и быстрый интерфейс для регулярного заполнения дневника настроения. Интерфейс должен быть интуитивным, с минимальным количеством экранов и кликов. Пользователь должен иметь возможность за 1-2 минуты внести информацию о своём дне.</li>
29 <li>Интегрировать визуальные элементы, помогающие видеть динамику состояния. Это включает календарь с цветовой индикацией эмоций по дням и график изменений настроения за месяц. Эти инструменты позволяют пользователю буквально "увидеть" свой путь и распознать закономерности.</li>
29 <li>Интегрировать визуальные элементы, помогающие видеть динамику состояния. Это включает календарь с цветовой индикацией эмоций по дням и график изменений настроения за месяц. Эти инструменты позволяют пользователю буквально "увидеть" свой путь и распознать закономерности.</li>
30 <li>Разработать систему категорий влияющих факторов, таких как сон, питание, погода, общение, привычки и др. Пользователь может выбирать релевантные факторы, тем самым формируя богатую и контекстную картину дня.</li>
30 <li>Разработать систему категорий влияющих факторов, таких как сон, питание, погода, общение, привычки и др. Пользователь может выбирать релевантные факторы, тем самым формируя богатую и контекстную картину дня.</li>
31 <li>Интегрировать ИИ-алгоритм анализа состояний на основе записей пользователя. Используя возможности GigaChat API от Сбер, приложение предлагает обратную связь - краткий анализ записей и советы, помогающие улучшить состояние. Это делает приложение интерактивным и персонализированным.</li>
31 <li>Интегрировать ИИ-алгоритм анализа состояний на основе записей пользователя. Используя возможности GigaChat API от Сбер, приложение предлагает обратную связь - краткий анализ записей и советы, помогающие улучшить состояние. Это делает приложение интерактивным и персонализированным.</li>
32 <li>Реализовать систему геймификации - ачивки, виртуальный помощник, напоминания, чтобы поддерживать регулярность и мотивацию пользователя.</li>
32 <li>Реализовать систему геймификации - ачивки, виртуальный помощник, напоминания, чтобы поддерживать регулярность и мотивацию пользователя.</li>
33 <li>Соблюдать принципы архитектуры Clean Architecture, MVVM и модульности. Проект должен быть технически устойчивым, масштабируемым и легко расширяемым. Это особенно важно с учетом планов по дальнейшему развитию - добавлению синхронизации с облаком, возможности делиться своими эмоциями с друзьями и созданию персональной статистики.</li>
33 <li>Соблюдать принципы архитектуры Clean Architecture, MVVM и модульности. Проект должен быть технически устойчивым, масштабируемым и легко расширяемым. Это особенно важно с учетом планов по дальнейшему развитию - добавлению синхронизации с облаком, возможности делиться своими эмоциями с друзьями и созданию персональной статистики.</li>
34 </ol><p>Таким образом, проект решает не только проблему фиксации настроения, но и ставит более амбициозную цель: помочь пользователю лучше понимать себя, находить внутренние связи между событиями и эмоциями, и действовать осознанно, улучшая качество жизни. </p>
34 </ol><p>Таким образом, проект решает не только проблему фиксации настроения, но и ставит более амбициозную цель: помочь пользователю лучше понимать себя, находить внутренние связи между событиями и эмоциями, и действовать осознанно, улучшая качество жизни. </p>
35 <h2>Ход работы</h2>
35 <h2>Ход работы</h2>
36 <p>Проект был реализован с применением современных подходов к архитектуре Android-приложений, следуя принципам Clean Architecture и MVVM (Model-View-ViewModel). Работа велась поэтапно - от проектирования моделей и интерфейсов до интеграции стороннего API и построения пользовательского интерфейса.</p>
36 <p>Проект был реализован с применением современных подходов к архитектуре Android-приложений, следуя принципам Clean Architecture и MVVM (Model-View-ViewModel). Работа велась поэтапно - от проектирования моделей и интерфейсов до интеграции стороннего API и построения пользовательского интерфейса.</p>
37 <h3>Архитектура и модульность</h3>
37 <h3>Архитектура и модульность</h3>
38 <p>Проект был разбит на логически обособленные Gradle-модули:</p>
38 <p>Проект был разбит на логически обособленные Gradle-модули:</p>
39 <ul><li>core - содержит общие утилиты, темы, расширения и базовые компоненты UI;</li>
39 <ul><li>core - содержит общие утилиты, темы, расширения и базовые компоненты UI;</li>
40 <li>data - реализация репозиториев, локального и удаленного хранилищ;</li>
40 <li>data - реализация репозиториев, локального и удаленного хранилищ;</li>
41 <li>domain - бизнес-логика в виде use case’ов и сущностей;</li>
41 <li>domain - бизнес-логика в виде use case’ов и сущностей;</li>
42 <li>(feature-модули) - экраны приложения: дневник, календарь, графики, настройки и др.</li>
42 <li>(feature-модули) - экраны приложения: дневник, календарь, графики, настройки и др.</li>
43 </ul><p>Это решение позволяет повысить читаемость, переиспользуемость и облегчить покрытие кода тестами.</p>
43 </ul><p>Это решение позволяет повысить читаемость, переиспользуемость и облегчить покрытие кода тестами.</p>
44 <h3>Моделирование данных</h3>
44 <h3>Моделирование данных</h3>
45 <p>Для описания пользовательской записи о дне была создана сущность DailyMoodEntry, включающая в себя:</p>
45 <p>Для описания пользовательской записи о дне была создана сущность DailyMoodEntry, включающая в себя:</p>
46 <ul><li>дату;</li>
46 <ul><li>дату;</li>
47 <li>основную оценку настроения (DayMoodRating);</li>
47 <li>основную оценку настроения (DayMoodRating);</li>
48 <li>список эмоций;</li>
48 <li>список эмоций;</li>
49 <li>параметры сна, питания, погоды;</li>
49 <li>параметры сна, питания, погоды;</li>
50 <li>привычки, общение и хобби;</li>
50 <li>привычки, общение и хобби;</li>
51 <li>комментарий пользователя.</li>
51 <li>комментарий пользователя.</li>
52 </ul><p>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</p>
52 </ul><p>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</p>
53 <p>Такая структура позволяет гибко и точно описывать каждый день пользователя, а в дальнейшем - анализировать его эмоциональные паттерны.</p>
53 <p>Такая структура позволяет гибко и точно описывать каждый день пользователя, а в дальнейшем - анализировать его эмоциональные паттерны.</p>
54 <h3>Интерфейсы и UI</h3>
54 <h3>Интерфейсы и UI</h3>
55 <p>Интерфейс разработан на базе Jetpack Compose с использованием Material 3. В работе над экраном дневника использовались:</p>
55 <p>Интерфейс разработан на базе Jetpack Compose с использованием Material 3. В работе над экраном дневника использовались:</p>
56 <ul><li>кастомные компоненты для выбора эмоций, сна, привычек и т.д.;</li>
56 <ul><li>кастомные компоненты для выбора эмоций, сна, привычек и т.д.;</li>
57 <li>BottomSheet для отображения опций и выбора;</li>
57 <li>BottomSheet для отображения опций и выбора;</li>
58 <li>Navigation Compose для управления навигацией между экранами;</li>
58 <li>Navigation Compose для управления навигацией между экранами;</li>
59 <li>StateFlow и ViewModel для управления состоянием.</li>
59 <li>StateFlow и ViewModel для управления состоянием.</li>
60 </ul><p>Также были реализованы:</p>
60 </ul><p>Также были реализованы:</p>
61 <ul><li>Календарь - с возможностью просмотра эмоций по дням. Используются иконки в кружках, цветовая индикация и листание месяцев.</li>
61 <ul><li>Календарь - с возможностью просмотра эмоций по дням. Используются иконки в кружках, цветовая индикация и листание месяцев.</li>
62 <li>График настроения - построен с использованием сторонней библиотеки MPAndroidChart, отображает уровень настроения по дням месяца, соединяя точки линией.</li>
62 <li>График настроения - построен с использованием сторонней библиотеки MPAndroidChart, отображает уровень настроения по дням месяца, соединяя точки линией.</li>
63 </ul><h3>Интеграция GigaChat API</h3>
63 </ul><h3>Интеграция GigaChat API</h3>
64 <p>Для анализа записей пользователя использовалось API от Сбер - GigaChat API. Алгоритм следующий:</p>
64 <p>Для анализа записей пользователя использовалось API от Сбер - GigaChat API. Алгоритм следующий:</p>
65 <ol><li>Из пользовательской записи формируется prompt, который включает дату, оценку и краткое описание.</li>
65 <ol><li>Из пользовательской записи формируется prompt, который включает дату, оценку и краткое описание.</li>
66 <li>Выполняется запрос через Retrofit к GigaChat API с авторизацией по токену.</li>
66 <li>Выполняется запрос через Retrofit к GigaChat API с авторизацией по токену.</li>
67 <li>Полученный ответ парсится в ChatCompletionResponse и отображается пользователю в виде краткого анализа.</li>
67 <li>Полученный ответ парсится в ChatCompletionResponse и отображается пользователю в виде краткого анализа.</li>
68 </ol><p>Интеграция происходила через suspend-методы, а для получения токена был реализован thread-safe TokenProvider.</p>
68 </ol><p>Интеграция происходила через suspend-методы, а для получения токена был реализован thread-safe TokenProvider.</p>
69 <p>kotlinCopyEditval encoded = Base64.encodeToString("$CLIENT_ID:$CLIENT_SECRET".toByteArray(), Base64.NO_WRAP)val token = authService.getAccessToken("Basic $encoded").accessToken</p>
69 <p>kotlinCopyEditval encoded = Base64.encodeToString("$CLIENT_ID:$CLIENT_SECRET".toByteArray(), Base64.NO_WRAP)val token = authService.getAccessToken("Basic $encoded").accessToken</p>
70 <h3>Настройки и кастомизация</h3>
70 <h3>Настройки и кастомизация</h3>
71 <p>Пользователь может:</p>
71 <p>Пользователь может:</p>
72 <ul><li>выбирать тему оформления (светлая/тёмная);</li>
72 <ul><li>выбирать тему оформления (светлая/тёмная);</li>
73 <li>получать напоминания;</li>
73 <li>получать напоминания;</li>
74 <li>видеть награды и достижения.<p>Все настройки сохраняются через DataStore Preferences.</p>
74 <li>видеть награды и достижения.<p>Все настройки сохраняются через DataStore Preferences.</p>
75 </li>
75 </li>
76 </ul><h3>Сложности и решения</h3>
76 </ul><h3>Сложности и решения</h3>
77 <p>Некоторые технические сложности, с которыми пришлось столкнуться:</p>
77 <p>Некоторые технические сложности, с которыми пришлось столкнуться:</p>
78 <ul><li>LazyColumn в BottomSheet - в некоторых версиях Compose проявлялись баги скроллинга. Было решено через кастомное ограничение высоты.</li>
78 <ul><li>LazyColumn в BottomSheet - в некоторых версиях Compose проявлялись баги скроллинга. Было решено через кастомное ограничение высоты.</li>
79 <li>Сохранение состояния при переключении экранов - решено с использованием rememberSaveable и ViewModel.</li>
79 <li>Сохранение состояния при переключении экранов - решено с использованием rememberSaveable и ViewModel.</li>
80 <li>Работа с токенами GigaChat - из-за требований API приходилось следить за актуальностью токена и использовать двойную проверку с блокировкой (synchronized).</li>
80 <li>Работа с токенами GigaChat - из-за требований API приходилось следить за актуальностью токена и использовать двойную проверку с блокировкой (synchronized).</li>
81 </ul><h3>Выводы</h3>
81 </ul><h3>Выводы</h3>
82 <p>Реализация приложения для трекинга настроения с элементами искусственного интеллекта позволила не только глубже понять принципы построения современных Android-приложений, но и на практике применить такие инструменты, как Clean Architecture, Jetpack Compose, а также сторонние API и библиотеки визуализации данных.</p>
82 <p>Реализация приложения для трекинга настроения с элементами искусственного интеллекта позволила не только глубже понять принципы построения современных Android-приложений, но и на практике применить такие инструменты, как Clean Architecture, Jetpack Compose, а также сторонние API и библиотеки визуализации данных.</p>
83 <h3>Что удалось достичь:</h3>
83 <h3>Что удалось достичь:</h3>
84 <ul><li>ФункциональностьПользователь получает интуитивно понятный интерфейс для ежедневного ввода настроения, эмоций, сна, активности, общения, питания и других аспектов. Это позволяет ему отслеживать динамику своего состояния и находить зависимости между образом жизни и эмоциональным фоном.</li>
84 <ul><li>ФункциональностьПользователь получает интуитивно понятный интерфейс для ежедневного ввода настроения, эмоций, сна, активности, общения, питания и других аспектов. Это позволяет ему отслеживать динамику своего состояния и находить зависимости между образом жизни и эмоциональным фоном.</li>
85 <li>Интеграция ИИИспользование GigaChat API позволило превратить обычный дневник настроений в интеллектуальный инструмент самоанализа. Генерация кратких обзоров дня помогает пользователю взглянуть на происходящее под новым углом.</li>
85 <li>Интеграция ИИИспользование GigaChat API позволило превратить обычный дневник настроений в интеллектуальный инструмент самоанализа. Генерация кратких обзоров дня помогает пользователю взглянуть на происходящее под новым углом.</li>
86 </ul><ul><li>ВизуализацияОтображение данных на календаре и в виде графиков даёт чёткое и визуально удобное представление о динамике. Пользователь может легко увидеть, какие периоды были особенно положительными или негативными.</li>
86 </ul><ul><li>ВизуализацияОтображение данных на календаре и в виде графиков даёт чёткое и визуально удобное представление о динамике. Пользователь может легко увидеть, какие периоды были особенно положительными или негативными.</li>
87 <li>Гибкость и масштабируемостьБлагодаря модульной архитектуре и соблюдению SOLID-принципов проект легко масштабировать. Например, можно добавить интеграцию с носимыми устройствами, расширить типы трекаемых данных или включить социализацию (например, делиться успехами с друзьями).</li>
87 <li>Гибкость и масштабируемостьБлагодаря модульной архитектуре и соблюдению SOLID-принципов проект легко масштабировать. Например, можно добавить интеграцию с носимыми устройствами, расширить типы трекаемых данных или включить социализацию (например, делиться успехами с друзьями).</li>
88 </ul><h2>Направления развития</h2>
88 </ul><h2>Направления развития</h2>
89 <p>Возможные будущие улучшения проекта:</p>
89 <p>Возможные будущие улучшения проекта:</p>
90 <ul><li>Рекомендательная система на базе ИИИспользуя собранные данные, можно реализовать персонализированные советы по улучшению состояния: например, рекомендации по сну, питанию, активности, привычкам.</li>
90 <ul><li>Рекомендательная система на базе ИИИспользуя собранные данные, можно реализовать персонализированные советы по улучшению состояния: например, рекомендации по сну, питанию, активности, привычкам.</li>
91 <li>Награды и геймификацияВведение системы достижений за регулярное заполнение дневника и положительную динамику поможет мотивировать пользователей.</li>
91 <li>Награды и геймификацияВведение системы достижений за регулярное заполнение дневника и положительную динамику поможет мотивировать пользователей.</li>
92 <li>Синхронизация между устройствами и облачное хранилищеПоддержка входа в аккаунт, синхронизация записей и восстановление истории при смене телефона.</li>
92 <li>Синхронизация между устройствами и облачное хранилищеПоддержка входа в аккаунт, синхронизация записей и восстановление истории при смене телефона.</li>
93 </ul><ul><li>Анализ долгосрочных трендовГрафики за неделю, месяц, квартал с аналитикой и сводками на базе данных пользователя.</li>
93 </ul><ul><li>Анализ долгосрочных трендовГрафики за неделю, месяц, квартал с аналитикой и сводками на базе данных пользователя.</li>
94 </ul><h2><strong>Заключение</strong></h2>
94 </ul><h2><strong>Заключение</strong></h2>
95 <p>Данный проект стал полноценной лабораторией для оттачивания навыков в Android-разработке, архитектуре приложений, интеграции API и построении качественного пользовательского интерфейса. Полученный результат - это не просто учебная работа, а реальный цифровой инструмент, способный помочь людям стать внимательнее к своему эмоциональному состоянию и улучшить качество жизни.</p>
95 <p>Данный проект стал полноценной лабораторией для оттачивания навыков в Android-разработке, архитектуре приложений, интеграции API и построении качественного пользовательского интерфейса. Полученный результат - это не просто учебная работа, а реальный цифровой инструмент, способный помочь людям стать внимательнее к своему эмоциональному состоянию и улучшить качество жизни.</p>
96  
96