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

This commit is contained in:
Reema Bajwa
2023-03-10 01:18:41 +00:00
committed by Android (Google) Code Review
2 changed files with 22 additions and 36 deletions

View File

@@ -328,7 +328,7 @@ public final class CredentialProviderInfoFactory {
@NonNull Context context, @NonNull Context context,
@UserIdInt int userId, @UserIdInt int userId,
boolean disableSystemAppVerificationForTests, boolean disableSystemAppVerificationForTests,
Set<ServiceInfo> enabledServices) { Set<ComponentName> enabledServices) {
requireNonNull(context, "context must not be null"); requireNonNull(context, "context must not be null");
final List<CredentialProviderInfo> providerInfos = new ArrayList<>(); final List<CredentialProviderInfo> providerInfos = new ArrayList<>();
@@ -342,7 +342,7 @@ public final class CredentialProviderInfoFactory {
si, si,
/* isSystemProvider= */ true, /* isSystemProvider= */ true,
disableSystemAppVerificationForTests, disableSystemAppVerificationForTests,
enabledServices.contains(si)); enabledServices.contains(si.getComponentName()));
if (cpi.isSystemProvider()) { if (cpi.isSystemProvider()) {
providerInfos.add(cpi); providerInfos.add(cpi);
} else { } else {
@@ -370,31 +370,6 @@ public final class CredentialProviderInfoFactory {
return null; 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 * Returns the valid credential provider services available for the user with the given {@code
* userId}. * userId}.
@@ -404,7 +379,7 @@ public final class CredentialProviderInfoFactory {
@NonNull Context context, @NonNull Context context,
int userId, int userId,
int providerFilter, int providerFilter,
Set<ServiceInfo> enabledServices) { Set<ComponentName> enabledServices) {
requireNonNull(context, "context must not be null"); requireNonNull(context, "context must not be null");
// Get the device policy. // Get the device policy.
@@ -433,7 +408,7 @@ public final class CredentialProviderInfoFactory {
@NonNull Context context, @NonNull Context context,
int userId, int userId,
int providerFilter, int providerFilter,
Set<ServiceInfo> enabledServices) { Set<ComponentName> enabledServices) {
requireNonNull(context, "context must not be null"); requireNonNull(context, "context must not be null");
// Get the device policy. // Get the device policy.
@@ -539,7 +514,7 @@ public final class CredentialProviderInfoFactory {
@NonNull Context context, @NonNull Context context,
@UserIdInt int userId, @UserIdInt int userId,
boolean disableSystemAppVerificationForTests, boolean disableSystemAppVerificationForTests,
Set<ServiceInfo> enabledServices) { Set<ComponentName> enabledServices) {
final List<CredentialProviderInfo> services = new ArrayList<>(); final List<CredentialProviderInfo> services = new ArrayList<>();
final List<ResolveInfo> resolveInfos = final List<ResolveInfo> resolveInfos =
context.getPackageManager() context.getPackageManager()
@@ -549,6 +524,11 @@ public final class CredentialProviderInfoFactory {
userId); userId);
for (ResolveInfo resolveInfo : resolveInfos) { for (ResolveInfo resolveInfo : resolveInfos) {
final ServiceInfo serviceInfo = resolveInfo.serviceInfo; final ServiceInfo serviceInfo = resolveInfo.serviceInfo;
if (serviceInfo == null) {
Log.i(TAG, "No serviceInfo found for resolveInfo so skipping this provider");
continue;
}
try { try {
CredentialProviderInfo cpi = CredentialProviderInfo cpi =
CredentialProviderInfoFactory.create( CredentialProviderInfoFactory.create(
@@ -556,7 +536,7 @@ public final class CredentialProviderInfoFactory {
serviceInfo, serviceInfo,
/* isSystemProvider= */ false, /* isSystemProvider= */ false,
disableSystemAppVerificationForTests, disableSystemAppVerificationForTests,
enabledServices.contains(serviceInfo)); enabledServices.contains(serviceInfo.getComponentName()));
if (!cpi.isSystemProvider()) { if (!cpi.isSystemProvider()) {
services.add(cpi); services.add(cpi);
} }

View File

@@ -29,7 +29,6 @@ import android.content.ComponentName;
import android.content.Context; import android.content.Context;
import android.content.pm.PackageInfo; import android.content.pm.PackageInfo;
import android.content.pm.PackageManager; import android.content.pm.PackageManager;
import android.content.pm.ServiceInfo;
import android.credentials.ClearCredentialStateRequest; import android.credentials.ClearCredentialStateRequest;
import android.credentials.CreateCredentialException; import android.credentials.CreateCredentialException;
import android.credentials.CreateCredentialRequest; import android.credentials.CreateCredentialRequest;
@@ -696,13 +695,20 @@ public final class CredentialManagerService
@SuppressWarnings("GuardedBy") // ErrorProne requires service.mLock which is the same @SuppressWarnings("GuardedBy") // ErrorProne requires service.mLock which is the same
// this.mLock // this.mLock
private Set<ServiceInfo> getEnabledProviders() { private Set<ComponentName> getEnabledProviders() {
Set<ServiceInfo> enabledProviders = new HashSet<>(); Set<ComponentName> enabledProviders = new HashSet<>();
synchronized (mLock) { synchronized (mLock) {
runForUser( runForUser(
(service) -> { (service) -> {
enabledProviders.add( try {
service.getCredentialProviderInfo().getServiceInfo()); enabledProviders.add(
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; return enabledProviders;