##Тестовое задание для летней школы мобильной разработки.
###Задание Напишите приложение для платформы Android на языке Java. Чтобы вам было легче, мы подготовили примерный вид экранов тестового приложения и набор данных.
Минимальная функциональность:
-
На первом экране нужно показать список имен исполнителей популярной музыки.
-
На следующем экране — подробную информацию о выбранном исполнителе.
-
Исходные данные приложение получает по сети в формате JSON. JSON доступен по ссылке: json link.
###Реализация
-
Поддержка разных экранов и ориентаций
Я реализовал несколько layout файлов, которые выводят данные для разных экранов по-разному, плюс, на больших экранах данные выводятся не списком, а таблицей.
-
Кэширование данных и изображений
Приложение использует OkHttpClient как стандартный Http-клиент, в котором я реализовал кэширование полученных данных. Его, в свою очередь, используют Retrofit и Picasso, что позволяет кэшировать и данные и изображения.
-
Анимация
Для анимаций я использовал стандартные Transitions Animation. Работают только на SDK>=21
-
Тесты
Так же написано несколько unit-тестов, проверяющих работы презентеров, модели и адаптера. И ui-тесты, проверяющие в целом работу интерфейса.
-
Комментарии
Код покрыт комментариями практически полностью. В очевидных моментах я их опустил.
Я реализовал данное приложение с помощью архитектуры MVP + Dagger 2. Загрузкой данных сервера занимается связка Retrofit + RxJava, а загрузка изображений осуществляется с помощью Picasso. Состоянием экранов занимается Presenter, данные с экрана сохраняются в onSaveInstanse, а потом восстанавливаются в onCreate. Я хотел реализовать сохранение состояния экрана с помощью этого метода, но для такого небольшого приложения он мне показался слишком громоздким. Так же рассмативал вариант использования кастомных View, вместо фрагментов и пр, но решил остановиться на варианте с двумя активити, хотя, в таком подходе есть минус - без повторения кода, не получится реализовать экран для альбомной ориентации на планшете. В итоге, отказался от этой затеи, ввиду окончания сроков подачи заявки.
###Использованные библиотеки
####Для работы приложения: ButterKnife
####Для unit-тестов:
####Для ui-тестов:
###Ссылка на APK файл