Cómo integrar el autocompletado con teclados

A partir de Android 11, los teclados y otros editores de métodos de entrada (IME) pueden mostrar sugerencias de autocompletado intercaladas, en una tira de sugerencias o en algo similar, en lugar de que el sistema las muestre en un menú desplegable. Dado que estas sugerencias de autocompletado pueden contener datos privados, como contraseñas o información de tarjetas de crédito, se ocultan del IME hasta que el usuario selecciona una. Los IME y los administradores de contraseñas deben actualizarse para usar esta función. Si un IME o un administrador de contraseñas no admite el autocompletado intercalado, las sugerencias se muestran en un menú desplegable, como se mostraban antes de Android 11.

Flujo de trabajo

Para comprender cómo funciona el autocompletado intercalado, es útil seguir el proceso paso a paso. En este flujo, IME significa el teclado actual u otro editor de entrada, y proveedor de sugerencias significa el proveedor apropiado de esa sugerencia de autocompletado. Según el campo de entrada y la configuración del usuario, el proveedor de sugerencias podría ser la plataforma o un servicio de autocompletado.

  1. El usuario se enfoca en un campo de entrada que activa el autocompletado, como un campo de contraseña o de entrada de la tarjeta de crédito.

  2. La plataforma consulta el IME actual y el proveedor de sugerencias adecuado para ver si admiten el autocompletado intercalado. Si el IME o el proveedor de sugerencias no lo admiten, la sugerencia se muestra en un menú desplegable, como en Android 10 y versiones anteriores.

  3. La plataforma le pide al IME que proporcione una solicitud de sugerencia. Esta solicitud de sugerencia especifica la cantidad máxima de sugerencias que le gustaría al IME y también proporciona especificaciones de presentación para cada sugerencia. Las especificaciones de presentación indican aspectos como el tamaño máximo, el tamaño del texto, los colores y los datos de fuente, lo que permite que el proveedor de sugerencias coincida con el aspecto del IME.

  4. La plataforma le pide al proveedor de sugerencias que brinde una cantidad de sugerencias hasta el número solicitado. Cada sugerencia incluye una devolución de llamada para aumentar una View que contiene la IU de la sugerencia.

  5. La plataforma informa al IME que las sugerencias están listas. El IME muestra las sugerencias llamando al método de devolución de llamada para aumentar la View de cada sugerencia. Para proteger la información privada del usuario, el IME no ve las sugerencias en esta etapa.

  6. Si el usuario elige una de las sugerencias, se informa al IME de la misma manera que si hubiera elegido una sugerencia de una lista desplegable.

En las siguientes secciones, se describe cómo configurar el IME o el administrador de contraseñas para que admitan la función de autocompletado intercalado.

Cómo configurar los IME para que admitan el autocompletado intercalado

En esta sección, se describe cómo configurar tu IME para que admita el autocompletado. Si tu IME no admite el autocompletado intercalado, la plataforma muestra de forma predeterminada sugerencias de autocompletado en un menú desplegable.

Tu IME debe establecer el atributo supportsInlinedSuggestions en true:

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

Cuando la plataforma necesita una sugerencia de autocompletado, llama al método InputMethodService.onCreateInlineSuggestionsRequest() de tu IME. Debes implementar este método. Muestra un elemento InlineSuggestionsRequest que especifica lo siguiente:

  • Cuántas sugerencias desearía tu IME
  • Un InlinePresentationSpec para cada sugerencia, que define cómo se debe presentar

Cuando la plataforma tiene sugerencias, llama al método onInlineSuggestionsResponse() de tu IME y pasa una InlineSuggestionsResponse que contiene las sugerencias. Debes implementar este método. Tu implementación llama a InlineSuggestionsResponse.getInlineSuggestions() para obtener la lista de sugerencias y, luego, aumenta cada sugerencia llamando a su método InlineSuggestion.inflate().

Cómo configurar servicios de autocompletado para que admitan el autocompletado intercalado

En esta sección, se describe cómo configurar el administrador de contraseñas para que admita el autocompletado intercalado. Si tu app no admite el autocompletado intercalado, la plataforma muestra de forma predeterminada sus sugerencias de autocompletado en un menú desplegable.

El administrador de contraseñas debe establecer el atributo supportsInlinedSuggestions en true:

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

Cuando el IME necesita sugerencias de autocompletado, la plataforma llama al método onFillRequest() de tu servicio de autocompletado, al igual que antes de Android 11. Sin embargo, tu servicio debe llamar a la getInlineSuggestionsRequest() del objeto pasado FillRequest para obtener la InlineSuggestionsRequest creada por el IME. La InlineSuggestionsRequest especifica cuántas sugerencias intercaladas se necesitan y cómo se debe presentar cada una. Si el IME no admite sugerencias intercaladas, el método muestra null.

Tu servicio de autocompletado crea objetos InlinePresentation hasta la cantidad máxima solicitada en InlineSuggestionsRequest. Tus presentaciones deben cumplir con las restricciones de tamaño que especifica InlineSuggestionsRequest. Para mostrar tus sugerencias al IME, llama a Dataset.Builder.setValue() una vez por cada sugerencia. Android 11 proporciona versiones nuevas de Dataset.Builder.setValue() para admitir sugerencias intercaladas.

Nota: Si bien se supone que el IME usa las sugerencias que proporciona el servicio, no hay garantía de que lo haga.