From 094fa9109e4e7a2e23422ebc1e0c337b1fac8992 Mon Sep 17 00:00:00 2001 From: Omer Ozer Date: Fri, 10 Mar 2023 05:26:12 +0000 Subject: [PATCH] Add sessions to requestsession Update the matching logic within CredentialService and add ProviderRegistryGetSession to GetRequestSession. Bug: 272649023 Test: manual Change-Id: Ied7bedb9afb813279f90f7bb5c0c1f765d374bc6 --- .../CredentialDescriptionRegistry.java | 4 +-- .../credentials/CredentialManagerService.java | 28 +++++++++++-------- .../server/credentials/RequestSession.java | 4 +++ 3 files changed, 23 insertions(+), 13 deletions(-) diff --git a/services/credentials/java/com/android/server/credentials/CredentialDescriptionRegistry.java b/services/credentials/java/com/android/server/credentials/CredentialDescriptionRegistry.java index 3b92cc9647f73..8ccc61b70f459 100644 --- a/services/credentials/java/com/android/server/credentials/CredentialDescriptionRegistry.java +++ b/services/credentials/java/com/android/server/credentials/CredentialDescriptionRegistry.java @@ -221,12 +221,12 @@ public class CredentialDescriptionRegistry { return false; } - private static boolean checkForMatch(Set registeredUnflattenedStrings, + static boolean checkForMatch(Set registeredUnflattenedStrings, Set requestedUnflattenedString) { return registeredUnflattenedStrings.containsAll(requestedUnflattenedString); } - private static Set flatStringToSet(String flatString) { + static Set flatStringToSet(String flatString) { return new HashSet<>(Arrays .asList(flatString.split(FLAT_STRING_SPLIT_REGEX))); } diff --git a/services/credentials/java/com/android/server/credentials/CredentialManagerService.java b/services/credentials/java/com/android/server/credentials/CredentialManagerService.java index a58dbe5814376..10d3dc030362b 100644 --- a/services/credentials/java/com/android/server/credentials/CredentialManagerService.java +++ b/services/credentials/java/com/android/server/credentials/CredentialManagerService.java @@ -291,14 +291,15 @@ public final class CredentialManagerService List providerSessions = new ArrayList<>(); for (Pair result : activeCredentialContainers) { - providerSessions.add( - ProviderRegistryGetSession.createNewSession( - mContext, - UserHandle.getCallingUserId(), - session, - session.mClientAppInfo, - result.second.mPackageName, - result.first)); + ProviderSession providerSession = ProviderRegistryGetSession.createNewSession( + mContext, + UserHandle.getCallingUserId(), + session, + session.mClientAppInfo, + result.second.mPackageName, + result.first); + providerSessions.add(providerSession); + session.addProviderSession(providerSession.getComponentName(), providerSession); } return providerSessions; } @@ -328,10 +329,15 @@ public final class CredentialManagerService new HashSet<>(); for (CredentialDescriptionRegistry.FilterResult filterResult : filterResults) { + Set registeredUnflattenedStrings = CredentialDescriptionRegistry + .flatStringToSet(filterResult.mFlattenedRequest); for (CredentialOption credentialOption : options) { - if (filterResult.mFlattenedRequest.equals(credentialOption - .getCredentialRetrievalData() - .getString(CredentialOption.FLATTENED_REQUEST))) { + Set requestedUnflattenedStrings = CredentialDescriptionRegistry + .flatStringToSet(credentialOption + .getCredentialRetrievalData() + .getString(CredentialOption.FLATTENED_REQUEST)); + if (CredentialDescriptionRegistry.checkForMatch(registeredUnflattenedStrings, + requestedUnflattenedStrings)) { result.add(new Pair<>(credentialOption, filterResult)); } } diff --git a/services/credentials/java/com/android/server/credentials/RequestSession.java b/services/credentials/java/com/android/server/credentials/RequestSession.java index ebd155a379d6d..edddba0bedd3c 100644 --- a/services/credentials/java/com/android/server/credentials/RequestSession.java +++ b/services/credentials/java/com/android/server/credentials/RequestSession.java @@ -128,6 +128,10 @@ abstract class RequestSession implements CredentialManagerUi.CredentialMan this.mInitialPhaseMetric.setCountRequestClassType(requestClassType); } + public void addProviderSession(ComponentName componentName, ProviderSession providerSession) { + mProviders.put(componentName.flattenToString(), providerSession); + } + // UI callbacks @Override // from CredentialManagerUiCallbacks