Паттерн выбора телефона
Проектируя сценарий «Перевод физлицу через СБП» выяснилось, что в приложении встречаются сценарии с идентичной функциональностью. В силу некоторых обстоятельств эти сценарии могут быть реализованы радикально по-разному.
Чтобы не делать еще один сценарий, который будет реализован энным способом, было решено задизайнить и описать паттерн, который позволит унифицировать все имеющиеся и будущие сценарии по выбору телефона.
Начинается все с точек вызова справочника. Вызвать справочник можно было по кнопке и по инпуту. Если с кнопкой не так интересно, то вот в инпуте была проблема.
Для инпута существовал компонент Input Phone с иконкой ui / People. В одних кейсах, у компонента была одна кликабельная зона, которая вызывала справочник. В других — было две кликабельные зоны: часть поля до иконки и сама иконка. Левая часть вызывала числовую клавиатуру, а иконка открывала окно со справочником контактов:
Мы избавились от двоякого толкования и теперь все поле имеет одну кликабельную зону:
Permissions
При первом открытии справочника надо запросить пермишены. Делаем это ненавязчиво. А для тех, у кого уже были какие-то переводы, показываем список популярных, построенных на PAM-фразе:
Отображение справочника
Когда пермишены получены, мы даем дизайнерам два варианта на построение списка: по алфавиту и по популярности.
В варианте «по алфавиту» осуществляется группировка контактов по первому символу слова и имеет символьную сортировку:
- цифры
- русские буквы
- англ буквы
- спецсимволы
Группировка нечувствительна к регистру, т. е., значения Михаил и михаил попадут в одну группу.
Для группировки цифровых значений предусмотрен знак решетки #, а для спецсимвольных — амперсанд &.
Популярность телефонов предложили ранжировать на основании истории переводов за последние 90 дней.
На ранжирование влияет несколько параметров:
- давность перевода
- количество переводов
Чем раньше, относительно текущей даты, был сделан перевод, тем выше значение в справочнике. После сравнения давности перевода, выполнять проверку количества переводов, чем их больше, тем выше значение в справочнике.
Группировка контакта
Если у контакта несколько подходящих телефонных номеров, то рядом с телефоном выводить счетчик номеров. Склонять слово «номер» в соответствии со счетчиком:
Тап по такому элементу вызывает Action Sheet со списком номеров:
Если у пользователя 2 контакта с одинаковыми именами заведены отдельно, то в справочнике они тоже отображаются отдельно:
Контакты без имени
Иногда встречаются контакты без имени, в этом случае первый пришедший телефон становится крупнее, а сами контакты попадают в группу «цифры»:
Выбор значения
Значения в телефонной книге кликабельны.
Если экран был вызван из поля Input Phone, то по тапу, окно телефонной книги закрывается, а выбранное значение заполняется в поле «Телефон получателя».
Если значение было в телефонной книге, то поле получает новое название. Теперь оно соответствует названию выбранного значения, а если не было в списке, то название поля не меняется:
Поиск
Алгоритм поиска типовой и подходит ко всем справочникам сразу, поэтому он был вынесен в отдельный паттерн.
Если у пользователя есть доступ к телефонной книге, то при переходе в справочник мы по умолчанию ставим фокус в поле.
Снятие фокус можно несколькими способами:
- если тапнуть по неактивному месту
- если проскроллить листинг значений
- нажать на кнопку «Отменить»
Если в процессе поиска не нашлось совпадения и значение в поле поиска не похоже на телефон, то выводить сообщение «Получатель не найден»:
Если в процессе поиска не нашлось совпадения, но значение в поле поиска похоже на телефон, то форматировать такое значение по маске и предлагать его к выбору.
Какие значения считать похожими на российский номер телефона?
- Любая комбинация из 10 цифр, если она начинается не на 7.
- Любая комбинация из 11 цифр начинающаяся с 7 или 8.
Если пользователь использует при наборе символы и знаки препинания, то позволять их вводить, но игнорировать при определении номера. Так мы сможем распознать все многообразие значений, которое может к нам прийти через копипасту:
Если значение в поле поиска похоже на телефон, но полностью не удовлетворяет принципам похожести и похожее значение не было найдено в справочнике, то оставлять зону результатов поиска пустой:
Команда
- Михаил Шамин, дизайнер
- Дмитрий Ганявин, аналитик
- Иван Соколовский, андроид-разработчик
Релиз
Что ещё
- Развитие библиотеки компонентов
- Лендинг для сервиса «Топливо»
- Цифровой рубль
- Программа рефакторинга дизайн-системы
- Услуга «Кодовое слово»
- Рефакторинг сценария «Перевод физлицу через СБП»
- Алгоритм поиска по справочникам
- Рефакторинг ленты операций СБП
- Концепт окна для смены тарифного плана
- Рефакторинг формы доверенности
