private void handleLinkingFlow()

in auth/src/main/java/com/firebase/ui/auth/viewmodel/email/EmailLinkSignInHandler.java [152:199]


    private void handleLinkingFlow(final AuthOperationManager authOperationManager,
                                   final EmailLinkPersistenceManager persistenceManager,
                                   final IdpResponse response,
                                   final String link) {
        final AuthCredential storedCredentialForLink = ProviderUtils.getAuthCredential
                (response);
        final AuthCredential emailLinkCredential = EmailAuthProvider.getCredentialWithLink
                (response.getEmail(), link);

        if (authOperationManager.canUpgradeAnonymous(getAuth(), getArguments())) {
            authOperationManager.safeLink(emailLinkCredential,
                    storedCredentialForLink, getArguments())
                    .addOnCompleteListener(task -> {
                        persistenceManager.clearAllData(getApplication());
                        if (task.isSuccessful()) {
                            handleMergeFailure(storedCredentialForLink);
                        } else {
                            setResult(Resource.forFailure(task.getException()));
                        }
                    });
        } else {
            getAuth().signInWithCredential(emailLinkCredential)
                    .continueWithTask(task -> {
                        persistenceManager.clearAllData(getApplication());
                        if (!task.isSuccessful()) {
                            return task;
                        }
                        return task.getResult().getUser()
                                .linkWithCredential(storedCredentialForLink)
                                .continueWithTask(new ProfileMerger(response))
                                .addOnFailureListener(new TaskFailureLogger(TAG,
                                        "linkWithCredential+merge failed."));
                    })
                    .addOnSuccessListener(authResult -> {
                        FirebaseUser user = authResult.getUser();
                        IdpResponse response1 = new IdpResponse.Builder(
                                new User.Builder(EmailAuthProvider
                                        .EMAIL_LINK_SIGN_IN_METHOD,
                                        user.getEmail())
                                        .setName(user.getDisplayName())
                                        .setPhotoUri(user.getPhotoUrl())
                                        .build())
                                .build();
                        handleSuccess(response1, authResult);
                    })
                    .addOnFailureListener(e -> setResult(Resource.forFailure(e)));
        }
    }