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 ids = parcel.readTypedArrayList(null); final ArrayList values = parcel.readTypedArrayList(null); final int idCount = (ids != null) ? ids.size() : 0; @@ -247,7 +242,6 @@ public final class Dataset implements Parcelable { AutoFillValue value = (valueCount > i) ? values.get(i) : null; builder.setValue(id, value); } - builder.setPresentation(parcel.readParcelable(null)); builder.setAuthentication(parcel.readParcelable(null)); return builder.build(); } diff --git a/core/java/android/service/autofill/FillResponse.java b/core/java/android/service/autofill/FillResponse.java index 86688d317a8fc..91c668ef32e2a 100644 --- a/core/java/android/service/autofill/FillResponse.java +++ b/core/java/android/service/autofill/FillResponse.java @@ -45,8 +45,7 @@ import java.util.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 CREATOR = @@ -426,8 +407,8 @@ public final class FillResponse implements Parcelable { builder.addSavableFields(fillIds.valueAt(i)); } builder.setExtras(parcel.readParcelable(null)); - builder.setPresentation(parcel.readParcelable(null)); - builder.setAuthentication(parcel.readParcelable(null)); + builder.setAuthentication(parcel.readParcelable(null), + parcel.readParcelable(null)); return builder.build(); }