diff --git a/core/java/android/credentials/ui/CreateCredentialProviderData.java b/core/java/android/credentials/ui/CreateCredentialProviderData.java index 852934a808e22..629d578c73583 100644 --- a/core/java/android/credentials/ui/CreateCredentialProviderData.java +++ b/core/java/android/credentials/ui/CreateCredentialProviderData.java @@ -19,6 +19,7 @@ package android.credentials.ui; import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.TestApi; +import android.content.pm.ParceledListSlice; import android.os.Parcel; import android.os.Parcelable; @@ -35,7 +36,7 @@ import java.util.List; @TestApi public final class CreateCredentialProviderData extends ProviderData implements Parcelable { @NonNull - private final List mSaveEntries; + private final ParceledListSlice mSaveEntries; @Nullable private final Entry mRemoteEntry; @@ -43,13 +44,13 @@ public final class CreateCredentialProviderData extends ProviderData implements @NonNull String providerFlattenedComponentName, @NonNull List saveEntries, @Nullable Entry remoteEntry) { super(providerFlattenedComponentName); - mSaveEntries = saveEntries; + mSaveEntries = new ParceledListSlice<>(saveEntries); mRemoteEntry = remoteEntry; } @NonNull public List getSaveEntries() { - return mSaveEntries; + return mSaveEntries.getList(); } @Nullable @@ -60,9 +61,7 @@ public final class CreateCredentialProviderData extends ProviderData implements private CreateCredentialProviderData(@NonNull Parcel in) { super(in); - List credentialEntries = new ArrayList<>(); - in.readTypedList(credentialEntries, Entry.CREATOR); - mSaveEntries = credentialEntries; + mSaveEntries = in.readParcelable(null, android.content.pm.ParceledListSlice.class); AnnotationValidations.validate(NonNull.class, null, mSaveEntries); Entry remoteEntry = in.readTypedObject(Entry.CREATOR); @@ -72,7 +71,7 @@ public final class CreateCredentialProviderData extends ProviderData implements @Override public void writeToParcel(@NonNull Parcel dest, int flags) { super.writeToParcel(dest, flags); - dest.writeTypedList(mSaveEntries); + dest.writeParcelable(mSaveEntries, flags); dest.writeTypedObject(mRemoteEntry, flags); } diff --git a/core/java/android/credentials/ui/GetCredentialProviderData.java b/core/java/android/credentials/ui/GetCredentialProviderData.java index e4688a84a3fbe..773dee97f7fe1 100644 --- a/core/java/android/credentials/ui/GetCredentialProviderData.java +++ b/core/java/android/credentials/ui/GetCredentialProviderData.java @@ -19,6 +19,7 @@ package android.credentials.ui; import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.TestApi; +import android.content.pm.ParceledListSlice; import android.os.Parcel; import android.os.Parcelable; @@ -35,11 +36,11 @@ import java.util.List; @TestApi public final class GetCredentialProviderData extends ProviderData implements Parcelable { @NonNull - private final List mCredentialEntries; + private final ParceledListSlice mCredentialEntries; @NonNull - private final List mActionChips; + private final ParceledListSlice mActionChips; @NonNull - private final List mAuthenticationEntries; + private final ParceledListSlice mAuthenticationEntries; @Nullable private final Entry mRemoteEntry; @@ -49,25 +50,25 @@ public final class GetCredentialProviderData extends ProviderData implements Par @NonNull List authenticationEntries, @Nullable Entry remoteEntry) { super(providerFlattenedComponentName); - mCredentialEntries = credentialEntries; - mActionChips = actionChips; - mAuthenticationEntries = authenticationEntries; + mCredentialEntries = new ParceledListSlice<>(credentialEntries); + mActionChips = new ParceledListSlice<>(actionChips); + mAuthenticationEntries = new ParceledListSlice<>(authenticationEntries); mRemoteEntry = remoteEntry; } @NonNull public List getCredentialEntries() { - return mCredentialEntries; + return mCredentialEntries.getList(); } @NonNull public List getActionChips() { - return mActionChips; + return mActionChips.getList(); } @NonNull public List getAuthenticationEntries() { - return mAuthenticationEntries; + return mAuthenticationEntries.getList(); } @Nullable @@ -77,20 +78,16 @@ public final class GetCredentialProviderData extends ProviderData implements Par private GetCredentialProviderData(@NonNull Parcel in) { super(in); - - List credentialEntries = new ArrayList<>(); - in.readTypedList(credentialEntries, Entry.CREATOR); - mCredentialEntries = credentialEntries; + mCredentialEntries = in.readParcelable(null, + android.content.pm.ParceledListSlice.class); AnnotationValidations.validate(NonNull.class, null, mCredentialEntries); - List actionChips = new ArrayList<>(); - in.readTypedList(actionChips, Entry.CREATOR); - mActionChips = actionChips; + mActionChips = in.readParcelable(null, + android.content.pm.ParceledListSlice.class); AnnotationValidations.validate(NonNull.class, null, mActionChips); - List authenticationEntries = new ArrayList<>(); - in.readTypedList(authenticationEntries, AuthenticationEntry.CREATOR); - mAuthenticationEntries = authenticationEntries; + mAuthenticationEntries = in.readParcelable(null, + android.content.pm.ParceledListSlice.class); AnnotationValidations.validate(NonNull.class, null, mAuthenticationEntries); Entry remoteEntry = in.readTypedObject(Entry.CREATOR); @@ -100,9 +97,9 @@ public final class GetCredentialProviderData extends ProviderData implements Par @Override public void writeToParcel(@NonNull Parcel dest, int flags) { super.writeToParcel(dest, flags); - dest.writeTypedList(mCredentialEntries); - dest.writeTypedList(mActionChips); - dest.writeTypedList(mAuthenticationEntries); + dest.writeParcelable(mCredentialEntries, flags); + dest.writeParcelable(mActionChips, flags); + dest.writeParcelable(mAuthenticationEntries, flags); dest.writeTypedObject(mRemoteEntry, flags); } diff --git a/core/java/android/service/credentials/BeginCreateCredentialResponse.java b/core/java/android/service/credentials/BeginCreateCredentialResponse.java index cd53cb6afc71f..df934335e49d6 100644 --- a/core/java/android/service/credentials/BeginCreateCredentialResponse.java +++ b/core/java/android/service/credentials/BeginCreateCredentialResponse.java @@ -20,6 +20,7 @@ import android.Manifest; import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.RequiresPermission; +import android.content.pm.ParceledListSlice; import android.os.Parcel; import android.os.Parcelable; @@ -33,7 +34,7 @@ import java.util.Objects; * Response to a {@link BeginCreateCredentialRequest}. */ public final class BeginCreateCredentialResponse implements Parcelable { - private final @NonNull List mCreateEntries; + private final @NonNull ParceledListSlice mCreateEntries; private final @Nullable RemoteEntry mRemoteCreateEntry; /** @@ -41,19 +42,19 @@ public final class BeginCreateCredentialResponse implements Parcelable { * to return. */ public BeginCreateCredentialResponse() { - this(/*createEntries=*/new ArrayList<>(), /*remoteCreateEntry=*/null); + this(/*createEntries=*/new ParceledListSlice<>(new ArrayList<>()), + /*remoteCreateEntry=*/null); } private BeginCreateCredentialResponse(@NonNull Parcel in) { - List createEntries = new ArrayList<>(); - in.readTypedList(createEntries, CreateEntry.CREATOR); - mCreateEntries = createEntries; + mCreateEntries = in.readParcelable( + null, android.content.pm.ParceledListSlice.class); mRemoteCreateEntry = in.readTypedObject(RemoteEntry.CREATOR); } @Override public void writeToParcel(@NonNull Parcel dest, int flags) { - dest.writeTypedList(mCreateEntries); + dest.writeParcelable(mCreateEntries, flags); dest.writeTypedObject(mRemoteCreateEntry, flags); } @@ -76,7 +77,7 @@ public final class BeginCreateCredentialResponse implements Parcelable { }; /* package-private */ BeginCreateCredentialResponse( - @NonNull List createEntries, + @NonNull ParceledListSlice createEntries, @Nullable RemoteEntry remoteCreateEntry) { this.mCreateEntries = createEntries; com.android.internal.util.AnnotationValidations.validate( @@ -86,7 +87,7 @@ public final class BeginCreateCredentialResponse implements Parcelable { /** Returns the list of create entries to be displayed on the UI. */ public @NonNull List getCreateEntries() { - return mCreateEntries; + return mCreateEntries.getList(); } /** Returns the remote create entry to be displayed on the UI. */ @@ -159,7 +160,9 @@ public final class BeginCreateCredentialResponse implements Parcelable { * Builds a new instance of {@link BeginCreateCredentialResponse}. */ public @NonNull BeginCreateCredentialResponse build() { - return new BeginCreateCredentialResponse(mCreateEntries, mRemoteCreateEntry); + return new BeginCreateCredentialResponse( + new ParceledListSlice<>(mCreateEntries), + mRemoteCreateEntry); } } } diff --git a/core/java/android/service/credentials/BeginGetCredentialResponse.java b/core/java/android/service/credentials/BeginGetCredentialResponse.java index e25b6869605dd..5ed06ac1ade70 100644 --- a/core/java/android/service/credentials/BeginGetCredentialResponse.java +++ b/core/java/android/service/credentials/BeginGetCredentialResponse.java @@ -20,6 +20,7 @@ import android.Manifest; import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.RequiresPermission; +import android.content.pm.ParceledListSlice; import android.os.Parcel; import android.os.Parcelable; @@ -35,13 +36,13 @@ import java.util.Objects; */ public final class BeginGetCredentialResponse implements Parcelable { /** List of credential entries to be displayed on the UI. */ - private final @NonNull List mCredentialEntries; + private final @NonNull ParceledListSlice mCredentialEntries; /** List of authentication entries to be displayed on the UI. */ - private final @NonNull List mAuthenticationEntries; + private final @NonNull ParceledListSlice mAuthenticationEntries; /** List of provider actions to be displayed on the UI. */ - private final @NonNull List mActions; + private final @NonNull ParceledListSlice mActions; /** Remote credential entry to get the response from a different device. */ private final @Nullable RemoteEntry mRemoteCredentialEntry; @@ -51,31 +52,30 @@ public final class BeginGetCredentialResponse implements Parcelable { * or {@link Action} to return. */ public BeginGetCredentialResponse() { - this(/*credentialEntries=*/new ArrayList<>(), - /*authenticationActions=*/new ArrayList<>(), - /*actions=*/new ArrayList<>(), + this(/*credentialEntries=*/new ParceledListSlice<>(new ArrayList<>()), + /*authenticationEntries=*/new ParceledListSlice<>(new ArrayList<>()), + /*actions=*/new ParceledListSlice<>(new ArrayList<>()), /*remoteCredentialEntry=*/null); } - private BeginGetCredentialResponse(@NonNull List credentialEntries, - @NonNull List authenticationEntries, @NonNull List actions, + private BeginGetCredentialResponse( + @NonNull ParceledListSlice credentialEntries, + @NonNull ParceledListSlice authenticationEntries, + @NonNull ParceledListSlice actions, @Nullable RemoteEntry remoteCredentialEntry) { - mCredentialEntries = new ArrayList<>(credentialEntries); - mAuthenticationEntries = new ArrayList<>(authenticationEntries); - mActions = new ArrayList<>(actions); + mCredentialEntries = credentialEntries; + mAuthenticationEntries = authenticationEntries; + mActions = actions; mRemoteCredentialEntry = remoteCredentialEntry; } private BeginGetCredentialResponse(@NonNull Parcel in) { - List credentialEntries = new ArrayList<>(); - in.readTypedList(credentialEntries, CredentialEntry.CREATOR); - mCredentialEntries = credentialEntries; - List authenticationEntries = new ArrayList<>(); - in.readTypedList(authenticationEntries, Action.CREATOR); - mAuthenticationEntries = authenticationEntries; - List actions = new ArrayList<>(); - in.readTypedList(actions, Action.CREATOR); - mActions = actions; + mCredentialEntries = in.readParcelable( + null, android.content.pm.ParceledListSlice.class); + mAuthenticationEntries = in.readParcelable( + null, android.content.pm.ParceledListSlice.class); + mActions = in.readParcelable( + null, android.content.pm.ParceledListSlice.class); mRemoteCredentialEntry = in.readTypedObject(RemoteEntry.CREATOR); } @@ -99,9 +99,9 @@ public final class BeginGetCredentialResponse implements Parcelable { @Override public void writeToParcel(@NonNull Parcel dest, int flags) { - dest.writeTypedList(mCredentialEntries, flags); - dest.writeTypedList(mAuthenticationEntries, flags); - dest.writeTypedList(mActions, flags); + dest.writeParcelable(mCredentialEntries, flags); + dest.writeParcelable(mAuthenticationEntries, flags); + dest.writeParcelable(mActions, flags); dest.writeTypedObject(mRemoteCredentialEntry, flags); } @@ -109,21 +109,22 @@ public final class BeginGetCredentialResponse implements Parcelable { * Returns the list of credential entries to be displayed on the UI. */ public @NonNull List getCredentialEntries() { - return mCredentialEntries; + return mCredentialEntries.getList(); } /** * Returns the list of authentication entries to be displayed on the UI. */ public @NonNull List getAuthenticationActions() { - return mAuthenticationEntries; + return mAuthenticationEntries.getList(); } /** * Returns the list of actions to be displayed on the UI. */ public @NonNull List getActions() { - return mActions; + + return mActions.getList(); } /** @@ -268,8 +269,11 @@ public final class BeginGetCredentialResponse implements Parcelable { * Builds a {@link BeginGetCredentialResponse} instance. */ public @NonNull BeginGetCredentialResponse build() { - return new BeginGetCredentialResponse(mCredentialEntries, mAuthenticationEntries, - mActions, mRemoteCredentialEntry); + return new BeginGetCredentialResponse( + new ParceledListSlice<>(mCredentialEntries), + new ParceledListSlice<>(mAuthenticationEntries), + new ParceledListSlice<>(mActions), + mRemoteCredentialEntry); } } }