Copy/silent fork of Team Project of myself and MrVSV: https://github.com/MrVSV/unsplash-homework for further improvements. Android Kotlin application with Unsplash API. Full support of Russian and English locales.
Onboarding:
Authorization, search, like/unlike, user profile:
Detailed photo screen. Show photo location on Google Maps. Download photo (made with Download Manager) and open it directly from the snackbar. Share link on photo.
Unsplash users' collections screen:
Общая информация
Приложение для популярного сервиса с фотографиями Unsplash.
Позволяет смотреть фотографии, коллекции фотографий.
Позволяет лайкать и скачивать понравившиеся фотографии.
Обрабатываются состояния экранов («Ошибка»/«Лоадинг»/«Пусто»).
Добавлена иконка.
Приложение имеет минимум два языка: русский и английский.
Приложение может работать в любой ориентации: ландшафтной и портретной (отдельного дизайна для ландшафтной ориентации нет, использовать дизайн от портретной).
Приложение должно выглядеть похоже на экранах с различной плотностью и размерами.
Основная часть приложения доступна после авторизации с помощью аккаунта Unsplash (необходимо зарегистрироваться).
В основной части три раздела в bottom navigation menu: «Фотографии», «Коллекции», «Пользователь».
Общее описание API.
Target sdk = 30.
Min sdk = 21.
Подготовить приложение к релизу.
Сценарии использования
Хочу ознакомиться с основными функциями приложения на экране онбординга
Онбординг отображается сразу при первом запуске приложения.
Хочу авторизоваться
Экран авторизации отображается всегда следующим экраном после онбординга.
Пользоваться приложением без авторизации нельзя.
API
Аутентификация
Удостоверьтесь, что вы запрашиваете все требуемые scope во время авторизации.
Требуемые скоупы описаны в документации к методам API.
Хочу посмотреть список фотографий
Для каждой фотографии в списке отобразить картинку, лайк от текущего пользователя (или отсутствие лайка), общее количество лайков, создателя фотографии (имя/аватар).
Для списка есть пагинация.
Список кешируется в БД.
В случае отсутствия соединения с сетью отобразить закешированные фотографии из БД с оповещением пользователя.
API
Хочу посмотреть детальную информацию о фотографии
При нажатии на фотографию пользователь переходит на экран детальной информации фотографии.
Пользователь видит расширенную информацию:
Фотография.
Exif.
Локация (по нажатию на локацию открыть её в приложении с картами на устройстве).
Теги.
Информация об авторе.
Количество скачиваний.
Количество лайков.
Лайк от меня.
Кнопка «Скачать».
API
Хочу поделиться ссылкой на фотографию
На экране с детальной информацией по фото можно нажать на кнопку «Поделиться» в тулбаре.
В этот момент генерируется ссылка вида https://unsplash.com/photos/<photo_id>, которая может быть расшарена в другие приложения.
API не требуется, ссылка генерируется на клиенте.
Хочу открыть ссылку на фотографию в приложении
В приложении должна быть возможность поддержать открытие ссылок вида https://unsplash.com/photos/<photo_id>.
В этом случае должен открываться экран с детальной информацией по фото с указанным ID.
API не требуется.
Хочу скачать фотографию на устройство
По нажатию на кнопку «Скачать» на экране детальной информации о фотографии необходимо скачать фотографию в исходном качестве на устройство и сохранить в общедоступное место на диске.
В случае отсутствия сети отложить скачивание до момента появления сети и автоматически скачать фотографию позже.
По окончании загрузки показать snackbar, по нажатию на который откроется просмотр фотографии на устройстве с помощью внешнего приложения.
Если фотография загружалась в фоне, то показать оповещение после успешной загрузки.
По нажатию на оповещение открывается просмотр фотографии на устройстве с помощью внешнего приложения.
API
Скачать фотографию ― фотографию в исходном качестве можно получить из поля photo.urls.raw
Отслеживание загрузки фотографии
Хочу лайкнуть фотографию
На экране с детальной информацией и списке фото пользователь может поставить лайк фотографии и убрать лайк, если он уже стоит. В таком случае должны дополнительно обновиться счётчики лайков.
Операция производится только при наличии доступа в интернет.
API
Поставить лайк
Убрать лайк
Хочу найти фотографию
На списке фотографий есть элемент поиска в тулбаре. По нажатию на элемент поиска он превращается в поле для ввода.
Поиск реализовать либо на экране со списком, либо на отдельном экране, который будет открываться по нажатию на лупу поиска.
API
Хочу посмотреть список коллекций
По нажатию на таб с коллекциями фотографий открыть список коллекций фотографий.
Поведение списка аналогично списку фотографий.
По возможности ― кешировать информацию о полученных коллекциях.
API
Хочу посмотреть список фотографий в коллекции
По нажатию на коллекцию открыть экран с детальной информацией по коллекции и списком фотографий по коллекции.
По нажатию на фото можно открыть экран детальной информации.
По возможности ― кешировать информацию о полученных фотографиях в коллекции.
API
Фотографии коллекции
Коллекция
Хочу посмотреть свой профиль и понравившиеся мне фотографии
На вкладке с профилем вывести доступную информацию о текущем пользователе при наличии информации о местоположении.
Его можно посмотреть на карте во внешнем приложении.
API
Информация обо мне
Лайкнутые фотографии
Хочу выйти из профиля
При нажатии на кнопку выхода в профиле появляется диалог: «Вы уверены, что хотите выйти? Все локальные данные будут удалены.».
Если пользователь подтверждает, то происходит логаут и удаление всех локальных данных приложения.
Сразу после очистки и при последующих запусках приложения открывается экран авторизации.
API не требуется.
Материалы для работы
Прототип в Figma
Готовый проект проверяется по следующим критериям:
Пользователю доступны для использования основные функции Android-приложения.
Экраны отображается корректно, в соответствии с описанием функциональных возможностей.
В приложении корректно работает просмотр изображений.
Критерии оценки:
«Не зачтено» — требования к программе выполнены частично.
«Зачтено» — выполнены все требования к программе.