Skip to content
This repository has been archived by the owner on Dec 18, 2024. It is now read-only.

mvnh/Nto-mobilka

 
 

Repository files navigation

Android Studio version

НТО 2024. II отборочный этап. Командные задани — клиентская часть

📖 Предыстория

В компании S контроль доступа в офис осуществляется с помощью СКУД (системы контроля управления доступом). На данный момент у каждого сотрудника компании есть карта-пропуск с NFC меткой. А у каждой входной двери есть считыватель с обеих сторон. При поднесении карты к считывателю, дверь открывается, а информация о времени входа или выхода сотрудника фиксируется в базе данных. Администрации компании S требуется мобильное приложение, как для рядовых сотрудников, так и для администрации с возможностью просмотра посещений и работой электронного пропуска как временной замены обычного (при помощи сканировании QR кода, который находится на считывателе). Поскольку в приложении есть возможность использовать телефон как пропуск - то к данному приложению повышенные требования к безопасности всех данных, находящихся внутри него.

📋 Системные требования

Параметр Требование
Минимальная версия Android 9.0 (API 28)
Целевая версия Android 14 (API 34)
Поддерживаемые устройства смартфоны, планшеты
Ориентация экранов портретная
Языки русский, английский
Разрешения доступ к интернету, камера (при необходимости)

📱 Техническое задание

Требуется разработать нативное мобильное приложение, которое будет содержать следующие экраны.

1. Экран авторизации

Данный экран должен быть показан при первом входе в приложение, а также в ситуациях, когда пользователь не зарегистрировался в приложении.

Элементы, которые должны присутствовать на экране:

  • Поле ввода (id/username), в котором пользователю необходимо ввести свой логин.
  • Кнопка входа (id/login), по нажатию на которую пользователь авторизуется в системе.
  • По умолчанию скрытое (GONE) текстовое поле с ошибкой (id/error).

Требования к компонентам:

  1. В пустом поле ввода должна отображаться подсказка, что требуется ввести пользователю.
  2. Если хотя бы одно из условий ниже соблюдено - кнопка должна быть неактивной:
    • Поле ввода пустое.
    • Количество символов менее 3х.
    • Логин начинается с цифры.
    • Логин содержит символы, отличные от латинского алфавита и цифр.
  3. Поле ввода и кнопку должно быть видно при раскрытии клавиатуры.
    • При нажатии на кнопку входа необходимо проверить, что данный пользователь существует с помощью запроса api/<LOGIN>/auth (подробное описание представлено в техническом задании серверной части).
  4. В случае отсутствия логина или любой другой неполадки - необходимо вывести ошибку, пока пользователь не изменит текстовое поле или повторно не нажмёт на кнопку.
  5. После нажатия на кнопку - логин должен быть сохранён и при следующем открытии приложения экран авторизации не должен быть показан.
  6. После нажатия на кнопку - при нажатии стрелки назад - экран авторизации не должен быть показан повторно.
  7. Экран авторизации показывается только в случае, если пользователь неавторизован.

2. Главный экран

Данный экран содержит общую информацию о пользователе:

  • ФИО
  • Фото
  • Должность
  • Время последнего входа

Элементы, которые должны присутствовать на экране:

  • Текстовое поле (id/fullname), в котором написано имя пользователя.
  • Изображение (id/photo), на котором отображено фото пользователя.
  • Текстовое поле (id/position), в котором написана должность пользователя.
  • Текстовое поле (id/lastEntry), в котором написана дата и время последнего входа пользователя.
  • Кнопка (id/logout) для выхода пользователя из аккаунта.
  • Кнопка (id/refresh) для обновления данных.
  • Кнопка (id/scan) для сканирования QR кода.
  • По умолчанию скрытое текстовое поле с ошибкой (id/error).

Требования к компонентам:

  • В случае любой ошибки необходимо скрыть все элементы, кроме текстового поля с ошибкой и кнопки обновления данных.
  • Для получения данных необходимо использовать сетевой запрос /api/<LOGIN>/info.
  • Формат даты и времени последнего входа пользователя: yyyy-MM-dd HH:mm (например: 2024-02-31 08:31). Время необходимо отображать с сервера, без поправок на часовой пояс или локальное смещение.
  • При нажатии на кнопку выход все данные (если есть) пользователя должны быть очищены, а приложение должно открыть экран авторизации.
  • При нажатии кнопки сканирования необходимо открыть экран сканирования QR кода.
  • При нажатии на кнопку обновления данных - необходимо повторно вызывать сетевой запрос для получения актуальных данных.

3. Экран сканирования QR-кода

Данный экран позволяет отсканировать код на турникете и войти с помощью смартфона. В данном случае данный экран будет уже написан и представлен dам в готовом виде в заготовке. Вам необходимо только подписаться на его результат с помощью Result API и обработать считанные данные из QR кода. Данный экран нельзя модифицировать. Он поставляется как есть.

4. Экран с результатом сканирования QR кода

На данном экране необходимо вывести успешность или неуспешность входа с помощью метода QR кода.

Элементы, которые должны присутствовать на экране:

  • Текстовое поле (id/result), где содержится текст об успешности или неуспешности входа.
  • Кнопка (id/close) для закрытия данного экрана.

Требования к компонентам:

  • В случае, если результат пришёл пустым или со статусом “Отмена” - необходимо вывести пользователю текст:
    "Вход был отменён/Operation was cancelled"
  • В случае, если данные пришли, то необходимо их отправить на сервер с запросом api/<LOGIN>/open, добавив данные из результата и получить ответ.
  • Если сервер ответил успешно - то отображаем текст:
    "Успешно/Success"
  • Если сервер ответил любой ошибкой - то отображаем текст:
    "Что-то пошло не так/Something wrong"
  • Кнопка закрытия всегда открывает главный экран.

🛠 Решение

Необходимо загрузить свое решение в систему по ссылке.

Отметим, что работу необходимо осуществлять в представленных проектах-заготовках (шаблонах).

✅ Особенности оценивания

Оценивание происходит с помощью автоматической системы тестирования, которая в автоматическом режиме находит элементы и взаимодействует с ними (именно для этого у каждого элемента указан уникальный идентификатор, по которому будет производится поиск). Каждый тест происходит с чистой установки приложения. В случае тестирования сервера на него поочередно отправляются команды, описанные в API и ожидаются определенные корректные ответы. Сервер и приложение тестируются независимо.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Kotlin 100.0%