Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 1b66b58b authored by Simranjit Kohli's avatar Simranjit Kohli Committed by Tim Yu
Browse files

Revert "Revert "API to allow Autofill Providers to give detectio..."

Revert submission 21336058-revert-21047830-autofill-pcc-apis-MBFYLBLCKB

Reason for revert: Reverting the revert with fixes.

Reverted changes: /q/submissionid:21336058-revert-21047830-autofill-pcc-apis-MBFYLBLCKB

Change-Id: I08c9ba317685b74ebeef613ad6e1903685a739e8
parent cc3d628f
Loading
Loading
Loading
Loading
+1 −0
Original line number Original line Diff line number Diff line
@@ -39611,6 +39611,7 @@ package android.service.autofill {
    method @Deprecated @NonNull public android.service.autofill.FillResponse.Builder setAuthentication(@NonNull android.view.autofill.AutofillId[], @Nullable android.content.IntentSender, @Nullable android.widget.RemoteViews, @Nullable android.service.autofill.InlinePresentation, @Nullable android.service.autofill.InlinePresentation);
    method @Deprecated @NonNull public android.service.autofill.FillResponse.Builder setAuthentication(@NonNull android.view.autofill.AutofillId[], @Nullable android.content.IntentSender, @Nullable android.widget.RemoteViews, @Nullable android.service.autofill.InlinePresentation, @Nullable android.service.autofill.InlinePresentation);
    method @NonNull public android.service.autofill.FillResponse.Builder setAuthentication(@NonNull android.view.autofill.AutofillId[], @Nullable android.content.IntentSender, @Nullable android.service.autofill.Presentations);
    method @NonNull public android.service.autofill.FillResponse.Builder setAuthentication(@NonNull android.view.autofill.AutofillId[], @Nullable android.content.IntentSender, @Nullable android.service.autofill.Presentations);
    method @NonNull public android.service.autofill.FillResponse.Builder setClientState(@Nullable android.os.Bundle);
    method @NonNull public android.service.autofill.FillResponse.Builder setClientState(@Nullable android.os.Bundle);
    method @NonNull public android.service.autofill.FillResponse.Builder setDetectedFieldClassifications(@NonNull java.util.Set<android.service.assist.classification.FieldClassification>);
    method @NonNull public android.service.autofill.FillResponse.Builder setDialogHeader(@NonNull android.widget.RemoteViews);
    method @NonNull public android.service.autofill.FillResponse.Builder setDialogHeader(@NonNull android.widget.RemoteViews);
    method @NonNull public android.service.autofill.FillResponse.Builder setFieldClassificationIds(@NonNull android.view.autofill.AutofillId...);
    method @NonNull public android.service.autofill.FillResponse.Builder setFieldClassificationIds(@NonNull android.view.autofill.AutofillId...);
    method @NonNull public android.service.autofill.FillResponse.Builder setFillDialogTriggerIds(@NonNull android.view.autofill.AutofillId...);
    method @NonNull public android.service.autofill.FillResponse.Builder setFillDialogTriggerIds(@NonNull android.view.autofill.AutofillId...);
+1 −0
Original line number Original line Diff line number Diff line
@@ -2549,6 +2549,7 @@ package android.service.autofill {
  }
  }


  public final class FillResponse implements android.os.Parcelable {
  public final class FillResponse implements android.os.Parcelable {
    method @NonNull public java.util.Set<android.service.assist.classification.FieldClassification> getDetectedFieldClassifications();
    method public int getFlags();
    method public int getFlags();
  }
  }


+40 −0
Original line number Original line Diff line number Diff line
@@ -34,6 +34,7 @@ import android.content.pm.ParceledListSlice;
import android.os.Bundle;
import android.os.Bundle;
import android.os.Parcel;
import android.os.Parcel;
import android.os.Parcelable;
import android.os.Parcelable;
import android.service.assist.classification.FieldClassification;
import android.view.autofill.AutofillId;
import android.view.autofill.AutofillId;
import android.widget.RemoteViews;
import android.widget.RemoteViews;


@@ -45,6 +46,7 @@ import java.util.ArrayList;
import java.util.Arrays;
import java.util.Arrays;
import java.util.List;
import java.util.List;
import java.util.Objects;
import java.util.Objects;
import java.util.Set;


