Интегрируйте автозаполнение с IME и службами автозаполнения.

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

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

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

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

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

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

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

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

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

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

Настройте IME для поддержки автозаполнения непосредственно в тексте.

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

В вашем IME атрибут supportsInlinedSuggestions должен быть установлен в true :

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

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

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

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

Настройте службы автозаполнения для поддержки автозаполнения непосредственно в тексте.

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

В вашей службе автозаполнения атрибут supportsInlinedSuggestions должен быть установлен в true :

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

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

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