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

Commit fa3d854a authored by Reema Bajwa's avatar Reema Bajwa
Browse files

Revert usage of ParceledListSlice in UI interface

Causes exception when screen is rotated

Test: built & deployed locally
Bug: 280524540

Change-Id: I45d2b5cbf6309c4809c3a0d3343c441a991e8e2f
parent 0d4cf06b
Loading
Loading
Loading
Loading
+7 −6
Original line number Original line Diff line number Diff line
@@ -19,7 +19,6 @@ package android.credentials.ui;
import android.annotation.NonNull;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.Nullable;
import android.annotation.TestApi;
import android.annotation.TestApi;
import android.content.pm.ParceledListSlice;
import android.os.Parcel;
import android.os.Parcel;
import android.os.Parcelable;
import android.os.Parcelable;


@@ -36,7 +35,7 @@ import java.util.List;
@TestApi
@TestApi
public final class CreateCredentialProviderData extends ProviderData implements Parcelable {
public final class CreateCredentialProviderData extends ProviderData implements Parcelable {
    @NonNull
    @NonNull
    private final ParceledListSlice<Entry> mSaveEntries;
    private final List<Entry> mSaveEntries;
    @Nullable
    @Nullable
    private final Entry mRemoteEntry;
    private final Entry mRemoteEntry;


@@ -44,13 +43,13 @@ public final class CreateCredentialProviderData extends ProviderData implements
            @NonNull String providerFlattenedComponentName, @NonNull List<Entry> saveEntries,
            @NonNull String providerFlattenedComponentName, @NonNull List<Entry> saveEntries,
            @Nullable Entry remoteEntry) {
            @Nullable Entry remoteEntry) {
        super(providerFlattenedComponentName);
        super(providerFlattenedComponentName);
        mSaveEntries = new ParceledListSlice<>(saveEntries);
        mSaveEntries = new ArrayList<>(saveEntries);
        mRemoteEntry = remoteEntry;
        mRemoteEntry = remoteEntry;
    }
    }


    @NonNull
    @NonNull
    public List<Entry> getSaveEntries() {
    public List<Entry> getSaveEntries() {
        return mSaveEntries.getList();
        return mSaveEntries;
    }
    }


    @Nullable
    @Nullable
