diff options
| author | 2022-12-19 20:47:49 +0000 | |
|---|---|---|
| committer | 2022-12-19 20:47:49 +0000 | |
| commit | d39590ae6afbfef361b436073724675e0bb1d92b (patch) | |
| tree | e2b0f3aebca232c475d3c56cf42f29299bdc40c0 | |
| parent | dfb178d1d00030af24f669ab880da331c7552699 (diff) | |
| parent | 3bba8518f181686bdff922a3ac3362ac2de6abd5 (diff) | |
Merge "Propagate disabled providers to the credential manager UI app"
| -rw-r--r-- | services/credentials/java/com/android/server/credentials/CredentialManagerUi.java | 29 |
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 |