diff --git a/auth/src/main/java/com/firebase/ui/auth/data/remote/FacebookSignInHandler.java b/auth/src/main/java/com/firebase/ui/auth/data/remote/FacebookSignInHandler.java index b32b5c250..9bc574785 100644 --- a/auth/src/main/java/com/firebase/ui/auth/data/remote/FacebookSignInHandler.java +++ b/auth/src/main/java/com/firebase/ui/auth/data/remote/FacebookSignInHandler.java @@ -20,6 +20,7 @@ import com.firebase.ui.auth.IdpResponse; import com.firebase.ui.auth.data.model.Resource; import com.firebase.ui.auth.data.model.User; +import com.firebase.ui.auth.data.model.UserCancellationException; import com.firebase.ui.auth.ui.HelperActivityBase; import com.firebase.ui.auth.util.ExtraConstants; import com.firebase.ui.auth.viewmodel.ProviderSignInBase; @@ -111,7 +112,7 @@ public void onSuccess(LoginResult result) { @Override public void onCancel() { - onError(new FacebookException()); + setResult(Resource.forFailure(new UserCancellationException())); } @Override diff --git a/auth/src/main/java/com/firebase/ui/auth/data/remote/GenericIdpSignInHandler.java b/auth/src/main/java/com/firebase/ui/auth/data/remote/GenericIdpSignInHandler.java index a0db313a0..c887f07f3 100644 --- a/auth/src/main/java/com/firebase/ui/auth/data/remote/GenericIdpSignInHandler.java +++ b/auth/src/main/java/com/firebase/ui/auth/data/remote/GenericIdpSignInHandler.java @@ -22,6 +22,7 @@ import com.firebase.ui.auth.data.model.UserCancellationException; import com.firebase.ui.auth.ui.HelperActivityBase; import com.firebase.ui.auth.util.ExtraConstants; +import com.firebase.ui.auth.util.FirebaseAuthError; import com.firebase.ui.auth.util.data.AuthOperationManager; import com.firebase.ui.auth.util.data.ProviderUtils; import com.firebase.ui.auth.viewmodel.ProviderSignInBase; @@ -32,6 +33,7 @@ import com.google.firebase.auth.AuthCredential; import com.google.firebase.auth.AuthResult; import com.google.firebase.auth.FirebaseAuth; +import com.google.firebase.auth.FirebaseAuthException; import com.google.firebase.auth.FirebaseAuthUserCollisionException; import com.google.firebase.auth.FirebaseUser; import com.google.firebase.auth.OAuthCredential; @@ -91,17 +93,27 @@ public void onSuccess(@NonNull AuthResult authResult) { new OnFailureListener() { @Override public void onFailure(@NonNull Exception e) { - if (e instanceof FirebaseAuthUserCollisionException) { - FirebaseAuthUserCollisionException collisionException = - (FirebaseAuthUserCollisionException) e; - - setResult(Resource.forFailure( - new FirebaseUiUserCollisionException( - ErrorCodes.ERROR_GENERIC_IDP_RECOVERABLE_ERROR, - "Recoverable error.", - provider.getProviderId(), - collisionException.getEmail(), - collisionException.getUpdatedCredential()))); + if (e instanceof FirebaseAuthException) { + FirebaseAuthError error = + FirebaseAuthError.fromException((FirebaseAuthException) e); + + if (e instanceof FirebaseAuthUserCollisionException) { + FirebaseAuthUserCollisionException collisionException = + (FirebaseAuthUserCollisionException) e; + + setResult(Resource.forFailure( + new FirebaseUiUserCollisionException( + ErrorCodes.ERROR_GENERIC_IDP_RECOVERABLE_ERROR, + "Recoverable error.", + provider.getProviderId(), + collisionException.getEmail(), + collisionException.getUpdatedCredential()))); + } else if (error == FirebaseAuthError.ERROR_WEB_CONTEXT_CANCELED) { + setResult(Resource.forFailure( + new UserCancellationException())); + } else { + setResult(Resource.forFailure(e)); + } } else { setResult(Resource.forFailure(e)); } diff --git a/auth/src/main/java/com/firebase/ui/auth/util/FirebaseAuthError.java b/auth/src/main/java/com/firebase/ui/auth/util/FirebaseAuthError.java index 0f8ef2597..206314b8f 100644 --- a/auth/src/main/java/com/firebase/ui/auth/util/FirebaseAuthError.java +++ b/auth/src/main/java/com/firebase/ui/auth/util/FirebaseAuthError.java @@ -2,6 +2,7 @@ import com.google.firebase.auth.FirebaseAuthException; +import androidx.annotation.NonNull; import androidx.annotation.RestrictTo; /** @@ -83,6 +84,8 @@ public enum FirebaseAuthError { ERROR_API_NOT_AVAILABLE("The API that you are calling is not available on devices without Google Play Services."), + ERROR_WEB_CONTEXT_CANCELED("The web operation was canceled by the user"), + ERROR_UNKNOWN("An unknown error occurred."); /**