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

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

Merge "Fix bug in getting enabled providers" into udc-dev

parents d4ef43a7 a4e539ba
Loading
Loading
Loading
Loading
+11 −31
Original line number Diff line number Diff line
@@ -328,7 +328,7 @@ public final class CredentialProviderInfoFactory {
            @NonNull Context context,
            @UserIdInt int userId,
            boolean disableSystemAppVerificationForTests,
            Set<ServiceInfo> enabledServices) {
            Set<ComponentName> enabledServices) {
        requireNonNull(context, "context must not be null");

        final List<CredentialProviderInfo> providerInfos = new ArrayList<>();
@@ -342,7 +342,7 @@ public final class CredentialProviderInfoFactory {
                                si,
                                /* isSystemProvider= */ true,
                                disableSystemAppVerificationForTests,
                                enabledServices.contains(si));
                                enabledServices.contains(si.getComponentName()));
                if (cpi.isSystemProvider()) {
                    providerInfos.add(cpi);
                } else {
@@ -370,31 +370,6 @@ public final class CredentialProviderInfoFactory {
        return null;
    }

    /**
     * Returns a valid credential provider that has the given package name. Returns null if no
     * match is found.
     */
    @Nullable
    public static CredentialProviderInfo getCredentialProviderFromPackageName(
            @NonNull Context context,
            int userId,
            @NonNull String packageName,
            int providerFilter,
            @NonNull Set<ServiceInfo> enabledServices) {
        requireNonNull(context, "context must not be null");
        requireNonNull(packageName, "package name must not be null");
        requireNonNull(enabledServices, "enabledServices must not be null");

        for (CredentialProviderInfo credentialProviderInfo : getCredentialProviderServices(context,
                userId, providerFilter, enabledServices)) {
            if (credentialProviderInfo.getServiceInfo()
                    .packageName.equals(packageName)) {
                return credentialProviderInfo;
            }
        }
        return null;
    }

    /**
     * Returns the valid credential provider services available for the user with the given {@code
     * userId}.
@@ -404,7 +379,7 @@ public final class CredentialProviderInfoFactory {
            @NonNull Context context,
            int userId,
            int providerFilter,
            Set<ServiceInfo> enabledServices) {
            Set<ComponentName> enabledServices) {
        requireNonNull(context, "context must not be null");

        // Get the device policy.
@@ -433,7 +408,7 @@ public final class CredentialProviderInfoFactory {
            @NonNull Context context,
            int userId,
            int providerFilter,
            Set<ServiceInfo> enabledServices) {
            Set<ComponentName> enabledServices) {
        requireNonNull(context, "context must not be null");

        // Get the device policy.
@@ -539,7 +514,7 @@ public final class CredentialProviderInfoFactory {
            @NonNull Context context,
            @UserIdInt int userId,
            boolean disableSystemAppVerificationForTests,
            Set<ServiceInfo> enabledServices) {
            Set<ComponentName> enabledServices) {
        final List<CredentialProviderInfo> services = new ArrayList<>();
        final List<ResolveInfo> resolveInfos =
                context.getPackageManager()
@@ -549,6 +524,11 @@ public final class CredentialProviderInfoFactory {
                                userId);
        for (ResolveInfo resolveInfo : resolveInfos) {
            final ServiceInfo serviceInfo = resolveInfo.serviceInfo;
            if (serviceInfo == null) {
                Log.i(TAG, "No serviceInfo found for resolveInfo so skipping this provider");
                continue;
            }

            try {
                CredentialProviderInfo cpi =
                        CredentialProviderInfoFactory.create(
@@ -556,7 +536,7 @@ public final class CredentialProviderInfoFactory {
                                serviceInfo,
                                /* isSystemProvider= */ false,
                                disableSystemAppVerificationForTests,
                                enabledServices.contains(serviceInfo));
                                enabledServices.contains(serviceInfo.getComponentName()));
                if (!cpi.isSystemProvider()) {
                    services.add(cpi);
                }
+11 −5
Original line number Diff line number Diff line
@@ -29,7 +29,6 @@ import android.content.ComponentName;
import android.content.Context;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.ServiceInfo;
import android.credentials.ClearCredentialStateRequest;
import android.credentials.CreateCredentialException;
import android.credentials.CreateCredentialRequest;
@@ -696,13 +695,20 @@ public final class CredentialManagerService

        @SuppressWarnings("GuardedBy") // ErrorProne requires service.mLock which is the same
        // this.mLock
        private Set<ServiceInfo> getEnabledProviders() {
            Set<ServiceInfo> enabledProviders = new HashSet<>();
        private Set<ComponentName> getEnabledProviders() {
            Set<ComponentName> enabledProviders = new HashSet<>();
            synchronized (mLock) {
                runForUser(
                        (service) -> {
                            try {
                                enabledProviders.add(
                                    service.getCredentialProviderInfo().getServiceInfo());
                                        service.getCredentialProviderInfo()
                                                .getServiceInfo().getComponentName());
                            } catch (NullPointerException e) {
                                // Safe check
                                Log.i(TAG, "Skipping provider as either the providerInfo"
                                        + "or serviceInfo is null - weird");
                            }
                        });
            }
            return enabledProviders;