Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 3bba8518 authored by Reema Bajwa's avatar Reema Bajwa
Browse files

Propagate disabled providers to the credential manager UI app

Test: Built locally

Change-Id: I006c74531e9cca71e3b83b8f57d549d632ed0943
parent 71d7b807
Loading
Loading
Loading
Loading
+27 −2
Original line number Diff line number Diff line
@@ -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