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
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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,
|
||||
@@ -261,12 +265,12 @@ public class ProviderRegistryGetSession extends ProviderSession<CredentialOption
|
||||
.getFilteredResultForProvider(mCredentialProviderPackageName,
|
||||
mElementKeys);
|
||||
mCredentialEntries = mProviderResponse.stream().flatMap(
|
||||
(Function<CredentialDescriptionRegistry.FilterResult,
|
||||
Stream<CredentialEntry>>) filterResult
|
||||
-> filterResult.mCredentialEntries.stream())
|
||||
.collect(Collectors.toList());
|
||||
(Function<CredentialDescriptionRegistry.FilterResult,
|
||||
Stream<CredentialEntry>>)
|
||||
filterResult -> filterResult.mCredentialEntries.stream())
|
||||
.collect(Collectors.toList());
|
||||
updateStatusAndInvokeCallback(Status.CREDENTIALS_RECEIVED,
|
||||
/*source=*/ CredentialsSource.REGISTRY);
|
||||
/*source=*/ CredentialsSource.REGISTRY);
|
||||
mProviderSessionMetric.collectCandidateEntryMetrics(mCredentialEntries);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user