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

Commit 78998cca authored by Omer Ozer's avatar Omer Ozer
Browse files

Fix CredDesc reg flow bugs

Fixed the issue caused by intent creation without system context and the
npe caused by null action chip list. Dropping then restoring caller id
before intent creation and passing an empty list to avoid npe.
Using uuid to distinguish different cred options in session.

Bug: 287538489
Bug: 287529343
Bug: 287689739
Test: local
Change-Id: I5612dd0f08a90a762c5ca5794a55a7abccecad2f
parent 6afdda2f
Loading
Loading
Loading
Loading
+6 −4
Original line number Diff line number Diff line
@@ -28,6 +28,7 @@ import android.credentials.GetCredentialResponse;
import android.credentials.IGetCredentialCallback;
import android.credentials.ui.ProviderData;
import android.credentials.ui.RequestInfo;
import android.os.Binder;
import android.os.CancellationSignal;
import android.os.RemoteException;
import android.service.credentials.CallingAppInfo;
@@ -98,8 +99,9 @@ public class GetRequestSession extends RequestSession<GetCredentialRequest,
    protected void launchUiWithProviderData(ArrayList<ProviderData> providerDataList) {
        mRequestSessionMetric.collectUiCallStartTime(System.nanoTime());
        mCredentialManagerUi.setStatus(CredentialManagerUi.UiStatus.USER_INTERACTION);
        cancelExistingPendingIntent();
        Binder.withCleanCallingIdentity(()-> {
        try {
                cancelExistingPendingIntent();
            mPendingIntent = mCredentialManagerUi.createPendingIntent(
                    RequestInfo.newGetRequestInfo(
                            mRequestId, mClientRequest, mClientAppInfo.getPackageName(),
@@ -112,9 +114,9 @@ public class GetRequestSession extends RequestSession<GetCredentialRequest,
            mCredentialManagerUi.setStatus(CredentialManagerUi.UiStatus.TERMINATED);
            String exception = GetCredentialException.TYPE_UNKNOWN;
            mRequestSessionMetric.collectFrameworkException(exception);
            respondToClientWithErrorAndFinish(
                    exception, "Unable to instantiate selector");
                respondToClientWithErrorAndFinish(exception, "Unable to instantiate selector");
            }
        });
    }

    @Override
+12 −8
Original line number Diff line number Diff line
@@ -38,11 +38,13 @@ import android.util.Slog;
import com.android.internal.annotations.VisibleForTesting;

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.UUID;
import java.util.function.Function;
import java.util.stream.Collectors;
import java.util.stream.Stream;
@@ -116,7 +118,7 @@ public class ProviderRegistryGetSession extends ProviderSession<CredentialOption
            @NonNull String servicePackageName,
            @NonNull CredentialOption requestOption) {
        super(context, requestOption, session,
                new ComponentName(servicePackageName, servicePackageName),
                new ComponentName(servicePackageName, UUID.randomUUID().toString()),
                userId, null);
        mCredentialDescriptionRegistry = CredentialDescriptionRegistry.forUser(userId);
        mCallingAppInfo = callingAppInfo;
@@ -133,7 +135,7 @@ public class ProviderRegistryGetSession extends ProviderSession<CredentialOption
            @NonNull String servicePackageName,
            @NonNull CredentialOption requestOption) {
        super(context, requestOption, session,
                new ComponentName(servicePackageName, servicePackageName),
                new ComponentName(servicePackageName, UUID.randomUUID().toString()),
                userId, null);
        mCredentialDescriptionRegistry = CredentialDescriptionRegistry.forUser(userId);
        mCallingAppInfo = callingAppInfo;
@@ -179,7 +181,9 @@ public class ProviderRegistryGetSession extends ProviderSession<CredentialOption
            return null;
        }
        return new GetCredentialProviderData.Builder(
                mComponentName.flattenToString()).setActionChips(null)
                mComponentName.flattenToString())
                .setActionChips(Collections.EMPTY_LIST)
                .setAuthenticationEntries(Collections.EMPTY_LIST)
                .setCredentialEntries(prepareUiCredentialEntries(
                        mProviderResponse.stream().flatMap((Function<CredentialDescriptionRegistry
                                        .FilterResult,
@@ -262,8 +266,8 @@ public class ProviderRegistryGetSession extends ProviderSession<CredentialOption
                        mElementKeys);
        mCredentialEntries = mProviderResponse.stream().flatMap(
                            (Function<CredentialDescriptionRegistry.FilterResult,
                        Stream<CredentialEntry>>) filterResult
                        -> filterResult.mCredentialEntries.stream())
                                    Stream<CredentialEntry>>)
                filterResult -> filterResult.mCredentialEntries.stream())
                    .collect(Collectors.toList());
        updateStatusAndInvokeCallback(Status.CREDENTIALS_RECEIVED,
                    /*source=*/ CredentialsSource.REGISTRY);