Merge "Fix isPrimary bit not being set" into udc-qpr-dev am: aec6d9da48
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/24498564
Change-Id: If9ef9bf368b1da67f870e150bf707c670f5df3db
Signed-off-by: Automerger Merge Worker <[email protected]>
diff --git a/core/api/test-current.txt b/core/api/test-current.txt
index 195282c..4ad00f4 100644
--- a/core/api/test-current.txt
+++ b/core/api/test-current.txt
@@ -1174,6 +1174,7 @@
method @Nullable public CharSequence getSettingsSubtitle();
method @NonNull public boolean hasCapability(@NonNull String);
method public boolean isEnabled();
+ method public boolean isPrimary();
method public boolean isSystemProvider();
method public void writeToParcel(@NonNull android.os.Parcel, int);
field @NonNull public static final android.os.Parcelable.Creator<android.credentials.CredentialProviderInfo> CREATOR;
diff --git a/core/java/android/credentials/CredentialProviderInfo.java b/core/java/android/credentials/CredentialProviderInfo.java
index d66b8f0..2bd3e4c 100644
--- a/core/java/android/credentials/CredentialProviderInfo.java
+++ b/core/java/android/credentials/CredentialProviderInfo.java
@@ -113,7 +113,6 @@
/**
* Returns whether the provider is set as primary by the user.
*
- * @hide
*/
public boolean isPrimary() {
return mIsPrimary;
diff --git a/core/java/android/service/credentials/CredentialProviderInfoFactory.java b/core/java/android/service/credentials/CredentialProviderInfoFactory.java
index b196b06..7eb81e6 100644
--- a/core/java/android/service/credentials/CredentialProviderInfoFactory.java
+++ b/core/java/android/service/credentials/CredentialProviderInfoFactory.java
@@ -415,7 +415,8 @@
si,
/* isSystemProvider= */ true,
disableSystemAppVerificationForTests,
- enabledServices.contains(si.getComponentName()), false);
+ enabledServices.contains(si.getComponentName()),
+ false);
if (cpi.isSystemProvider()) {
providerInfos.add(cpi);
} else {
@@ -454,7 +455,7 @@
int userId,
int providerFilter,
Set<ComponentName> enabledServices,
- Set<String> primaryServices) {
+ Set<ComponentName> primaryServices) {
requireNonNull(context, "context must not be null");
// Get the device policy.
@@ -488,7 +489,7 @@
int userId,
int providerFilter,
Set<ComponentName> enabledServices,
- Set<String> primaryServices) {
+ Set<ComponentName> primaryServices) {
requireNonNull(context, "context must not be null");
// Get the device policy.
@@ -599,7 +600,7 @@
@UserIdInt int userId,
boolean disableSystemAppVerificationForTests,
Set<ComponentName> enabledServices,
- Set<String> primaryServices) {
+ Set<ComponentName> primaryServices) {
final List<CredentialProviderInfo> services = new ArrayList<>();
final List<ResolveInfo> resolveInfos =
context.getPackageManager()
@@ -622,8 +623,7 @@
/* isSystemProvider= */ false,
disableSystemAppVerificationForTests,
enabledServices.contains(serviceInfo.getComponentName()),
- primaryServices.contains(
- serviceInfo.getComponentName().flattenToString()));
+ primaryServices.contains(serviceInfo.getComponentName()));
if (!cpi.isSystemProvider()) {
services.add(cpi);
}
diff --git a/services/credentials/java/com/android/server/credentials/CreateRequestSession.java b/services/credentials/java/com/android/server/credentials/CreateRequestSession.java
index c37a038..6899ad4 100644
--- a/services/credentials/java/com/android/server/credentials/CreateRequestSession.java
+++ b/services/credentials/java/com/android/server/credentials/CreateRequestSession.java
@@ -38,6 +38,7 @@
import com.android.server.credentials.metrics.ProviderStatusForMetrics;
import java.util.ArrayList;
+import java.util.List;
import java.util.Set;
/**
@@ -49,7 +50,7 @@
ICreateCredentialCallback, CreateCredentialResponse>
implements ProviderSession.ProviderInternalCallback<CreateCredentialResponse> {
private static final String TAG = "CreateRequestSession";
- private final Set<String> mPrimaryProviders;
+ private final Set<ComponentName> mPrimaryProviders;
CreateRequestSession(@NonNull Context context, RequestSession.SessionLifetime sessionCallback,
Object lock, int userId, int callingUid,
@@ -57,7 +58,7 @@
ICreateCredentialCallback callback,
CallingAppInfo callingAppInfo,
Set<ComponentName> enabledProviders,
- Set<String> primaryProviders,
+ Set<ComponentName> primaryProviders,
CancellationSignal cancellationSignal,
long startedTimestamp) {
super(context, sessionCallback, lock, userId, callingUid, request, callback,
@@ -96,13 +97,18 @@
mCredentialManagerUi.setStatus(CredentialManagerUi.UiStatus.USER_INTERACTION);
cancelExistingPendingIntent();
try {
+ List<String> flattenedPrimaryProviders = new ArrayList<>();
+ for (ComponentName cn : mPrimaryProviders) {
+ flattenedPrimaryProviders.add(cn.flattenToString());
+ }
+
mPendingIntent = mCredentialManagerUi.createPendingIntent(
RequestInfo.newCreateRequestInfo(
mRequestId, mClientRequest,
mClientAppInfo.getPackageName(),
PermissionUtils.hasPermission(mContext, mClientAppInfo.getPackageName(),
Manifest.permission.CREDENTIAL_MANAGER_SET_ALLOWED_PROVIDERS),
- /*defaultProviderId=*/new ArrayList<String>(mPrimaryProviders)),
+ /*defaultProviderId=*/flattenedPrimaryProviders),
providerDataList);
mClientCallback.onPendingIntent(mPendingIntent);
} catch (RemoteException e) {
diff --git a/services/credentials/java/com/android/server/credentials/CredentialManagerService.java b/services/credentials/java/com/android/server/credentials/CredentialManagerService.java
index 6747cea..d8c684f 100644
--- a/services/credentials/java/com/android/server/credentials/CredentialManagerService.java
+++ b/services/credentials/java/com/android/server/credentials/CredentialManagerService.java
@@ -69,7 +69,6 @@
import com.android.server.infra.SecureSettingsServiceNameResolver;
import java.util.ArrayList;
-import java.util.Arrays;
import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedHashSet;
@@ -281,7 +280,7 @@
}
}
- private static Set<String> getPrimaryProvidersForUserId(Context context, int userId) {
+ private static Set<ComponentName> getPrimaryProvidersForUserId(Context context, int userId) {
final int resolvedUserId = ActivityManager.handleIncomingUser(
Binder.getCallingPid(), Binder.getCallingUid(),
userId, false, false,
@@ -291,9 +290,22 @@
/* isMultipleMode= */ true);
String[] serviceNames = resolver.readServiceNameList(resolvedUserId);
if (serviceNames == null) {
- return new HashSet<String>();
+ return new HashSet<ComponentName>();
}
- return new HashSet<String>(Arrays.asList(serviceNames));
+
+ Set<ComponentName> services = new HashSet<>();
+ for (String serviceName : serviceNames) {
+ ComponentName compName = ComponentName.unflattenFromString(serviceName);
+ if (compName == null) {
+ Slog.w(
+ TAG,
+ "Primary provider component name unflatten from string error: "
+ + serviceName);
+ continue;
+ }
+ services.add(compName);
+ }
+ return services;
}
@GuardedBy("mLock")
diff --git a/services/credentials/java/com/android/server/credentials/CredentialManagerUi.java b/services/credentials/java/com/android/server/credentials/CredentialManagerUi.java
index 272452e..b90f08e 100644
--- a/services/credentials/java/com/android/server/credentials/CredentialManagerUi.java
+++ b/services/credentials/java/com/android/server/credentials/CredentialManagerUi.java
@@ -159,7 +159,7 @@
CredentialManager.PROVIDER_FILTER_USER_PROVIDERS_ONLY,
mEnabledProviders,
// Don't need primary providers here.
- new HashSet<String>());
+ new HashSet<ComponentName>());
List<DisabledProviderData> disabledProviderDataList = allProviders.stream()
.filter(provider -> !provider.isEnabled())