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

Commit 7f04fad0 authored by Tim Yu's avatar Tim Yu Committed by Android (Google) Code Review
Browse files

Merge "API to allow Autofill Providers to give detection results to PCC."

parents e349a753 ba7a8847
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -39613,6 +39613,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 @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 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 setFieldClassificationIds(@NonNull android.view.autofill.AutofillId...);
    method @NonNull public android.service.autofill.FillResponse.Builder setFillDialogTriggerIds(@NonNull android.view.autofill.AutofillId...);
+1 −0
Original line number Diff line number Diff line
@@ -2550,6 +2550,7 @@ package android.service.autofill {
  }

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

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

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

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

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

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

    /** @hide */
@@ -312,6 +323,28 @@ public final class FillResponse implements Parcelable {
        private int mServiceDisplayNameResourceId;
        private boolean mShowFillDialogIcon = 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
@@ -1122,6 +1155,7 @@ public final class FillResponse implements Parcelable {
        parcel.writeParcelableArray(mIgnoredIds, flags);
        parcel.writeLong(mDisableDuration);
        parcel.writeParcelableArray(mFieldClassificationIds, flags);
        parcel.writeParcelableArray(mDetectedFieldTypes, flags);
        parcel.writeInt(mIconResourceId);
        parcel.writeInt(mServiceDisplayNameResourceId);
        parcel.writeBoolean(mShowFillDialogIcon);
@@ -1192,6 +1226,12 @@ public final class FillResponse implements Parcelable {
                builder.setFieldClassificationIds(fieldClassifactionIds);
            }

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

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