Zero out autofill id when no InputConnection

This CL introduces a NO_AUTOFILL_ID constant that can be set as part
of an EditorInfo when there is no InputConnection established.

Test: atest CtsInputMethodTestCases
Bug: 219819349
Change-Id: I99c51fb08f3844461988e7226b65af75f790c6b1
This commit is contained in:
Nikolas Havrikov
2022-06-13 18:37:57 +02:00
parent 59204683ae
commit 69772357ea
2 changed files with 14 additions and 1 deletions

View File

@@ -72,6 +72,10 @@ public final class AutofillId implements Parcelable {
mSessionId = sessionId;
}
/** @hide */
@NonNull
public static final AutofillId NO_AUTOFILL_ID = new AutofillId(0);
/** @hide */
@NonNull
@TestApi

View File

@@ -90,6 +90,7 @@ import android.view.KeyEvent;
import android.view.View;
import android.view.ViewRootImpl;
import android.view.WindowManager.LayoutParams.SoftInputModeFlags;
import android.view.autofill.AutofillId;
import android.view.autofill.AutofillManager;
import android.window.ImeOnBackInvokedDispatcher;
import android.window.WindowOnBackInvokedDispatcher;
@@ -2323,6 +2324,14 @@ public final class InputMethodManager {
InputConnection ic = view.onCreateInputConnection(tba);
if (DEBUG) Log.v(TAG, "Starting input: tba=" + tba + " ic=" + ic);
// Clear autofill and field ids if a connection could not be established.
// This ensures that even disconnected EditorInfos have well-defined attributes,
// making them consistently and straightforwardly comparable.
if (ic == null) {
tba.autofillId = AutofillId.NO_AUTOFILL_ID;
tba.fieldId = 0;
}
final Handler icHandler;
InputBindResult res = null;
synchronized (mH) {
@@ -2360,7 +2369,7 @@ public final class InputMethodManager {
mServedInputConnection = null;
mServedInputConnectionHandler = null;
}
RemoteInputConnectionImpl servedInputConnection;
final RemoteInputConnectionImpl servedInputConnection;
if (ic != null) {
mCursorSelStart = tba.initialSelStart;
mCursorSelEnd = tba.initialSelEnd;