summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Becca Hughes <beccahughes@google.com> 2023-08-30 18:19:36 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2023-08-30 18:19:36 +0000
commitaec6d9da48917c21bbe6ca9b9cc9c9ff42760aeb (patch)
tree56e506592e2a9775c9fcf3b423a10ed76f4d1013
parentb55ed5efa1fdc8efcddeef9844c0130b957d2b64 (diff)
parentb84c3f60f37e1d00c1fade3ce94209d06436b3ed (diff)
Merge "Fix isPrimary bit not being set" into udc-qpr-dev
-rw-r--r--core/api/test-current.txt1
-rw-r--r--core/java/android/credentials/CredentialProviderInfo.java1
-rw-r--r--core/java/android/service/credentials/CredentialProviderInfoFactory.java12
-rw-r--r--services/credentials/java/com/android/server/credentials/CreateRequestSession.java12
-rw-r--r--services/credentials/java/com/android/server/credentials/CredentialManagerService.java20
-rw-r--r--services/credentials/java/com/android/server/credentials/CredentialManagerUi.java2
6 files changed, 33 insertions, 15 deletions
diff --git a/core/api/test-current.txt b/core/api/test-current.txt
index 250a1d1f86c3..f53c0873c432 100644
--- a/core/api/test-current.txt
+++ b/core/api/test-current.txt
@@ -1154,6 +1154,7 @@ package android.credentials {
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 d66b8f00a2e9..2bd3e4c0fe08 100644
--- a/core/java/android/credentials/CredentialProviderInfo.java
+++ b/core/java/android/credentials/CredentialProviderInfo.java
@@ -113,7 +113,6 @@ public final class CredentialProviderInfo implements Parcelable {
/**
* 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 b196b064a670..7eb81e609c92 100644
--- a/core/java/android/service/credentials/CredentialProviderInfoFactory.java
+++ b/core/java/android/service/credentials/CredentialProviderInfoFactory.java
@@ -415,7 +415,8 @@ public final class CredentialProviderInfoFactory {
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 @@ public final class CredentialProviderInfoFactory {
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 @@ public final class CredentialProviderInfoFactory {
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 @@ public final class CredentialProviderInfoFactory {
@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 @@ public final class CredentialProviderInfoFactory {
/* 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 c37a038d8ef7..6899ad48b813 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 android.util.Slog;
import com.android.server.credentials.metrics.ProviderStatusForMetrics;
import java.util.ArrayList;
+import java.util.List;
import java.util.Set;
/**
@@ -49,7 +50,7 @@ public final class CreateRequestSession extends RequestSession<CreateCredentialR
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 @@ public final class CreateRequestSession extends RequestSession<CreateCredentialR
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 @@ public final class CreateRequestSession extends RequestSession<CreateCredentialR
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 6747cea80115..d8c684fb8c1e 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.AbstractMasterSystemService;
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 @@ public final class CredentialManagerService
}
}
- 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 @@ public final class CredentialManagerService
/* 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 272452e1b2ae..b90f08e420e7 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 @@ public class CredentialManagerUi {
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())