Приложение для просмотра постов в 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