Merge "Address TODOs for Credential Manager" into udc-dev

This commit is contained in:
Reema Bajwa
2023-05-04 16:14:22 +00:00
committed by Android (Google) Code Review
7 changed files with 28 additions and 31 deletions

View File

@@ -196,25 +196,36 @@ public final class CredentialManagerService
return; return;
} }
CredentialManagerServiceImpl serviceToBeRemoved = null; List<CredentialManagerServiceImpl> servicesToBeRemoved = new ArrayList<>();
for (CredentialManagerServiceImpl service : services) { for (CredentialManagerServiceImpl service : services) {
if (service != null) { if (service != null) {
CredentialProviderInfo credentialProviderInfo = service.getCredentialProviderInfo(); CredentialProviderInfo credentialProviderInfo = service.getCredentialProviderInfo();
ComponentName componentName = ComponentName componentName =
credentialProviderInfo.getServiceInfo().getComponentName(); credentialProviderInfo.getServiceInfo().getComponentName();
if (packageName.equals(componentName.getPackageName())) { if (packageName.equals(componentName.getPackageName())) {
serviceToBeRemoved = service; servicesToBeRemoved.add(service);
removeServiceFromMultiModeSettings(componentName.flattenToString(), userId);
break;
} }
} }
} }
if (serviceToBeRemoved != null) {
// Iterate over all the services to be removed, and remove them from the user configurable
// services cache, the system services cache as well as the setting key-value pair.
for (CredentialManagerServiceImpl serviceToBeRemoved : servicesToBeRemoved) {
removeServiceFromCache(serviceToBeRemoved, userId); removeServiceFromCache(serviceToBeRemoved, userId);
removeServiceFromSystemServicesCache(serviceToBeRemoved, userId);
removeServiceFromMultiModeSettings(serviceToBeRemoved.getComponentName()
.flattenToString(), userId);
CredentialDescriptionRegistry.forUser(userId) CredentialDescriptionRegistry.forUser(userId)
.evictProviderWithPackageName(serviceToBeRemoved.getServicePackageName()); .evictProviderWithPackageName(serviceToBeRemoved.getServicePackageName());
} }
// TODO("Iterate over system services and remove if needed") }
@GuardedBy("mLock")
private void removeServiceFromSystemServicesCache(
CredentialManagerServiceImpl serviceToBeRemoved, int userId) {
if (mSystemServicesCacheList.get(userId) != null) {
mSystemServicesCacheList.get(userId).remove(serviceToBeRemoved);
}
} }
@GuardedBy("mLock") @GuardedBy("mLock")

View File

