自動入力を IME および自動入力サービスと統合する

Android 11 以降、キーボードなどのインプット メソッド エディタ (IME)は、自動入力の候補をインラインで表示するか、候補領域に表示できます。 システムがメニューに候補を表示するのではなく、似たようなものになります。こうした自動入力候補にはパスワードやクレジット カード情報などのプライベート データが含まれることがあるため、ユーザーが選択するまで、候補は IME に表示されません。IME と自動入力サービス(パスワード マネージャーなど)を 利用できますIME または自動入力サービスがインライン自動入力をサポートしていない場合、Android 11 より前のバージョンと同様に、候補はメニューに表示されます。

ワークフロー

このフローで、IME は現在のキーボードまたはその他の入力エディタを意味します。 「Suggestion provider」は、自動入力候補の適切なプロバイダを意味します。 入力フィールドとユーザーの設定に応じて、候補のプロバイダは プラットフォームと自動入力サービスがあります。

  1. ユーザーが、自動入力をトリガーする入力フィールド(パスワードやクレジット カードの入力フィールドなど)にフォーカスします。

  2. プラットフォームが、現在の IME と該当する候補プロバイダにクエリを行い、インライン自動入力をサポートしているかどうかを確認します。IME または候補プロバイダがインライン自動入力をサポートしていない場合は、Android 10 以前と同様に、候補がメニューに表示されます。

  3. プラットフォームが IME に対し、「候補リクエスト」を提供するよう求めます。この候補リクエストは、表示する候補の最大数を指定し、各候補の「表示仕様」も提供します。表示仕様では最大サイズ、テキストサイズ、色、フォントデータなどを指定し、候補プロバイダは IME のデザインに合わせることができます。

  4. プラットフォームが候補プロバイダに対し、リクエストされた候補数まで候補を提供するよう求めます。各候補には、候補の UI を含む 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"/>

プラットフォームで自動入力候補が必要になると、IME の InputMethodService.onCreateInlineSuggestionsRequest() メソッドが呼び出されます。このメソッドを実装する必要があります。次のものを指定して、InlineSuggestionsRequest を返します。

  • IME が求める候補数。
  • InlinePresentationSpec 提案内容の提示方法を定義します。

候補がある場合、プラットフォームは IME の onInlineSuggestionsResponse() メソッドを呼び出し、候補を含む InlineSuggestionsResponse を渡します。このメソッドを実装する必要があります。実装で InlineSuggestionsResponse.getInlineSuggestions() を呼び出して候補のリストを取得し、InlineSuggestion.inflate() メソッドを呼び出して各候補をインフレートします。

インライン自動入力をサポートするように自動入力サービスを構成する

このセクションでは、インラインでサポートするように自動入力サービスを設定する方法について説明します。 自動的に入力されます。アプリがインライン自動入力をサポートしていない場合、プラットフォームはデフォルトで、メニューに自動入力候補を表示します。

自動入力サービスでは、supportsInlinedSuggestions 属性を true:

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

IME で自動入力候補が必要になると、プラットフォームは Android 11 より前のバージョンと同様に、自動入力サービスの onFillRequest() メソッドを呼び出します。ただし、サービスは渡された FillRequest オブジェクトの getInlineSuggestionsRequest() メソッドを呼び出して、IME によって作成された InlineSuggestionsRequest を取得する必要があります。「 InlineSuggestionsRequest は、必要なインライン候補の数を指定します。 それぞれをどのように提示すればよいかですIME がインライン候補をサポートしていない場合、このメソッドは null を返します。

自動入力サービスは、InlineSuggestionsRequest でリクエストされた最大数まで InlinePresentation オブジェクトを作成します。表示は、InlineSuggestionsRequest で指定されたサイズの制約に従う必要があります。候補を IME に返すには、候補ごとに 1 回 Dataset.Builder.setValue() を呼び出します。Android 11 では、 Dataset.Builder.setValue(): インライン候補をサポートします。