package tech.alvarez.today; import android.content.Intent; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.v7.app.AppCompatActivity; import android.view.View; import android.widget.ProgressBar; import android.widget.Toast; import com.facebook.AccessToken; import com.facebook.CallbackManager; import com.facebook.FacebookCallback; import com.facebook.FacebookException; import com.facebook.login.LoginResult; import com.facebook.login.widget.LoginButton; import com.google.android.gms.tasks.OnCompleteListener; import com.google.android.gms.tasks.Task; import com.google.firebase.auth.AuthCredential; import com.google.firebase.auth.AuthResult; import com.google.firebase.auth.FacebookAuthProvider; import com.google.firebase.auth.FirebaseAuth; import com.google.firebase.auth.FirebaseUser; import java.util.Arrays; public class LoginActivity extends AppCompatActivity { private LoginButton loginButton; private CallbackManager callbackManager; private FirebaseAuth firebaseAuth; private FirebaseAuth.AuthStateListener firebaseAuthListener; private ProgressBar progressBar; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_login); progressBar = (ProgressBar) findViewById(R.id.progressBar); callbackManager = CallbackManager.Factory.create(); loginButton = (LoginButton) findViewById(R.id.loginButton); loginButton.setReadPermissions(Arrays.asList("email")); loginButton.registerCallback(callbackManager, new FacebookCallback() { @Override public void onSuccess(LoginResult loginResult) { handleFacebookAccessToken(loginResult.getAccessToken()); } @Override public void onCancel() { Toast.makeText(getApplicationContext(), R.string.cancel_login, Toast.LENGTH_SHORT).show(); } @Override public void onError(FacebookException error) { Toast.makeText(getApplicationContext(), R.string.error_login, Toast.LENGTH_SHORT).show(); } }); firebaseAuth = FirebaseAuth.getInstance(); firebaseAuthListener = new FirebaseAuth.AuthStateListener() { @Override public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) { FirebaseUser user = firebaseAuth.getCurrentUser(); if (user != null) { goMainScreen(); } } }; } private void handleFacebookAccessToken(AccessToken accessToken) { progressBar.setVisibility(View.VISIBLE); loginButton.setVisibility(View.GONE); AuthCredential credential = FacebookAuthProvider.getCredential(accessToken.getToken()); firebaseAuth.signInWithCredential(credential).addOnCompleteListener(this, new OnCompleteListener() { @Override public void onComplete(@NonNull Task task) { if (!task.isSuccessful()) { Toast.makeText(getApplicationContext(), R.string.firebase_error_login, Toast.LENGTH_LONG).show(); } progressBar.setVisibility(View.GONE); loginButton.setVisibility(View.VISIBLE); } }); } private void goMainScreen() { Intent intent = new Intent(this, MainActivity.class); intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(intent); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); callbackManager.onActivityResult(requestCode, resultCode, data); } @Override protected void onStart() { super.onStart(); firebaseAuth.addAuthStateListener(firebaseAuthListener); } @Override protected void onStop() { super.onStop(); firebaseAuth.removeAuthStateListener(firebaseAuthListener); } }