@@ -61,7 +60,9 @@ public final class CreateCredentialProviderData extends ProviderData implements
    private CreateCredentialProviderData(@NonNull Parcel in) {
    private CreateCredentialProviderData(@NonNull Parcel in) {
        super(in);
        super(in);


        mSaveEntries = in.readParcelable(null, android.content.pm.ParceledListSlice.class);
        List<Entry> credentialEntries = new ArrayList<>();
        in.readTypedList(credentialEntries, Entry.CREATOR);
        mSaveEntries = credentialEntries;
        AnnotationValidations.validate(NonNull.class, null, mSaveEntries);
        AnnotationValidations.validate(NonNull.class, null, mSaveEntries);


        Entry remoteEntry = in.readTypedObject(Entry.CREATOR);
        Entry remoteEntry = in.readTypedObject(Entry.CREATOR);
@@ -71,7 +72,7 @@ public final class CreateCredentialProviderData extends ProviderData implements
    @Override
    @Override
    public void writeToParcel(@NonNull Parcel dest, int flags) {
    public void writeToParcel(@NonNull Parcel dest, int flags) {
        super.writeToParcel(dest, flags);
        super.writeToParcel(dest, flags);
        dest.writeParcelable(mSaveEntries, flags);
        dest.writeTypedList(mSaveEntries);
        dest.writeTypedObject(mRemoteEntry, flags);
        dest.writeTypedObject(mRemoteEntry, flags);
    }
    }


+22 −19
Original line number Original line Diff line number Diff line
@@ -19,7 +19,6 @@ package android.credentials.ui;
import android.annotation.NonNull;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.Nullable;
import android.annotation.TestApi;
import android.annotation.TestApi;
import android.content.pm.ParceledListSlice;
import android.os.Parcel;
import android.os.Parcel;
import android.os.Parcelable;
import android.os.Parcelable;


@@ -36,11 +35,11 @@ import java.util.List;
@TestApi
@TestApi
public final class GetCredentialProviderData extends ProviderData implements Parcelable {
public final class GetCredentialProviderData extends ProviderData implements Parcelable {
    @NonNull
    @NonNull
    private final ParceledListSlice<Entry> mCredentialEntries;
    private final List<Entry> mCredentialEntries;
    @NonNull
    @NonNull
    private final ParceledListSlice<Entry> mActionChips;
    private final List<Entry> mActionChips;
    @NonNull
    @NonNull
    private final ParceledListSlice<AuthenticationEntry> mAuthenticationEntries;
    private final List<AuthenticationEntry> mAuthenticationEntries;
    @Nullable
    @Nullable
    private final Entry mRemoteEntry;
    private final Entry mRemoteEntry;


@@ -50,25 +49,25 @@ public final class GetCredentialProviderData extends ProviderData implements Par
            @NonNull List<AuthenticationEntry> authenticationEntries,
            @NonNull List<AuthenticationEntry> authenticationEntries,
            @Nullable Entry remoteEntry) {
            @Nullable Entry remoteEntry) {
        super(providerFlattenedComponentName);
        super(providerFlattenedComponentName);
        mCredentialEntries = new ParceledListSlice<>(credentialEntries);
        mCredentialEntries = new ArrayList<>(credentialEntries);
        mActionChips = new ParceledListSlice<>(actionChips);
        mActionChips = new ArrayList<>(actionChips);
        mAuthenticationEntries = new ParceledListSlice<>(authenticationEntries);
        mAuthenticationEntries = new ArrayList<>(authenticationEntries);
        mRemoteEntry = remoteEntry;
        mRemoteEntry = remoteEntry;
    }
    }


    @NonNull
    @NonNull
    public List<Entry> getCredentialEntries() {
    public List<Entry> getCredentialEntries() {
        return mCredentialEntries.getList();
        return mCredentialEntries;
    }
    }


    @NonNull
    @NonNull
    public List<Entry> getActionChips() {
    public List<Entry> getActionChips() {
        return mActionChips.getList();
        return mActionChips;
    }
    }


    @NonNull
    @NonNull
    public List<AuthenticationEntry> getAuthenticationEntries() {
    public List<AuthenticationEntry> getAuthenticationEntries() {
        return mAuthenticationEntries.getList();
        return mAuthenticationEntries;
    }
    }


    @Nullable
    @Nullable
@@ -78,16 +77,20 @@ public final class GetCredentialProviderData extends ProviderData implements Par


    private GetCredentialProviderData(@NonNull Parcel in) {
    private GetCredentialProviderData(@NonNull Parcel in) {
        super(in);
        super(in);
        mCredentialEntries = in.readParcelable(null,

                android.content.pm.ParceledListSlice.class);
        List<Entry> credentialEntries = new ArrayList<>();
        in.readTypedList(credentialEntries, Entry.CREATOR);
        mCredentialEntries = credentialEntries;
        AnnotationValidations.validate(NonNull.class, null, mCredentialEntries);
        AnnotationValidations.validate(NonNull.class, null, mCredentialEntries);


        mActionChips = in.readParcelable(null,
        List<Entry> actionChips  = new ArrayList<>();
                android.content.pm.ParceledListSlice.class);
        in.readTypedList(actionChips, Entry.CREATOR);
        mActionChips = actionChips;
        AnnotationValidations.validate(NonNull.class, null, mActionChips);
        AnnotationValidations.validate(NonNull.class, null, mActionChips);


        mAuthenticationEntries = in.readParcelable(null,
        List<AuthenticationEntry> authenticationEntries  = new ArrayList<>();
                android.content.pm.ParceledListSlice.class);
        in.readTypedList(authenticationEntries, AuthenticationEntry.CREATOR);
        mAuthenticationEntries = authenticationEntries;
        AnnotationValidations.validate(NonNull.class, null, mAuthenticationEntries);
        AnnotationValidations.validate(NonNull.class, null, mAuthenticationEntries);


        Entry remoteEntry = in.readTypedObject(Entry.CREATOR);
        Entry remoteEntry = in.readTypedObject(Entry.CREATOR);
@@ -97,9 +100,9 @@ public final class GetCredentialProviderData extends ProviderData implements Par
    @Override
    @Override
    public void writeToParcel(@NonNull Parcel dest, int flags) {
    public void writeToParcel(@NonNull Parcel dest, int flags) {
        super.writeToParcel(dest, flags);
        super.writeToParcel(dest, flags);
        dest.writeParcelable(mCredentialEntries, flags);
        dest.writeTypedList(mCredentialEntries);
        dest.writeParcelable(mActionChips, flags);
        dest.writeTypedList(mActionChips);
        dest.writeParcelable(mAuthenticationEntries, flags);
        dest.writeTypedList(mAuthenticationEntries);
        dest.writeTypedObject(mRemoteEntry, flags);
        dest.writeTypedObject(mRemoteEntry, flags);
    }
    }


+8 −1
Original line number Original line Diff line number Diff line
@@ -33,6 +33,7 @@ import android.os.IBinder;
import android.os.Looper;
import android.os.Looper;
import android.os.ResultReceiver;
import android.os.ResultReceiver;
import android.service.credentials.CredentialProviderInfoFactory;
import android.service.credentials.CredentialProviderInfoFactory;
import android.util.Log;
import android.util.Slog;
import android.util.Slog;


import java.util.ArrayList;
import java.util.ArrayList;
@@ -71,6 +72,8 @@ public class CredentialManagerUi {
    };
    };


    private void handleUiResult(int resultCode, Bundle resultData) {
    private void handleUiResult(int resultCode, Bundle resultData) {
        Log.i("reemademo", "handleUiResult with resultCOde: " + resultCode);

        switch (resultCode) {
        switch (resultCode) {
            case UserSelectionDialogResult.RESULT_CODE_DIALOG_COMPLETE_WITH_SELECTION:
            case UserSelectionDialogResult.RESULT_CODE_DIALOG_COMPLETE_WITH_SELECTION:
                mStatus = UiStatus.IN_PROGRESS;
                mStatus = UiStatus.IN_PROGRESS;
@@ -83,10 +86,14 @@ public class CredentialManagerUi {
                }
                }
                break;
                break;
            case UserSelectionDialogResult.RESULT_CODE_DIALOG_USER_CANCELED:
            case UserSelectionDialogResult.RESULT_CODE_DIALOG_USER_CANCELED:
                Log.i("reemademo", "RESULT_CODE_DIALOG_USER_CANCELED");

                mStatus = UiStatus.TERMINATED;
                mStatus = UiStatus.TERMINATED;
                mCallbacks.onUiCancellation(/* isUserCancellation= */ true);
                mCallbacks.onUiCancellation(/* isUserCancellation= */ true);
                break;
                break;
            case UserSelectionDialogResult.RESULT_CODE_CANCELED_AND_LAUNCHED_SETTINGS:
            case UserSelectionDialogResult.RESULT_CODE_CANCELED_AND_LAUNCHED_SETTINGS:
                Log.i("reemademo", "RESULT_CODE_CANCELED_AND_LAUNCHED_SETTINGS");

                mStatus = UiStatus.TERMINATED;
                mStatus = UiStatus.TERMINATED;
                mCallbacks.onUiCancellation(/* isUserCancellation= */ false);
                mCallbacks.onUiCancellation(/* isUserCancellation= */ false);
                break;
                break;
@@ -95,7 +102,7 @@ public class CredentialManagerUi {
                mCallbacks.onUiSelectorInvocationFailure();
                mCallbacks.onUiSelectorInvocationFailure();
                break;
                break;
            default:
            default:
                Slog.i(TAG, "Unknown error code returned from the UI");
                Log.i("reemademo", "Unknown error code returned from the UI");
                mStatus = UiStatus.IN_PROGRESS;
                mStatus = UiStatus.IN_PROGRESS;
                mCallbacks.onUiSelectorInvocationFailure();
                mCallbacks.onUiSelectorInvocationFailure();
                break;
                break;