diff options
| -rw-r--r-- | services/credentials/java/com/android/server/credentials/ProviderGetSession.java | 18 |
1 files changed, 14 insertions, 4 deletions
diff --git a/services/credentials/java/com/android/server/credentials/ProviderGetSession.java b/services/credentials/java/com/android/server/credentials/ProviderGetSession.java index fa63bc899cb5..cad9a09247e6 100644 --- a/services/credentials/java/com/android/server/credentials/ProviderGetSession.java +++ b/services/credentials/java/com/android/server/credentials/ProviderGetSession.java @@ -93,7 +93,7 @@ public final class ProviderGetSession extends ProviderSession<BeginGetCredential android.credentials.GetCredentialRequest filteredRequest = filterOptions(providerInfo.getCapabilities(), getRequestSession.mClientRequest, - providerInfo); + providerInfo, getRequestSession.mHybridService); if (filteredRequest != null) { Map<String, CredentialOption> beginGetOptionToCredentialOptionMap = new HashMap<>(); @@ -129,7 +129,7 @@ public final class ProviderGetSession extends ProviderSession<BeginGetCredential android.credentials.GetCredentialRequest filteredRequest = filterOptions(providerInfo.getCapabilities(), getRequestSession.mClientRequest, - providerInfo); + providerInfo, getRequestSession.mHybridService); if (filteredRequest != null) { Map<String, CredentialOption> beginGetOptionToCredentialOptionMap = new HashMap<>(); @@ -179,9 +179,19 @@ public final class ProviderGetSession extends ProviderSession<BeginGetCredential private static android.credentials.GetCredentialRequest filterOptions( List<String> providerCapabilities, android.credentials.GetCredentialRequest clientRequest, - CredentialProviderInfo info - ) { + CredentialProviderInfo info, + String hybridService) { Slog.i(TAG, "Filtering request options for: " + info.getComponentName()); + if (android.credentials.flags.Flags.hybridFilterFixEnabled()) { + ComponentName hybridComponentName = ComponentName.unflattenFromString(hybridService); + if (hybridComponentName != null && hybridComponentName + .equals(info.getComponentName())) { + Slog.i(TAG, "Skipping filtering of options for hybrid service"); + return clientRequest; + } + Slog.w(TAG, "Could not parse hybrid service while filtering options"); + } + List<CredentialOption> filteredOptions = new ArrayList<>(); for (CredentialOption option : clientRequest.getCredentialOptions()) { if (providerCapabilities.contains(option.getType()) |