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

Bug: 261106877
Test: atest android.autofillservice.cts.unittests.FillResponseTest
Change-Id: I58db4be31ea13327576bb097dd77b916f721b43a
This commit is contained in:
Tim Yu
2023-01-30 22:50:53 +00:00
parent 6fe6b182da
commit ba7a8847cc
3 changed files with 42 additions and 0 deletions

View File

@@ -39547,6 +39547,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...);

View File

@@ -2537,6 +2537,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();
}

View File

@@ -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());