Как интегрировать автозаполнение с редакторами методов ввода и сервисами автозаполнения

Начиная с Android 11 клавиатуры и другие редакторы методов ввода (IME) могут показывать подсказки автозаполнения в строке, на панели подсказок или в другом подобном месте, а не в меню. Поскольку эти подсказки автозаполнения могут содержать личные данные, например пароли или информацию о кредитных картах, они скрыты от IME, пока пользователь не выберет одну из них. Обновите редакторы методов ввода и сервисы автозаполнения, например менеджеры паролей, чтобы использовать эту функцию. Если редактор метода ввода или сервис автозаполнения не поддерживает встроенное автозаполнение, подсказки показываются в меню, как в версиях, предшествующих Android 11.

Рабочий процесс

В этом процессе IME – это текущая клавиатура или другой редактор ввода, а поставщик подсказок – это поставщик подсказок автозаполнения. В зависимости от поля ввода и настроек пользователя поставщиком подсказок может быть платформа или сервис автозаполнения.

  1. Пользователь выбирает поле ввода, которое активирует автозаполнение, например поле для пароля или данных банковской карты.

  2. Платформа запрашивает текущий редактор метода ввода и соответствующего поставщика подсказок, чтобы узнать, поддерживают ли они встроенное автозаполнение. Если редактор метода ввода или поставщик подсказок не поддерживает встроенное автозаполнение, подсказка показывается в меню, как в Android 10 и более ранних версиях.

  3. Платформа запрашивает у IME запрос на подсказку. В запросе указывается максимальное количество подсказок, которые нужно показать, и спецификации для каждой из них. В спецификациях представления указываются такие параметры, как максимальный размер, размер текста, цвета и данные шрифта, что позволяет поставщику подсказок соответствовать внешнему виду IME.

  4. Платформа запрашивает у поставщика подсказок определенное количество подсказок. Каждая подсказка включает обратный вызов для заполнения View, содержащего пользовательский интерфейс подсказки.

  5. Платформа сообщает IME, что подсказки готовы. Редактор метода ввода показывает подсказки, вызывая метод обратного вызова, чтобы использовать метод inflate для View каждой подсказки. Чтобы защитить конфиденциальную информацию пользователя, редактор метода ввода не видит, какие подсказки предлагаются на этом этапе.

  6. Если пользователь выбирает одну из подсказок, IME получает информацию так же, как если бы пользователь выбрал подсказку из системного меню.

В следующих разделах описывается, как настроить IME или сервис автозаполнения для поддержки встроенного автозаполнения.

Как настроить редакторы методов ввода для поддержки встроенного автозаполнения

В этом разделе описывается, как настроить IME для поддержки встроенного автозаполнения. Если ваш редактор метода ввода не поддерживает встроенное автозаполнение, платформа по умолчанию показывает подсказки автозаполнения в меню.

Редактор метода ввода должен задать для атрибута supportsInlinedSuggestions значение true.

<input-method
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:supportsInlineSuggestions="true"/>

Когда платформе требуется подсказка автозаполнения, она вызывает метод InputMethodService.onCreateInlineSuggestionsRequest() вашего редактора метода ввода. Этот метод необходимо реализовать. Возвращает InlineSuggestionsRequest со следующими параметрами:

  • Количество подсказок, которое запрашивает редактор метода ввода.
  • **InlinePresentationSpec для каждого предложения, определяющий, как оно должно быть представлено.

Когда у платформы есть подсказки, она вызывает метод onInlineSuggestionsResponse() вашего IME, передавая InlineSuggestionsResponse, содержащий подсказки. Этот метод необходимо реализовать. В своей реализации вызовите InlineSuggestionsResponse.getInlineSuggestions(), чтобы получить список подсказок, а затем разверните каждую из них, вызвав ее метод InlineSuggestion.inflate().

Как настроить сервисы автозаполнения для поддержки встроенного автозаполнения

В этом разделе описывается, как настроить сервис автозаполнения для поддержки встроенного автозаполнения. Если ваше приложение не поддерживает встроенное автозаполнение, платформа по умолчанию показывает подсказки автозаполнения в меню.

Сервис автозаполнения должен задать для атрибута supportsInlinedSuggestions значение true.

<autofill-service
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:supportsInlineSuggestions="true"/>

Когда редактору метода ввода нужны подсказки автозаполнения, платформа вызывает метод onFillRequest() сервиса автозаполнения, как и в версиях до Android 11. Однако ваш сервис должен вызвать метод getInlineSuggestionsRequest() переданного объекта FillRequest. Это позволяет получить InlineSuggestionsRequest, созданный IME. InlineSuggestionsRequest указывает, сколько встроенных подсказок нужно и как должна быть представлена каждая из них. Если редактор метода ввода не поддерживает встроенные подсказки, метод возвращает null.

Сервис автозаполнения создает объекты InlinePresentation в количестве, не превышающем указанное в InlineSuggestionsRequest. Презентации должны соответствовать ограничениям по размеру, указанным в InlineSuggestionsRequest. Чтобы вернуть подсказки в IME, вызовите Dataset.Builder.setValue() по одному разу для каждой подсказки. В Android 11 есть версии Dataset.Builder.setValue(), которые поддерживают встроенные подсказки.