Skip to content

Svechnikov/TJgram

Repository files navigation

TJgram

Приложение для просмотра постов в TJgram.

Главный экран

При первом запуске посты загружаются с бэкенда, после чего кэшируются в базе данных Room (для обновления нужно потянуть SwipeRefreshLayout). Посты загружаются по 10 штук (реализована "бесконечная" прокрутка при помощи PagedList и RecyclerView). За общение с бэкендом отвечают Retrofit и OkHttp. Десериализацией данных занимается Gson. Посты сгруппированы по вкладкам - новые, лучшие за неделю/месяц/год.

Пост может содержать как фото, так и видео. Посты можно оценивать. Оценки обновляются в режиме реального времени (при помощи WebSocket, который запускается из ViewModel MainActivity).

Видео в посте начинает воспроизводиться автоматически при скролле, позиция видео сохраняется и при возврате видео начинает воспроизводиться с последней позиции. Видео воспроизводится зацикленно. Используется ExoPlayer (один инстанс на всё приложение). Чтобы продемонстрировать воспроизведение, было изменено значение subsite_id с 214362 на 214360 (т.к. на подсайте TJgram не было видео).

Можно добавлять свои посты, для этого нужно выбрать одну из фотографий на внешнем хранилище и придумать заголовок с описанием. Для получения локальных фотографий используется ContentProvider. Также фотографию можно сделать прямо в приложении - используется Camera для sdk < 21 и Camera2 для всех остальных.

Чтобы добавлять свои посты и оценивать чужие, нужно авторизоваться. QR-код распознаётся при помощи библиотеки code-scanner.

Навигация реализована при помощи Android Navigation Components. Используется одна базовая host Activity, внутри которой располагаются фрагменты. Ответственность фрагментов - UI и permissions, вся остальная логика вынесена в ViewModels и UseCases.

Приложение использует 2 "dangerous permissions" - доступ к камере (для снимка QR-кода) и доступ к файлам на внешнем хранилище (для добавления поста). Оба раза разрешения запрашиваются непосредственно перед тем моментом, когда они будут нужны. Вдальнейшем, если их отключить, приложение будет работать нормально.

В разработке использовался подход Clean Architecture + MVVM.

Использованы следующие технологии:

  • Kotlin
  • Dagger2
  • AndroidX (в частности, Architecture Components, Paging library и Navigation Components)
  • DataBinding
  • Retrofit2 + OkHttp + Gson
  • Picasso
  • ExoPlayer2
  • Coroutines
  • Немного RxJava

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Packages

No packages published