@@ -38,7 +38,6 @@ public final class CredentialManagerServiceImpl extends
AbstractPerUserSystemService<CredentialManagerServiceImpl, CredentialManagerService> { AbstractPerUserSystemService<CredentialManagerServiceImpl, CredentialManagerService> {
private static final String TAG = "CredManSysServiceImpl"; private static final String TAG = "CredManSysServiceImpl";
// TODO(b/210531) : Make final when update flow is fixed
@GuardedBy("mLock") @GuardedBy("mLock")
@NonNull @NonNull
private CredentialProviderInfo mInfo; private CredentialProviderInfo mInfo;
@@ -72,7 +71,6 @@ public final class CredentialManagerServiceImpl extends
@GuardedBy("mLock") @GuardedBy("mLock")
protected ServiceInfo newServiceInfoLocked(@NonNull ComponentName serviceComponent) protected ServiceInfo newServiceInfoLocked(@NonNull ComponentName serviceComponent)
throws PackageManager.NameNotFoundException { throws PackageManager.NameNotFoundException {
// TODO : Test update flows with multiple providers
if (mInfo != null) { if (mInfo != null) {
Slog.i(TAG, "newServiceInfoLocked, mInfo not null : " Slog.i(TAG, "newServiceInfoLocked, mInfo not null : "
+ mInfo.getServiceInfo().getComponentName().flattenToString() + " , " + mInfo.getServiceInfo().getComponentName().flattenToString() + " , "

View File

@@ -47,7 +47,7 @@ public class CredentialManagerUi {
private final CredentialManagerUiCallback mCallbacks; private final CredentialManagerUiCallback mCallbacks;
@NonNull @NonNull
private final Context mContext; private final Context mContext;
// TODO : Use for starting the activity for this user
private final int mUserId; private final int mUserId;
private UiStatus mStatus; private UiStatus mStatus;

View File

@@ -62,7 +62,6 @@ public final class ProviderClearSession extends ProviderSession<ClearCredentialS
android.credentials.ClearCredentialStateRequest clientRequest, android.credentials.ClearCredentialStateRequest clientRequest,
CallingAppInfo callingAppInfo CallingAppInfo callingAppInfo
) { ) {
// TODO: Determine if provider needs to declare clear capability in manifest
return new ClearCredentialStateRequest( return new ClearCredentialStateRequest(
callingAppInfo, callingAppInfo,
clientRequest.getData()); clientRequest.getData());
@@ -95,7 +94,7 @@ public final class ProviderClearSession extends ProviderSession<ClearCredentialS
mProviderSessionMetric.collectCandidateFrameworkException(mProviderException.getType()); mProviderSessionMetric.collectCandidateFrameworkException(mProviderException.getType());
} }
mProviderSessionMetric.collectCandidateExceptionStatus(/*hasException=*/true); mProviderSessionMetric.collectCandidateExceptionStatus(/*hasException=*/true);
updateStatusAndInvokeCallback(toStatus(errorCode), updateStatusAndInvokeCallback(Status.CANCELED,
/*source=*/ CredentialsSource.REMOTE_PROVIDER); /*source=*/ CredentialsSource.REMOTE_PROVIDER);
} }

View File

@@ -167,7 +167,7 @@ public final class ProviderCreateSession extends ProviderSession<
mProviderSessionMetric.collectCandidateFrameworkException(mProviderException.getType()); mProviderSessionMetric.collectCandidateFrameworkException(mProviderException.getType());
} }
mProviderSessionMetric.collectCandidateExceptionStatus(/*hasException=*/true); mProviderSessionMetric.collectCandidateExceptionStatus(/*hasException=*/true);
updateStatusAndInvokeCallback(toStatus(errorCode), updateStatusAndInvokeCallback(Status.CANCELED,
/*source=*/ CredentialsSource.REMOTE_PROVIDER); /*source=*/ CredentialsSource.REMOTE_PROVIDER);
} }

View File

@@ -220,7 +220,7 @@ public final class ProviderGetSession extends ProviderSession<BeginGetCredential
mProviderSessionMetric.collectCandidateFrameworkException(mProviderException.getType()); mProviderSessionMetric.collectCandidateFrameworkException(mProviderException.getType());
} }
mProviderSessionMetric.collectCandidateExceptionStatus(/*hasException=*/true); mProviderSessionMetric.collectCandidateExceptionStatus(/*hasException=*/true);
updateStatusAndInvokeCallback(toStatus(errorCode), updateStatusAndInvokeCallback(Status.CANCELED,
/*source=*/ CredentialsSource.REMOTE_PROVIDER); /*source=*/ CredentialsSource.REMOTE_PROVIDER);
} }

View File

@@ -110,9 +110,7 @@ public abstract class ProviderSession<T, R>
* and is ready to return the final credential back to the user. * and is ready to return the final credential back to the user.
*/ */
public static boolean isCompletionStatus(Status status) { public static boolean isCompletionStatus(Status status) {
return status == Status.CREDENTIAL_RECEIVED_FROM_INTENT return status == Status.COMPLETE || status == Status.EMPTY_RESPONSE;
|| status == Status.CREDENTIAL_RECEIVED_FROM_SELECTION
|| status == Status.COMPLETE;
} }
/** /**
@@ -151,26 +149,17 @@ public abstract class ProviderSession<T, R>
mProviderSessionUid = MetricUtilities.getPackageUid(mContext, mComponentName); mProviderSessionUid = MetricUtilities.getPackageUid(mContext, mComponentName);
} }
/** Provider status at various states of the request session. */ /** Provider status at various states of the provider session. */
// TODO: Review status values, and adjust where needed
enum Status { enum Status {
NOT_STARTED, NOT_STARTED,
PENDING, PENDING,
REQUIRES_AUTHENTICATION,
CREDENTIALS_RECEIVED, CREDENTIALS_RECEIVED,
SERVICE_DEAD, SERVICE_DEAD,
CREDENTIAL_RECEIVED_FROM_INTENT, SAVE_ENTRIES_RECEIVED,
PENDING_INTENT_INVOKED, CANCELED,
CREDENTIAL_RECEIVED_FROM_SELECTION, EMPTY_RESPONSE,
SAVE_ENTRIES_RECEIVED, CANCELED, NO_CREDENTIALS_FROM_AUTH_ENTRY,
NO_CREDENTIALS, EMPTY_RESPONSE, NO_CREDENTIALS_FROM_AUTH_ENTRY, COMPLETE COMPLETE
}
/** Converts exception to a provider session status. */
@NonNull
public static Status toStatus(int errorCode) {
// TODO : Add more mappings as more flows are supported
return Status.CANCELED;
} }
protected static String generateUniqueId() { protected static String generateUniqueId() {