diff options
| author | 2023-08-30 18:19:36 +0000 | |
|---|---|---|
| committer | 2023-08-30 18:19:36 +0000 | |
| commit | aec6d9da48917c21bbe6ca9b9cc9c9ff42760aeb (patch) | |
| tree | 56e506592e2a9775c9fcf3b423a10ed76f4d1013 | |
| parent | b55ed5efa1fdc8efcddeef9844c0130b957d2b64 (diff) | |
| parent | b84c3f60f37e1d00c1fade3ce94209d06436b3ed (diff) | |
Merge "Fix isPrimary bit not being set" into udc-qpr-dev
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()) |