Merge "Fix CredDesc reg flow bugs" into udc-dev

This commit is contained in:
Omer Ozer
2023-06-22 18:42:14 +00:00
committed by Android (Google) Code Review
2 changed files with 18 additions and 12 deletions

View File

@@ -28,6 +28,7 @@ import android.credentials.GetCredentialResponse;
import android.credentials.IGetCredentialCallback; import android.credentials.IGetCredentialCallback;
import android.credentials.ui.ProviderData; import android.credentials.ui.ProviderData;
import android.credentials.ui.RequestInfo; import android.credentials.ui.RequestInfo;
import android.os.Binder;
import android.os.CancellationSignal; import android.os.CancellationSignal;
import android.os.RemoteException; import android.os.RemoteException;
import android.service.credentials.CallingAppInfo; import android.service.credentials.CallingAppInfo;
@@ -98,8 +99,9 @@ public class GetRequestSession extends RequestSession<GetCredentialRequest,
protected void launchUiWithProviderData(ArrayList<ProviderData> providerDataList) { protected void launchUiWithProviderData(ArrayList<ProviderData> providerDataList) {
mRequestSessionMetric.collectUiCallStartTime(System.nanoTime()); mRequestSessionMetric.collectUiCallStartTime(System.nanoTime());
mCredentialManagerUi.setStatus(CredentialManagerUi.UiStatus.USER_INTERACTION); mCredentialManagerUi.setStatus(CredentialManagerUi.UiStatus.USER_INTERACTION);
cancelExistingPendingIntent(); Binder.withCleanCallingIdentity(()-> {
try { try {
cancelExistingPendingIntent();
mPendingIntent = mCredentialManagerUi.createPendingIntent( mPendingIntent = mCredentialManagerUi.createPendingIntent(
RequestInfo.newGetRequestInfo( RequestInfo.newGetRequestInfo(
mRequestId, mClientRequest, mClientAppInfo.getPackageName(), mRequestId, mClientRequest, mClientAppInfo.getPackageName(),
@@ -112,9 +114,9 @@ public class GetRequestSession extends RequestSession<GetCredentialRequest,
mCredentialManagerUi.setStatus(CredentialManagerUi.UiStatus.TERMINATED); mCredentialManagerUi.setStatus(CredentialManagerUi.UiStatus.TERMINATED);
String exception = GetCredentialException.TYPE_UNKNOWN; String exception = GetCredentialException.TYPE_UNKNOWN;
mRequestSessionMetric.collectFrameworkException(exception); mRequestSessionMetric.collectFrameworkException(exception);
respondToClientWithErrorAndFinish( respondToClientWithErrorAndFinish(exception, "Unable to instantiate selector");
exception, "Unable to instantiate selector");
} }
});
} }
@Override @Override

View File

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