summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Reema Bajwa <reemabajwa@google.com> 2022-12-19 20:47:49 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2022-12-19 20:47:49 +0000
commitd39590ae6afbfef361b436073724675e0bb1d92b (patch)
treee2b0f3aebca232c475d3c56cf42f29299bdc40c0
parentdfb178d1d00030af24f669ab880da331c7552699 (diff)
parent3bba8518f181686bdff922a3ac3362ac2de6abd5 (diff)
Merge "Propagate disabled providers to the credential manager UI app"
-rw-r--r--services/credentials/java/com/android/server/credentials/CredentialManagerUi.java29
1 files changed, 27 insertions, 2 deletions
diff --git a/services/credentials/java/com/android/server/credentials/CredentialManagerUi.java b/services/credentials/java/com/android/server/credentials/CredentialManagerUi.java
index 33c5ec908838..64a5152803ce 100644
--- a/services/credentials/java/com/android/server/credentials/CredentialManagerUi.java
+++ b/services/credentials/java/com/android/server/credentials/CredentialManagerUi.java
@@ -17,8 +17,11 @@ package com.android.server.credentials;
import android.annotation.NonNull;
import android.app.PendingIntent;
+import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
+import android.content.pm.ServiceInfo;
+import android.credentials.ui.DisabledProviderData;
import android.credentials.ui.IntentFactory;
import android.credentials.ui.ProviderData;
import android.credentials.ui.RequestInfo;
@@ -27,11 +30,14 @@ import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.os.ResultReceiver;
+import android.service.credentials.CredentialProviderInfo;
import android.util.Log;
import android.util.Slog;
import java.util.ArrayList;
+import java.util.Set;
import java.util.UUID;
+import java.util.stream.Collectors;
/** Initiates the Credential Manager UI and receives results. */
public class CredentialManagerUi {
@@ -89,8 +95,27 @@ public class CredentialManagerUi {
public PendingIntent createPendingIntent(
RequestInfo requestInfo, ArrayList<ProviderData> providerDataList) {
Log.i(TAG, "In createPendingIntent");
- Intent intent = IntentFactory.newIntent(requestInfo, providerDataList, new ArrayList<>(),
- mResultReceiver)
+
+ ArrayList<DisabledProviderData> disabledProviderDataList = new ArrayList<>();
+ Set<String> enabledProviders = providerDataList.stream()
+ .map(ProviderData::getProviderFlattenedComponentName)
+ .collect(Collectors.toUnmodifiableSet());
+ // TODO("Filter out non user configurable providers")
+ Set<String> allProviders =
+ CredentialProviderInfo.getAvailableServices(mContext, mUserId).stream()
+ .map(CredentialProviderInfo::getServiceInfo)
+ .map(ServiceInfo::getComponentName)
+ .map(ComponentName::flattenToString)
+ .collect(Collectors.toUnmodifiableSet());
+
+ for (String provider: allProviders) {
+ if (!enabledProviders.contains(provider)) {
+ disabledProviderDataList.add(new DisabledProviderData(provider));
+ }
+ }
+
+ Intent intent = IntentFactory.newIntent(requestInfo, providerDataList,
+ disabledProviderDataList, mResultReceiver)
.setAction(UUID.randomUUID().toString());
//TODO: Create unique pending intent using request code and cancel any pre-existing pending
// intents