diff --git a/services/credentials/java/com/android/server/credentials/ClearRequestSession.java b/services/credentials/java/com/android/server/credentials/ClearRequestSession.java index 2141d5188f707..20bda71645e13 100644 --- a/services/credentials/java/com/android/server/credentials/ClearRequestSession.java +++ b/services/credentials/java/com/android/server/credentials/ClearRequestSession.java @@ -138,6 +138,6 @@ public final class ClearRequestSession extends RequestSession callbacks, @UserIdInt int userId, @NonNull RemoteCredentialService remoteCredentialService, @NonNull BeginCreateCredentialRequest beginCreateRequest, @@ -181,9 +182,7 @@ public final class ProviderCreateSession extends ProviderSession< onSaveEntrySelected(providerPendingIntentResponse); } else { Log.i(TAG, "Unexpected save entry key"); - // TODO("Replace with no credentials error type"); - invokeCallbackWithError("unknown_type", - "Issue while retrieving credential"); + invokeCallbackOnInternalInvalidState(); } break; case REMOTE_ENTRY_KEY: @@ -191,9 +190,7 @@ public final class ProviderCreateSession extends ProviderSession< onRemoteEntrySelected(providerPendingIntentResponse); } else { Log.i(TAG, "Unexpected remote entry key"); - // TODO("Replace with unknown/no credentials exception") - invokeCallbackWithError("unknown_type", - "Issue while retrieving credential"); + invokeCallbackOnInternalInvalidState(); } break; default: @@ -250,23 +247,16 @@ public final class ProviderCreateSession extends ProviderSession< } else { Log.i(TAG, "onSaveEntrySelected - no response or error found in pending " + "intent response"); - invokeCallbackWithError( - // TODO("Replace with unknown/no credentials exception") - "unknown", - "Issue encountered while retrieving the credential"); + invokeCallbackOnInternalInvalidState(); } } - private void invokeCallbackWithError(String errorType, @Nullable String message) { - mCallbacks.onFinalErrorReceived(mComponentName, errorType, message); - } - @Nullable private CreateCredentialException maybeGetPendingIntentException( ProviderPendingIntentResponse pendingIntentResponse) { if (pendingIntentResponse == null) { Log.i(TAG, "pendingIntentResponse is null"); - return null; + return new CreateCredentialException(CreateCredentialException.TYPE_NO_CREDENTIAL); } if (PendingIntentResultHandler.isValidResponse(pendingIntentResponse)) { CreateCredentialException exception = PendingIntentResultHandler @@ -278,8 +268,19 @@ public final class ProviderCreateSession extends ProviderSession< } else { Log.i(TAG, "Pending intent result code not Activity.RESULT_OK"); // TODO("Update with unknown exception when ready") - return new CreateCredentialException("unknown"); + return new CreateCredentialException(CreateCredentialException.TYPE_NO_CREDENTIAL); } return null; } + + /** + * When an invalid state occurs, e.g. entry mismatch or no response from provider, + * we send back a TYPE_NO_CREDENTIAL error as to the developer, it is the same as not + * getting any credentials back. + */ + private void invokeCallbackOnInternalInvalidState() { + mCallbacks.onFinalErrorReceived(mComponentName, + CreateCredentialException.TYPE_NO_CREDENTIAL, + null); + } } diff --git a/services/credentials/java/com/android/server/credentials/ProviderGetSession.java b/services/credentials/java/com/android/server/credentials/ProviderGetSession.java index 1e940dabada54..918246c1c1d89 100644 --- a/services/credentials/java/com/android/server/credentials/ProviderGetSession.java +++ b/services/credentials/java/com/android/server/credentials/ProviderGetSession.java @@ -145,7 +145,7 @@ public final class ProviderGetSession extends ProviderSession callbacks, int userId, RemoteCredentialService remoteCredentialService, BeginGetCredentialRequest beginGetRequest, android.credentials.GetCredentialRequest completeGetRequest) { @@ -196,9 +196,7 @@ public final class ProviderGetSession extends ProviderSession return mProviderResponse != null || mProviderResponseSet; } + protected void invokeCallbackWithError(String errorType, @Nullable String errorMessage) { + // TODO: Determine what the error message should be + mCallbacks.onFinalErrorReceived(mComponentName, errorType, errorMessage); + } + /** Update the response state stored with the provider session. */ @Nullable protected R getProviderResponse() { return mProviderResponse;