package com.fastaccess.ui.modules.cloud.auth; import android.content.Intent; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import com.fastaccess.R; import com.fastaccess.helper.Logger; import com.fastaccess.ui.base.mvp.presenter.BasePresenter; import com.fastaccess.ui.modules.cloud.backup.BackupView; import com.fastaccess.ui.modules.cloud.restore.RestoreView; import com.google.android.gms.auth.api.Auth; import com.google.android.gms.auth.api.signin.GoogleSignInAccount; import com.google.android.gms.auth.api.signin.GoogleSignInResult; import com.google.android.gms.common.ConnectionResult; import com.google.android.gms.common.api.GoogleApiClient; 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.GoogleAuthProvider; /** * Created by Kosh on 23 Oct 2016, 7:49 PM */ public class LoginPresenter extends BasePresenter<LoginMvp.View> implements LoginMvp.Presenter { private static final int SIGN_IN_REQUEST_CODE = 100; protected LoginPresenter(@NonNull LoginMvp.View view) { super(view); } public static LoginPresenter with(@NonNull LoginMvp.View view) { return new LoginPresenter(view); } @Override public void onSignIn(@NonNull LoginView loginView, @NonNull GoogleApiClient googleApiClient) { Intent signInIntent = Auth.GoogleSignInApi.getSignInIntent(googleApiClient); loginView.startActivityForResult(signInIntent, SIGN_IN_REQUEST_CODE); loginView.onShowProgress(); } @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == SIGN_IN_REQUEST_CODE) { if (isAttached()) { GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data); if (result.isSuccess()) { GoogleSignInAccount account = result.getSignInAccount(); if (account != null) { getView().onSignedIn(account); } else { getView().onShowMessage(R.string.failed_login); } } else { getView().onShowMessage(R.string.failed_login); } } } } @Override public void onFirebaseSignIn(@NonNull GoogleSignInAccount acct, @NonNull FirebaseAuth auth) { AuthCredential credential = GoogleAuthProvider.getCredential(acct.getIdToken(), null); auth.signInWithCredential(credential).addOnCompleteListener(this); } @Override public void onStartBackOrRestore(int type, @NonNull LoginView loginView) { Intent intent = new Intent(loginView, type == LoginView.BACKUP_TYPE ? BackupView.class : RestoreView.class); loginView.startActivity(intent); loginView.finish(); } @Override public void onConnected(@Nullable Bundle bundle) { if (isAttached()) getView().onConnected(); } @Override public void onConnectionSuspended(int i) { //TODO } @Override public void onConnectionFailed(@NonNull ConnectionResult connectionResult) { if (isAttached()) { if (connectionResult.getErrorMessage() != null) { getView().onShowMessage(connectionResult.getErrorMessage()); } getView().onConnectionFailed(connectionResult); } } @Override public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) { if (isAttached()) { FirebaseUser user = firebaseAuth.getCurrentUser(); if (user != null) { getView().onFirebaseUser(user); } else { Logger.e(); } } } @SuppressWarnings("ThrowableResultOfMethodCallIgnored") @Override public void onComplete(@NonNull Task<AuthResult> task) { Logger.e(task.isSuccessful(), task.isComplete()); if (isAttached()) { if (!task.isSuccessful()) { if (task.getException() != null && task.getException().getMessage() != null) { getView().onShowMessage(task.getException().getMessage()); } else { getView().onShowMessage(R.string.failed_login); } } } } }