/**
/**
 * Response for an {@link
 * Response for an {@link
@@ -113,6 +115,7 @@ public final class FillResponse implements Parcelable {
    private final @StringRes int mServiceDisplayNameResourceId;
    private final @StringRes int mServiceDisplayNameResourceId;
    private final boolean mShowFillDialogIcon;
    private final boolean mShowFillDialogIcon;
    private final boolean mShowSaveDialogIcon;
    private final boolean mShowSaveDialogIcon;
    private final @Nullable FieldClassification[] mDetectedFieldTypes;


    private FillResponse(@NonNull Builder builder) {
    private FillResponse(@NonNull Builder builder) {
        mDatasets = (builder.mDatasets != null) ? new ParceledListSlice<>(builder.mDatasets) : null;
        mDatasets = (builder.mDatasets != null) ? new ParceledListSlice<>(builder.mDatasets) : null;
@@ -140,6 +143,14 @@ public final class FillResponse implements Parcelable {
        mServiceDisplayNameResourceId = builder.mServiceDisplayNameResourceId;
        mServiceDisplayNameResourceId = builder.mServiceDisplayNameResourceId;
        mShowFillDialogIcon = builder.mShowFillDialogIcon;
        mShowFillDialogIcon = builder.mShowFillDialogIcon;
        mShowSaveDialogIcon = builder.mShowSaveDialogIcon;
        mShowSaveDialogIcon = builder.mShowSaveDialogIcon;
        mDetectedFieldTypes = builder.mDetectedFieldTypes;
    }

    /** @hide */
    @TestApi
    @NonNull
    public Set<FieldClassification> getDetectedFieldClassifications() {
        return Set.of(mDetectedFieldTypes);
    }
    }


    /** @hide */
    /** @hide */
@@ -312,6 +323,28 @@ public final class FillResponse implements Parcelable {
        private int mServiceDisplayNameResourceId;
        private int mServiceDisplayNameResourceId;
        private boolean mShowFillDialogIcon = true;
        private boolean mShowFillDialogIcon = true;
        private boolean mShowSaveDialogIcon = true;
        private boolean mShowSaveDialogIcon = true;
        private FieldClassification[] mDetectedFieldTypes;

        /**
         * Adds a new {@link FieldClassification} to this response, to
         * help the platform provide more accurate detection results.
         *
         * Call this when a field has been detected with a type.
         *
         * Altough similiarly named with {@link setFieldClassificationIds},
         * it provides a different functionality - setFieldClassificationIds should
         * be used when a field is only suspected to be Autofillable.
         * This method should be used when a field is certainly Autofillable
         * with a certain type.
         */
        @NonNull
        public Builder setDetectedFieldClassifications(
                @NonNull Set<FieldClassification> fieldInfos) {
            throwIfDestroyed();
            throwIfDisableAutofillCalled();
            mDetectedFieldTypes = fieldInfos.toArray(new FieldClassification[0]);
            return this;
        }


        /**
        /**
         * Triggers a custom UI before autofilling the screen with any data set in this
         * Triggers a custom UI before autofilling the screen with any data set in this
@@ -1122,6 +1155,7 @@ public final class FillResponse implements Parcelable {
        parcel.writeParcelableArray(mIgnoredIds, flags);
        parcel.writeParcelableArray(mIgnoredIds, flags);
        parcel.writeLong(mDisableDuration);
        parcel.writeLong(mDisableDuration);
        parcel.writeParcelableArray(mFieldClassificationIds, flags);
        parcel.writeParcelableArray(mFieldClassificationIds, flags);
        parcel.writeParcelableArray(mDetectedFieldTypes, flags);
        parcel.writeInt(mIconResourceId);
        parcel.writeInt(mIconResourceId);
        parcel.writeInt(mServiceDisplayNameResourceId);
        parcel.writeInt(mServiceDisplayNameResourceId);
        parcel.writeBoolean(mShowFillDialogIcon);
        parcel.writeBoolean(mShowFillDialogIcon);
@@ -1192,6 +1226,12 @@ public final class FillResponse implements Parcelable {
                builder.setFieldClassificationIds(fieldClassifactionIds);
                builder.setFieldClassificationIds(fieldClassifactionIds);
            }
            }


            final FieldClassification[] detectedFields =
                    parcel.readParcelableArray(null, FieldClassification.class);
            if (detectedFields != null) {
                builder.setDetectedFieldClassifications(Set.of(detectedFields));
            }

            builder.setIconResourceId(parcel.readInt());
            builder.setIconResourceId(parcel.readInt());
            builder.setServiceDisplayNameResourceId(parcel.readInt());
            builder.setServiceDisplayNameResourceId(parcel.readInt());
            builder.setShowFillDialogIcon(parcel.readBoolean());
            builder.setShowFillDialogIcon(parcel.readBoolean());