В компании S контроль доступа в офис осуществляется с помощью СКУД (системы контроля управления доступом). На данный момент у каждого сотрудника компании есть карта-пропуск с NFC меткой. А у каждой входной двери есть считыватель с обеих сторон. При поднесении карты к считывателю, дверь открывается, а информация о времени входа или выхода сотрудника фиксируется в базе данных. Администрации компании S требуется мобильное приложение, как для рядовых сотрудников, так и для администрации с возможностью просмотра посещений и работой электронного пропуска как временной замены обычного (при помощи сканировании QR кода, который находится на считывателе). Поскольку в приложении есть возможность использовать телефон как пропуск - то к данному приложению повышенные требования к безопасности всех данных, находящихся внутри него.
Параметр | Требование |
---|---|
Минимальная версия Android | 9.0 (API 28) |
Целевая версия Android | 14 (API 34) |
Поддерживаемые устройства | смартфоны, планшеты |
Ориентация экранов | портретная |
Языки | русский, английский |
Разрешения | доступ к интернету, камера (при необходимости) |
Требуется разработать нативное мобильное приложение, которое будет содержать следующие экраны.
Данный экран должен быть показан при первом входе в приложение, а также в ситуациях, когда пользователь не зарегистрировался в приложении.
- Поле ввода (
id/username
), в котором пользователю необходимо ввести свой логин. - Кнопка входа (
id/login
), по нажатию на которую пользователь авторизуется в системе. - По умолчанию скрытое (
GONE
) текстовое поле с ошибкой (id/error
).
- В пустом поле ввода должна отображаться подсказка, что требуется ввести пользователю.
- Если хотя бы одно из условий ниже соблюдено - кнопка должна быть неактивной:
- Поле ввода пустое.
- Количество символов менее 3х.
- Логин начинается с цифры.
- Логин содержит символы, отличные от латинского алфавита и цифр.
- Поле ввода и кнопку должно быть видно при раскрытии клавиатуры.
-
- При нажатии на кнопку входа необходимо проверить, что данный пользователь существует с помощью запроса
api/<LOGIN>/auth
(подробное описание представлено в техническом задании серверной части).
- При нажатии на кнопку входа необходимо проверить, что данный пользователь существует с помощью запроса
- В случае отсутствия логина или любой другой неполадки - необходимо вывести ошибку, пока пользователь не изменит текстовое поле или повторно не нажмёт на кнопку.
- После нажатия на кнопку - логин должен быть сохранён и при следующем открытии приложения экран авторизации не должен быть показан.
- После нажатия на кнопку - при нажатии стрелки назад - экран авторизации не должен быть показан повторно.
- Экран авторизации показывается только в случае, если пользователь неавторизован.
Данный экран содержит общую информацию о пользователе:
- ФИО
- Фото
- Должность
- Время последнего входа
- Текстовое поле (
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 кода.
- При нажатии на кнопку обновления данных - необходимо повторно вызывать сетевой запрос для получения актуальных данных.
Данный экран позволяет отсканировать код на турникете и войти с помощью смартфона. В данном случае данный экран будет уже написан и представлен dам в готовом виде в заготовке. Вам необходимо только подписаться на его результат с помощью Result API и обработать считанные данные из QR кода. Данный экран нельзя модифицировать. Он поставляется как есть.
На данном экране необходимо вывести успешность или неуспешность входа с помощью метода QR кода.
- Текстовое поле (
id/result
), где содержится текст об успешности или неуспешности входа. - Кнопка (
id/close
) для закрытия данного экрана.
- В случае, если результат пришёл пустым или со статусом “Отмена” - необходимо вывести пользователю текст:
"Вход был отменён/Operation was cancelled" - В случае, если данные пришли, то необходимо их отправить на сервер с запросом
api/<LOGIN>/open
, добавив данные из результата и получить ответ. - Если сервер ответил успешно - то отображаем текст:
"Успешно/Success" - Если сервер ответил любой ошибкой - то отображаем текст:
"Что-то пошло не так/Something wrong" - Кнопка закрытия всегда открывает главный экран.
Необходимо загрузить свое решение в систему по ссылке.
Отметим, что работу необходимо осуществлять в представленных проектах-заготовках (шаблонах).
Оценивание происходит с помощью автоматической системы тестирования, которая в автоматическом режиме находит элементы и взаимодействует с ними (именно для этого у каждого элемента указан уникальный идентификатор, по которому будет производится поиск). Каждый тест происходит с чистой установки приложения. В случае тестирования сервера на него поочередно отправляются команды, описанные в API и ожидаются определенные корректные ответы. Сервер и приложение тестируются независимо.