Требуется написать мобильное приложение для демонстрации погодных условий конкретного города. Приложение обязательно должно запускаться на ОС Android, однако реализовано оно может быть на удобном языке программирования кандидату из предложенных: Kotlin или Java.
Общие критерии
-
Архитектура мобильного приложения
В связи с тем, что ваше приложение может в дальнейшем расширятся и иметь дополнительный функционал, оно должно быть написано с понятным устройством элементов мобильного приложения, позволяющим в дальнейшем масштабировать и оптимизировать приложение без лишней работы.
-
Внешний вид
Необходимо продумать дизайн мобильного приложения, составить его так, чтобы контентом было удобно пользоваться. Желательно опираться на современные инструкции дизайнов мобильных приложений от компании Google.
-
Адаптивность
Сегодня абсолютно большая часть трафика идет с мобильных устройств, однако ОС Android работает на множестве устройствах с разными размерами и форм факторами. В связи с этим ваше приложение должно корректно отображаться на максимальном количестве экранов.
-
Инструкции по запуску
Вместе с вашим проектом необходима инструкция, которая позволит развернуть ваше решение на эмуляторе или реальном устройстве другого разработчика или тестировщика. Необходимо указать, какая версия ОС необходимо для работы с проектом, какие разрешения необходимо выдать для запуска проекта, если это нужно делать вручную, а также другую всевозможную информацию, которую необходимо знать для успешного запуска разработанного приложения.
Требования для разрабатываемого мобильного приложения
Все данные, непосредственно наполнение, необходимо брать с открытого API, расположенного на сайте https://openweathermap.org/api.
Приложение должно быть полностью русифицировано.
Первый уровень
Необходимо создать простое мобильное приложение, общающееся со сторонним открытым API и демонстрирующее погоду на ближайшие 7 дней для введенного в поля для ввода города. Если у мобильного приложения нет на момент ввода названия подключения к сети, то приложение должно предупредить пользователя о необходимости такого подключения.
Города из поиска можно сохранять в приложении на экран со списком городов и короткой информацией о погоде в этом городе. Каждый город можно открыть как выпадающий список или expandable/colapsable view и посмотреть детальную информацию о метеоданных в этом городе.
Элемент отдельного города должен давать возможность перейти на карты Яндекс/Google для отображения местонахождения города. Пользователь должен сам выбрать какой именно тип карт он хочет использовать.
Все данные экранов должны кэшироваться внутри жизненного цикла приложения и при отсутствии доступа к сети интернет, при открытии приложения, экраны не должны быть пусты. (предпочтителен LiveData и Room)
Используйте Material Design и его концепции при проектировании решения
Рекомендуется строить решение на архитектуре MVVM, следуя основным гайдам Google по Architecture Components.
Используйте View/Data Bindings для работы с элементами экрана.
Второй уровень
На втором уровне необходимо добавить возможность авто определения местоположения пользователя по GPS модулю, встроенному в устройство. Так же необходимо оставить получение погоды по интересующему городу, однако приложение должно помогать пользователю при вводе названия при помощи подсказок названий городов по введенному значению.
По выбраному городу из списка с погодой отображайте Weather Map карту, с детализацией погоды в виде карты осадков. Карта должна открываться в масштабе города. Размещение элемента и механизм отображения остается за вами.
Приложение обязано строиться на последних принятых стандартах архитектуры мобильных приложений.
Сделайте настраиваемый механизм оповещений, который позволяет пользователю выставить когда он хотел бы получать уведомления о состоянии погоды на выбранное время срабатывания. Оповещение обязано выводиться даже если приложение закрыто.
Все переходы между экранами должны быть анимированны, хотя бы стандартными анимациями которые уже есть в material design.
Третий уровень
В связи с тем, что мобильное приложение редко разрабатывается без ошибок, то важным этапом разработки является тестирование. Для выполнения третьего уровня от кандидата требуется создание тестов мобильного приложения, а именно тестирование пользовательского интерфейса приложения и тестирование отдельного функционала приложения, в особенности общение со сторонним API. Для разработки тестов пользовательского интерфейса необходимо работать не с данными от стороннего сервиса, а с Mock данными, или данными «заглушками», в угоду скорости работы тестов.
Так же ваше приложение должно использовать Dependency Injection.