Generalise Firebase login for Google, Facebook and LinkedIn into one Java file

Viewed 125

Here is my FirebaseAuthentication class that contains all authentication methods like registerUserWithEmailandPassword, loginUserWithEmailandPassword, getCurrentUser, signOutUser, getUserProfile, updateUserName, updateProfilePhoto, updateEmailAddress, sendVerificationMail, changePassword, sendResetLink, deleteAccount. They all are working correctly.

Now I want to include methods that can allow user to login with Google and Facebook. But I am unable to achieve it.

I want to make this class generalize so that I can use it in my future projects.

How can I achieve it.

Please refer the code below

public class FirebaseAuthentication {

private Activity mContext;
private FirebaseAuth mAuth;
private OnComplete mOnComplete;

public FirebaseAuthentication(Activity context) {
    mContext = context;
    mAuth = FirebaseAuth.getInstance();
}

public void registerUserWithEmailandPassword(String username, String password) {
    mAuth.createUserWithEmailAndPassword(username, password).addOnCompleteListener(mContext, new MyCompleteListener());
}

public void loginUserWithEmailandPassword(String username, String password) {
    mAuth.signInWithEmailAndPassword(username, password).addOnCompleteListener(mContext, new MyCompleteListener());
}

public FirebaseUser getCurrentUser() {
    FirebaseUser user = mAuth.getCurrentUser();
    return user;
}

public void signOutUser() {
    mAuth.signOut();
    mContext.startActivity(new Intent(mContext, LoginActivity.class));
}

public User getUserProfile() {
    FirebaseUser firebaseUser = getCurrentUser();
    User user = new User();
    if (firebaseUser != null) {
        user.setName(firebaseUser.getDisplayName());
        user.setEmail(firebaseUser.getEmail());
        user.setPhotoUrl(firebaseUser.getPhotoUrl());
        user.setUid(firebaseUser.getUid());
        user.setVerifiedEmail(firebaseUser.isEmailVerified());
    }
    return user;
}

public void updateUserName(String name) {
    FirebaseUser firebaseUser = getCurrentUser();
    if (firebaseUser != null) {
        UserProfileChangeRequest profileUpdates = new UserProfileChangeRequest.Builder()
                .setDisplayName(name)
                .build();
        firebaseUser.updateProfile(profileUpdates).addOnCompleteListener(new MyCompleteListener());
    }
}

public void updateProfilePhoto(String uri) {
    FirebaseUser firebaseUser = getCurrentUser();
    if (firebaseUser != null) {
        UserProfileChangeRequest profileUpdates = new UserProfileChangeRequest.Builder()
                .setPhotoUri(Uri.parse(uri))
                .build();
        firebaseUser.updateProfile(profileUpdates).addOnCompleteListener(new MyCompleteListener());
    }
}

public void updateEmailAddress(String email) {
    FirebaseUser firebaseUser = getCurrentUser();
    if (firebaseUser != null) {
        firebaseUser.updateEmail(email).addOnCompleteListener(new MyCompleteListener());
    }
}

public void sendVerificationMail() {
    FirebaseUser firebaseUser = getCurrentUser();
    firebaseUser.sendEmailVerification().addOnCompleteListener(new MyCompleteListener());
}

public void changePassword(String password) {
    FirebaseUser user = getCurrentUser();
    if (user != null) {
        String newPassword = password;
        user.updatePassword(newPassword).addOnCompleteListener(new MyCompleteListener());
    }
}

public void sendResetLink(String email) {
    FirebaseAuth auth = FirebaseAuth.getInstance();
    String emailAddress = email;
    auth.sendPasswordResetEmail(emailAddress).addOnCompleteListener(new MyCompleteListener());
}

public void deleteAccount() {
    FirebaseUser user = getCurrentUser();
    if (user != null) {
        user.delete().addOnCompleteListener(new MyCompleteListener());
    }
}

public interface OnComplete {
    void onSuccessListner();
    void onFailureListner(String message);
}

public void setOnCompleteListener(OnComplete onCompleteListener) {
    mOnComplete = onCompleteListener;
}

private class MyCompleteListener implements OnCompleteListener {

    @Override
    public void onComplete(@NonNull Task task) {
        if (task.isSuccessful()) {
            mOnComplete.onSuccessListner();
        }else {
            mOnComplete.onFailureListner(task.getException().getLocalizedMessage());
        }
      }
   }
}
0 Answers
Related