package app.outlay.firebase; import com.google.android.gms.tasks.Task; import com.google.firebase.auth.AuthCredential; import com.google.firebase.auth.AuthResult; import com.google.firebase.auth.FirebaseAuth; import com.google.firebase.auth.FirebaseUser; import com.google.firebase.auth.GetTokenResult; import app.outlay.domain.model.User; import javax.inject.Inject; import rx.Observable; /** * Created by bmelnychuk on 10/26/16. */ public class FirebaseAuthRxWrapper { private FirebaseAuth firebaseAuth; @Inject public FirebaseAuthRxWrapper(FirebaseAuth firebaseAuth) { this.firebaseAuth = firebaseAuth; } public Observable<String> getUserToken(FirebaseUser firebaseUser) { return Observable.create(subscriber -> { Task<GetTokenResult> task = firebaseUser.getToken(true); task.addOnCompleteListener(resultTask -> { if (task.isSuccessful()) { String token = task.getResult().getToken(); subscriber.onNext(token); subscriber.onCompleted(); } else { Exception e = task.getException(); subscriber.onError(e); } }); }); } public Observable<AuthResult> signUp(String email, String password) { return Observable.create(subscriber -> { Task<AuthResult> task = firebaseAuth.createUserWithEmailAndPassword(email, password); task.addOnCompleteListener(resultTask -> { if (task.isSuccessful()) { AuthResult authResult = task.getResult(); subscriber.onNext(authResult); subscriber.onCompleted(); } else { Exception e = task.getException(); subscriber.onError(e); } }); }); } public Observable<AuthResult> signIn(String email, String password) { return Observable.create(subscriber -> { Task<AuthResult> task = firebaseAuth.signInWithEmailAndPassword(email, password); task.addOnCompleteListener(resultTask -> { if (task.isSuccessful()) { AuthResult authResult = task.getResult(); subscriber.onNext(authResult); subscriber.onCompleted(); } else { Exception e = task.getException(); subscriber.onError(e); } }); }); } public Observable<AuthResult> signInAnonymously() { return Observable.create(subscriber -> { Task<AuthResult> task = firebaseAuth.signInAnonymously(); task.addOnCompleteListener(resultTask -> { if (task.isSuccessful()) { AuthResult authResult = task.getResult(); subscriber.onNext(authResult); subscriber.onCompleted(); } else { Exception e = task.getException(); subscriber.onError(e); } }); }); } public Observable<AuthResult> linkAccount(AuthCredential credentials) { return Observable.create(subscriber -> { Task<AuthResult> task = firebaseAuth.getCurrentUser().linkWithCredential(credentials); task.addOnCompleteListener(resultTask -> { if (task.isSuccessful()) { AuthResult authResult = task.getResult(); subscriber.onNext(authResult); subscriber.onCompleted(); } else { Exception e = task.getException(); subscriber.onError(e); } }); }); } public Observable<Void> resetPassword(User user) { return Observable.create(subscriber -> { Task<Void> task = firebaseAuth.sendPasswordResetEmail(user.getEmail()); task.addOnCompleteListener(resultTask -> { if (task.isSuccessful()) { subscriber.onCompleted(); } else { Exception e = task.getException(); subscriber.onError(e); } }); }); } }