Merge "Fix bug in getting enabled providers" into udc-dev am: 35b0657cbb
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/21934480 Change-Id: I1a590e26bae0a9f8893035f8a991be23e222b860 Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
@@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
Reference in New Issue
Block a user