private void handleAnonymousUpgradeFlow()

in auth/src/main/java/com/firebase/ui/auth/data/remote/GenericIdpSignInHandler.java [138:200]


    private void handleAnonymousUpgradeFlow(final FirebaseAuth auth,
                                            final HelperActivityBase activity,
                                            final OAuthProvider provider,
                                            final FlowParameters flowParameters) {
        final boolean useEmulator = activity.getAuthUI().isUseEmulator();
        auth.getCurrentUser()
                .startActivityForLinkWithProvider(activity, provider)
                .addOnSuccessListener(
                        authResult -> handleSuccess(
                                useEmulator,
                                provider.getProviderId(),
                                authResult.getUser(),
                                (OAuthCredential) authResult.getCredential(),
                                authResult.getAdditionalUserInfo().isNewUser()))
                .addOnFailureListener(
                        e -> {
                            if (!(e instanceof FirebaseAuthUserCollisionException)) {
                                setResult(Resource.forFailure(e));
                                return;
                            }

                            FirebaseAuthUserCollisionException collisionException =
                                    (FirebaseAuthUserCollisionException) e;
                            final AuthCredential credential =
                                    collisionException.getUpdatedCredential();
                            final String email =
                                    collisionException.getEmail();

                            // Case 1: Anonymous user trying to link with an existing user
                            // Case 2: Anonymous user trying to link with a provider keyed
                            // by an email that already belongs to an existing account
                            // (linking flow)
                            ProviderUtils.fetchSortedProviders(auth, flowParameters, email)
                                    .addOnSuccessListener(providers -> {
                                        if (providers.isEmpty()) {
                                            String errorMessage =
                                                    "Unable to complete the linkingflow -" +
                                                            " the user is using " +
                                                            "unsupported providers.";
                                            setResult(Resource.forFailure(
                                                    new FirebaseUiException(
                                                            ErrorCodes.DEVELOPER_ERROR,
                                                            errorMessage)));
                                            return;
                                        }

                                        if (providers.contains(provider.getProviderId())) {
                                            // Case 1
                                            handleMergeFailure(credential);
                                        } else {
                                            // Case 2 - linking flow to be handled by
                                            // SocialProviderResponseHandler
                                            setResult(Resource.forFailure(
                                                    new FirebaseUiUserCollisionException(
                                                            ErrorCodes.ERROR_GENERIC_IDP_RECOVERABLE_ERROR,
                                                            "Recoverable error.",
                                                            provider.getProviderId(),
                                                            email,
                                                            credential)));
                                        }
                                    });
                        });
    }