Интегрируйте автозаполнение с 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() для поддержки встроенных предложений.