diff --git a/api/current.txt b/api/current.txt
index 475aa546ce268..6d71f441fdcfc 100644
--- a/api/current.txt
+++ b/api/current.txt
@@ -36244,10 +36244,9 @@ package android.service.autofill {
}
public static final class Dataset.Builder {
- ctor public Dataset.Builder();
+ ctor public Dataset.Builder(android.widget.RemoteViews);
method public android.service.autofill.Dataset build();
method public android.service.autofill.Dataset.Builder setAuthentication(android.content.IntentSender);
- method public android.service.autofill.Dataset.Builder setPresentation(android.widget.RemoteViews);
method public android.service.autofill.Dataset.Builder setValue(android.view.autofill.AutoFillId, android.view.autofill.AutoFillValue);
}
@@ -36267,9 +36266,8 @@ package android.service.autofill {
method public android.service.autofill.FillResponse.Builder addDataset(android.service.autofill.Dataset);
method public android.service.autofill.FillResponse.Builder addSavableFields(android.view.autofill.AutoFillId...);
method public android.service.autofill.FillResponse build();
- method public android.service.autofill.FillResponse.Builder setAuthentication(android.content.IntentSender);
+ method public android.service.autofill.FillResponse.Builder setAuthentication(android.content.IntentSender, android.widget.RemoteViews);
method public android.service.autofill.FillResponse.Builder setExtras(android.os.Bundle);
- method public android.service.autofill.FillResponse.Builder setPresentation(android.widget.RemoteViews);
}
public final class SaveCallback {
diff --git a/api/system-current.txt b/api/system-current.txt
index 529781ebb122e..8413036182df4 100644
--- a/api/system-current.txt
+++ b/api/system-current.txt
@@ -39364,10 +39364,9 @@ package android.service.autofill {
}
public static final class Dataset.Builder {
- ctor public Dataset.Builder();
+ ctor public Dataset.Builder(android.widget.RemoteViews);
method public android.service.autofill.Dataset build();
method public android.service.autofill.Dataset.Builder setAuthentication(android.content.IntentSender);
- method public android.service.autofill.Dataset.Builder setPresentation(android.widget.RemoteViews);
method public android.service.autofill.Dataset.Builder setValue(android.view.autofill.AutoFillId, android.view.autofill.AutoFillValue);
}
@@ -39387,9 +39386,8 @@ package android.service.autofill {
method public android.service.autofill.FillResponse.Builder addDataset(android.service.autofill.Dataset);
method public android.service.autofill.FillResponse.Builder addSavableFields(android.view.autofill.AutoFillId...);
method public android.service.autofill.FillResponse build();
- method public android.service.autofill.FillResponse.Builder setAuthentication(android.content.IntentSender);
+ method public android.service.autofill.FillResponse.Builder setAuthentication(android.content.IntentSender, android.widget.RemoteViews);
method public android.service.autofill.FillResponse.Builder setExtras(android.os.Bundle);
- method public android.service.autofill.FillResponse.Builder setPresentation(android.widget.RemoteViews);
}
public final class SaveCallback {
diff --git a/api/test-current.txt b/api/test-current.txt
index fec5edc931e28..00a83394df36e 100644
--- a/api/test-current.txt
+++ b/api/test-current.txt
@@ -36383,10 +36383,9 @@ package android.service.autofill {
}
public static final class Dataset.Builder {
- ctor public Dataset.Builder();
+ ctor public Dataset.Builder(android.widget.RemoteViews);
method public android.service.autofill.Dataset build();
method public android.service.autofill.Dataset.Builder setAuthentication(android.content.IntentSender);
- method public android.service.autofill.Dataset.Builder setPresentation(android.widget.RemoteViews);
method public android.service.autofill.Dataset.Builder setValue(android.view.autofill.AutoFillId, android.view.autofill.AutoFillValue);
}
@@ -36406,9 +36405,8 @@ package android.service.autofill {
method public android.service.autofill.FillResponse.Builder addDataset(android.service.autofill.Dataset);
method public android.service.autofill.FillResponse.Builder addSavableFields(android.view.autofill.AutoFillId...);
method public android.service.autofill.FillResponse build();
- method public android.service.autofill.FillResponse.Builder setAuthentication(android.content.IntentSender);
+ method public android.service.autofill.FillResponse.Builder setAuthentication(android.content.IntentSender, android.widget.RemoteViews);
method public android.service.autofill.FillResponse.Builder setExtras(android.os.Bundle);
- method public android.service.autofill.FillResponse.Builder setPresentation(android.widget.RemoteViews);
}
public final class SaveCallback {
diff --git a/core/java/android/service/autofill/Dataset.java b/core/java/android/service/autofill/Dataset.java
index 59b494c3f8a60..d76d444e7d337 100644
--- a/core/java/android/service/autofill/Dataset.java
+++ b/core/java/android/service/autofill/Dataset.java
@@ -106,15 +106,13 @@ public final class Dataset implements Parcelable {
private boolean mDestroyed;
/**
- * Sets the presentation used to visualize this dataset.
+ * Creates a new builder.
*
- * @param presentation The presentation view.
- *
- * @return This builder.
+ * @param presentation The presentation used to visualize this dataset.
*/
- public @NonNull Builder setPresentation(@Nullable RemoteViews presentation) {
+ public Builder(@NonNull RemoteViews presentation) {
+ Preconditions.checkNotNull(presentation, "presentation must be non-null");
mPresentation = presentation;
- return this;
}
/**
@@ -201,9 +199,6 @@ public final class Dataset implements Parcelable {
throw new IllegalArgumentException(
"at least one value must be set");
}
- if (mPresentation == null) {
- throw new IllegalArgumentException("presentation must be set");
- }
return new Dataset(this);
}
@@ -225,9 +220,9 @@ public final class Dataset implements Parcelable {
@Override
public void writeToParcel(Parcel parcel, int flags) {
+ parcel.writeParcelable(mPresentation, flags);
parcel.writeTypedArrayList(mFieldIds, flags);
parcel.writeTypedArrayList(mFieldValues, flags);
- parcel.writeParcelable(mPresentation, flags);
parcel.writeParcelable(mAuthentication, flags);
}
@@ -237,7 +232,7 @@ public final class Dataset implements Parcelable {
// Always go through the builder to ensure the data ingested by
// the system obeys the contract of the builder to avoid attacks
// using specially crafted parcels.
- final Builder builder = new Builder();
+ final Builder builder = new Builder(parcel.readParcelable(null));
final ArrayList
* new FillResponse.Builder()
- * .add(new Dataset.Builder()
- * .setPresentation(createPresentation())
+ * .add(new Dataset.Builder(createPresentation())
* .setTextFieldValue(id1, "homer")
* .setTextFieldValue(id2, "D'OH!")
* .build())
@@ -57,13 +56,11 @@ import java.util.ArrayList;
*
*
* new FillResponse.Builder()
- * .add(new Dataset.Builder()
- * .setPresentation(createFirstPresentation())
+ * .add(new Dataset.Builder(createFirstPresentation())
* .setTextFieldValue(id1, "homer")
* .setTextFieldValue(id2, "D'OH!")
* .build())
- * .add(new Dataset.Builder()
- * .setPresentation(createSecondPresentation())
+ * .add(new Dataset.Builder(createSecondPresentation())
* .setTextFieldValue(id1, "elbarto")
* .setTextFieldValue(id2, "cowabonga")
* .build())
@@ -87,8 +84,7 @@ import java.util.ArrayList;
*
*
* new FillResponse.Builder()
- * .add(new Dataset.Builder(")
- * .setPresentation(createPresentation())
+ * .add(new Dataset.Builder(createPresentation())
* .setTextFieldValue(id1, "Homer") // first name
* .setTextFieldValue(id2, "Simpson") // last name
* .setTextFieldValue(id3, "742 Evergreen Terrace") // street
@@ -116,13 +112,11 @@ import java.util.ArrayList;
*
*
* new FillResponse.Builder()
- * .add(new Dataset.Builder()
- * .setPresentation(createFirstPresentation())
+ * .add(new Dataset.Builder(createFirstPresentation())
* .setTextFieldValue(id1, "Homer")
* .setTextFieldValue(id2, "Simpson")
* .build())
- * .add(new Dataset.Builder()
- * .setPresentation(createSecondPresentation())
+ * .add(new Dataset.Builder(createSecondPresentation())
* .setTextFieldValue(id1, "Bart")
* .setTextFieldValue(id2, "Simpson")
* .build())
@@ -134,13 +128,11 @@ import java.util.ArrayList;
*
*
* new FillResponse.Builder()
- * .add(new Dataset.Builder()
- * .setPresentation(createThirdPresentation())
+ * .add(new Dataset.Builder(createThirdPresentation())
* .setTextFieldValue(id3, "742 Evergreen Terrace")
* .setTextFieldValue(id4, "Springfield")
* .build())
- * .add(new Dataset.Builder()
- * .setPresentation(createFourthPresentation())
+ * .add(new Dataset.Builder(createFourthPresentation())
* .setTextFieldValue(id3, "Springfield Power Plant")
* .setTextFieldValue(id4, "Springfield")
* .build())
@@ -216,23 +208,6 @@ public final class FillResponse implements Parcelable {
private IntentSender mAuthentication;
private boolean mDestroyed;
- /**
- * Sets the presentation used to visualize this response. You should
- * set this only if you need an authentication as this is the only
- * case the response needs to be presented to the user.
- *
- * @param presentation The presentation view.
- *
- * @return This builder.
- *
- * @see #setAuthentication(IntentSender)
- */
- public @NonNull
- FillResponse.Builder setPresentation(@Nullable RemoteViews presentation) {
- mPresentation = presentation;
- return this;
- }
-
/**
* Requires a fill response authentication before auto-filling the activity with
* any data set in this response.
@@ -259,19 +234,29 @@ public final class FillResponse implements Parcelable {
* available data sets some of which may need to be further authenticated, for
* example a credit card whose CVV needs to be entered.
If you provide an authentication intent you must also provide a presentation + * which is used to visualize visualize the response for triggering the authentication + * flow.
+ * *>Note: Do not make the provided pending intent * immutable by using {@link android.app.PendingIntent#FLAG_IMMUTABLE} as the * platform needs to fill in the authentication arguments.
* * @param authentication Intent to an activity with your authentication flow. + * @param presentation The presentation to visualize the response. * @return This builder. * * @see android.app.PendingIntent#getIntentSender() - * @see #setPresentation(RemoteViews) */ - public @NonNull Builder setAuthentication(@Nullable IntentSender authentication) { + public @NonNull Builder setAuthentication(@Nullable IntentSender authentication, + @Nullable RemoteViews presentation) { throwIfDestroyed(); + if (authentication == null ^ presentation == null) { + throw new IllegalArgumentException("authentication and presentation" + + " must be both non-null or null"); + } mAuthentication = authentication; + mPresentation = presentation; return this; } @@ -355,10 +340,6 @@ public final class FillResponse implements Parcelable { */ public FillResponse build() { throwIfDestroyed(); - if (mAuthentication == null ^ mPresentation == null) { - throw new IllegalArgumentException("authentication and presentation" - + " must be both non-null or null"); - } if (mAuthentication == null && mDatasets == null && mSavableIds == null) { throw new IllegalArgumentException("need to provide at least one" + " data set or savable ids or an authentication with a presentation"); @@ -403,8 +384,8 @@ public final class FillResponse implements Parcelable { parcel.writeTypedArrayList(mDatasets, flags); parcel.writeTypedArraySet(mSavableIds, flags); parcel.writeParcelable(mExtras, flags); - parcel.writeParcelable(mPresentation, flags); parcel.writeParcelable(mAuthentication, flags); + parcel.writeParcelable(mPresentation, flags); } public static final Parcelable.Creator