diff --git a/core/java/android/service/autofill/FillResponse.java b/core/java/android/service/autofill/FillResponse.java index 296877a448abc..78f91edfedcd9 100644 --- a/core/java/android/service/autofill/FillResponse.java +++ b/core/java/android/service/autofill/FillResponse.java @@ -26,6 +26,7 @@ import android.annotation.Nullable; import android.annotation.SuppressLint; import android.annotation.TestApi; import android.app.Activity; +import android.content.Intent; import android.content.IntentSender; import android.content.pm.ParceledListSlice; import android.os.Bundle; @@ -306,6 +307,13 @@ public final class FillResponse implements Parcelable { * with the fully populated {@link FillResponse response} (or {@code null} if the screen * cannot be autofilled). * + *
IMPORTANT: Extras must be non-null on the intent being set for Android 12 + * otherwise it will cause a crash. Do not use {@link Activity#setResult(int)}, instead use + * {@link Activity#setResult(int, Intent) with non-null extras. Consider setting { + * @link android.view.autofill.AutofillManager#EXTRA_AUTHENTICATION_RESULT} to null or use + * {@link Bundle#EMPTY} with {@link Intent#putExtras(Bundle)} on the intent when + * finishing activity to avoid crash).
+ * *For example, if you provided an empty {@link FillResponse response} because the * user's data was locked and marked that the response needs an authentication then * in the response returned if authentication succeeds you need to provide all diff --git a/core/java/android/view/autofill/AutofillManager.java b/core/java/android/view/autofill/AutofillManager.java index b05b7916d9603..6fcbff0ef9922 100644 --- a/core/java/android/view/autofill/AutofillManager.java +++ b/core/java/android/view/autofill/AutofillManager.java @@ -1911,7 +1911,7 @@ public final class AutofillManager { if (newClientState != null) { responseData.putBundle(EXTRA_CLIENT_STATE, newClientState); } - if (data.getExtras().containsKey(EXTRA_AUTHENTICATION_RESULT_EPHEMERAL_DATASET)) { + if (data.hasExtra(EXTRA_AUTHENTICATION_RESULT_EPHEMERAL_DATASET)) { responseData.putBoolean(EXTRA_AUTHENTICATION_RESULT_EPHEMERAL_DATASET, data.getBooleanExtra(EXTRA_AUTHENTICATION_RESULT_EPHEMERAL_DATASET, false));