Propagate disabled providers to the credential manager UI app

Test: Built locally

Change-Id: I006c74531e9cca71e3b83b8f57d549d632ed0943
This commit is contained in:
Reema Bajwa
2022-12-19 01:43:09 +00:00
parent 71d7b807bc
commit 3bba8518f1

View File

@@ -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