Мобильное приложение для бронирования отелей на платформе Android.
Стек: Kotlin, Retrofit2, Hilt, Picasso, Jetpack Navigation, Kotlin Coroutines
- "Отель" - на экране отображаются основные данные об отеле и кнопка, при нажатии на которую осуществляется переход на экран «Номер»,
- "Номер" - содержит список номеров, с возможностью «Выбрать номер»,
- "Бронирование" - заполняется все необходимая информация для оплаты брони,
- "Оплачено" - открывается при успешном сценарии на экране «Бронирование» с номером заказа.
При запуске приложения начальным экраном будет «Отель». Первым элементом является карусель изображений, которая при свайпе вправо/влево перелистывает фотографии. Далее указывается вся подробная информация об гостинице. При нажатии на кнопку "К выбору номера" происходит переход на следующий экран.
Экран состоит из списка номеров. В навигационной панели указано название отеля откуда мы перешли. Кнопка назад возвращает на начало. При нажатии на «Выбрать номер» осуществляется переход на один и тот же экран «Бронирование».
При открытии появляются: главное об отеле и данные бронирования (например, направление трансфера и кол-во ночей). В блоке с информацией о покупателе необходимо заполнить обязательные поля с телефоном и почтой. При нажатии на поле номера телефона отрабатывает автоматическая маска с шаблоном +7 (**) -- и при вводе номера числа подставляются в шаблон. Почта проходит валидацию по стандартному шаблону. Пользователь, выйдя из режима ввода, хочет заполнить остальную информацию и если ввод был некорректным, поле окрашивается другим цветом.
Далее необходимо заполнить всю информацию о «Первом туристе». Если пользователь захочет добавить еще одного туриста, то нажимает на «Добавить туриста» и добавляется еще одна вкладка с названием «Второй турист», еще одного «Третий турист» и так далее. Вкладки скрываются и раскрываются.
Экран открывается при успешном сценарии на «Бронирование» при нажатии на «Оплатить». При клике на «Супер!» осуществляется переход в начало – «Отель». Либо пользователь может вернуться назад, нажав на кнопку в навигационной панели. Номер заказа указывается рандомно.
Retrofit2
Для взаимодействия с REST API используется библиотека Retrofit2. Библиотека достаточно проста в использовании, имеет понятную документацию и используется многими разработчиками. Retrofit2 поддерживает асинхронную работу. Для обработки простых запросов с JSON объектами в рамках данной задачи подходит отлично.
Hilt
Библиотека внедрения зависимостей Hilt построена на основе Dagger и позволяет использовать ее преимущество в упрошенной форме. Hilt интегрирован с библиотеками Android Jetpack. Будучи простой в настройке библиотека Hilt отлично подходит для данного проекта.
Примечание: В ТЗ было рекомендовано использовать Dagger или Koin, но большинство проектов выполнял с помощью Hilt и поэтому, чтобы уложиться в отведенное время, выбрал привычную библиотеку. С работой Dagger2 знаком.
Picasso
Мощная библиотека загрузки и кэширования изображений для Android. Картинка кэшируется и при повторном запросе на скачивание Picasso может достать ее из кэша, а не скачивать из интернета, что ускоряет работу приложения. Выбрана основываясь на личных предпочтениях.
Jetpack's Navigation
Для навигации использовался Android Jetpack's Navigation.
Kotlin Coroutines
Асинхронная работа реализована с помощью Coroutines. Coroutines являются частью языка Kotlin и рекомендованы для асинхронного программирования на Android.