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

Commit d39590ae authored by Reema Bajwa's avatar Reema Bajwa Committed by Android (Google) Code Review
Browse files

Merge "Propagate disabled providers to the credential manager UI app"

parents dfb178d1 3bba8518
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