Advertisement
Guest User

Firebase Auth YouRadio :D

a guest
May 5th, 2018
233
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 10.45 KB | None | 0 0
  1. package it.uniba.di.sms18.group8.youradio;
  2.  
  3. import android.app.AlertDialog;
  4. import android.os.Bundle;
  5. import android.support.design.widget.Snackbar;
  6. import android.support.v7.app.AppCompatActivity;
  7.  
  8. import android.content.Intent;
  9. import android.util.Log;
  10. import android.widget.Button;
  11. import android.widget.EditText;
  12. import android.widget.ImageView;
  13. import android.widget.Toast;
  14.  
  15. import com.facebook.AccessToken;
  16. import com.facebook.CallbackManager;
  17. import com.facebook.FacebookCallback;
  18. import com.facebook.FacebookException;
  19. import com.facebook.FacebookSdk;
  20. import com.facebook.appevents.AppEventsLogger;
  21. import com.facebook.login.LoginManager;
  22. import com.facebook.login.LoginResult;
  23. import com.facebook.login.widget.LoginButton;
  24. import com.google.android.gms.auth.api.signin.GoogleSignIn;
  25. import com.google.android.gms.auth.api.signin.GoogleSignInAccount;
  26. import com.google.android.gms.auth.api.signin.GoogleSignInClient;
  27. import com.google.android.gms.auth.api.signin.GoogleSignInOptions;
  28. import com.google.android.gms.common.SignInButton;
  29. import com.google.android.gms.common.api.ApiException;
  30. import com.google.android.gms.tasks.OnCompleteListener;
  31. import com.google.android.gms.tasks.Task;
  32. import com.google.firebase.auth.AuthCredential;
  33. import com.google.firebase.auth.AuthResult;
  34. import com.google.firebase.auth.FacebookAuthProvider;
  35. import com.google.firebase.auth.FirebaseAuth;
  36. import com.google.firebase.auth.FirebaseUser;
  37. import com.google.firebase.auth.GoogleAuthProvider;
  38.  
  39. public class LoginActivity extends AppCompatActivity {
  40.  
  41.     enum SocialOption {
  42.         FACEBOOK,
  43.         GOOGLE
  44.     }
  45.  
  46.     private static final String TAG = "LoginActivity";
  47.     private static final int RC_SIGN_IN_GOOGLE = 9001;
  48.  
  49.     FirebaseAuth mAuth = FirebaseAuth.getInstance();
  50.     CallbackManager callbackManager = CallbackManager.Factory.create();;
  51.    
  52.     EditText txtEmail;
  53.     EditText txtPassword;
  54.     Button btnLogin;
  55.     Button btnGuestLogin;
  56.     LoginButton btnFacebook;
  57.     SignInButton btnGoogle;
  58.  
  59.     @Override
  60.     public void onStart() {
  61.         super.onStart();
  62.         mAuth.signOut(); // da togliere ovviamente
  63.         updateUI(mAuth.getCurrentUser());
  64.     }
  65.  
  66.     @Override
  67.     protected void onCreate(Bundle savedInstanceState) {
  68.         super.onCreate(savedInstanceState);
  69.         setContentView(R.layout.activity_login);
  70.         init();
  71.  
  72.         btnLogin.setOnClickListener(v -> {
  73.             String email = txtEmail.getText().toString();
  74.             String password = txtPassword.getText().toString();
  75.  
  76.             if (email.length() == 0) {
  77.                 new AlertDialog.Builder(this)
  78.                         .setTitle(R.string.accountCreation)
  79.                         .setMessage(R.string.questionAccountCreation)
  80.                         .setIcon(R.drawable.ic_form_people)
  81.                         .setPositiveButton(android.R.string.yes, (dialog, whichButton) -> {
  82.                             startActivity(new Intent(getApplicationContext(), MainActivity.class));
  83.                         })
  84.                         .setNegativeButton(android.R.string.no, (dialog, whichButton) -> {})
  85.                         .show();
  86.                 return;
  87.             }
  88.  
  89.             if (email.length() > 5 && email.contains("@")) {
  90.                 if (password.length() > 5) {
  91.                     loginUser(email, password);
  92.                 } else {
  93.                     Toast.makeText(getApplicationContext(), "Invalid password!", Toast.LENGTH_LONG).show();
  94.                 }
  95.             } else {
  96.                 Toast.makeText(getApplicationContext(), "Invalid email!", Toast.LENGTH_LONG).show();
  97.             }
  98.         });
  99.  
  100.  
  101.         btnGuestLogin.setOnClickListener(view -> {
  102.             new AlertDialog.Builder(this)
  103.                     .setTitle(R.string.accountCreation)
  104.                     .setMessage(R.string.questionGuestLogin)
  105.                     .setIcon(R.drawable.ic_form_people)
  106.                     .setPositiveButton(android.R.string.yes, (dialog, whichButton) -> loginUser())
  107.                     .setNegativeButton(android.R.string.no, (dialog, whichButton) -> {})
  108.                     .show();
  109.         });
  110.  
  111.         btnFacebook.setOnClickListener(view -> loginUser(SocialOption.FACEBOOK));
  112.         btnGoogle.setOnClickListener(view -> loginUser(SocialOption.GOOGLE));
  113.  
  114.     }
  115.  
  116.     private void init() {
  117.         txtEmail = findViewById(R.id.txtEmail);
  118.         txtPassword = findViewById(R.id.txtPassword);
  119.         btnLogin = findViewById(R.id.btnLogin);
  120.         btnGuestLogin = findViewById(R.id.btnGuestLogin);
  121.         btnFacebook = findViewById(R.id.btnFacebook);
  122.         btnGoogle = findViewById(R.id.btnGoogle);
  123.     }
  124.  
  125.     private void loginUser() {
  126.         mAuth.signInAnonymously()
  127.                 .addOnCompleteListener(this, task -> {
  128.                     if (task.isSuccessful()) {
  129.                         Log.d(TAG, "User logged!");
  130.                         updateUI(mAuth.getCurrentUser());
  131.                     } else {
  132.                         Toast.makeText(getApplicationContext(),
  133.                                 "Authentication failed.", Toast.LENGTH_SHORT).show();
  134.                     }
  135.                 });
  136.     }
  137.  
  138.     private void loginUser(SocialOption social) {
  139.         switch (social) {
  140.             case FACEBOOK:
  141.                 // https://developers.facebook.com/docs/facebook-login/android/v2.3
  142.                 // https://firebase.google.com/docs/auth/android/facebook-login
  143.                 btnFacebook.setReadPermissions("email", "public_profile");
  144.                 // callbackManager = CallbackManager.Factory.create();
  145.                 btnFacebook.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
  146.                     @Override
  147.                     public void onSuccess(LoginResult loginResult) {
  148.                         handleFacebookAccessToken(loginResult.getAccessToken());
  149.                     }
  150.  
  151.                     @Override
  152.                     public void onCancel() {
  153.                         Toast.makeText(getApplicationContext(), "Authentication canceled.",
  154.                                 Toast.LENGTH_SHORT).show();
  155.                     }
  156.  
  157.                     @Override
  158.                     public void onError(FacebookException error) {
  159.                         Toast.makeText(getApplicationContext(), "Authentication error.",
  160.                                 Toast.LENGTH_SHORT).show();
  161.                     }
  162.                 });
  163.                 break;
  164.  
  165.             case GOOGLE:
  166.                 // https://firebase.google.com/docs/auth/android/google-signin
  167.                 GoogleSignInOptions options = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
  168.                         .requestIdToken(getString(R.string.default_web_client_id))
  169.                         .requestEmail()
  170.                         .build();
  171.                 Intent signInIntent = GoogleSignIn.getClient(this, options).getSignInIntent();
  172.                 startActivityForResult(signInIntent, RC_SIGN_IN_GOOGLE);
  173.                 break;
  174.         }
  175.     }
  176.  
  177.     private void handleFacebookAccessToken(AccessToken token) {
  178.         Log.d(TAG, "handleFacebookAccessToken:" + token);
  179.         AuthCredential credential = FacebookAuthProvider.getCredential(token.getToken());
  180.         mAuth.signInWithCredential(credential)
  181.                 .addOnCompleteListener(this, task -> {
  182.                     if (task.isSuccessful()) {
  183.                         Log.d(TAG, "User logged with facebook!");
  184.                         FirebaseUser user = mAuth.getCurrentUser();
  185.                         updateUI(user);
  186.                     } else {
  187.                         Log.w(TAG, "signInWithCredential:failure", task.getException());
  188.                         Toast.makeText(getApplicationContext(), "Authentication failed.",
  189.                                 Toast.LENGTH_SHORT).show();
  190.                     }
  191.                 });
  192.     }
  193.  
  194.     private void firebaseAuthWithGoogle(GoogleSignInAccount acct) {
  195.         Log.d(TAG, "firebaseAuthWithGoogle:" + acct.getId());
  196.         AuthCredential credential = GoogleAuthProvider.getCredential(acct.getIdToken(), null);
  197.         mAuth.signInWithCredential(credential)
  198.                 .addOnCompleteListener(this, task -> {
  199.                     if (task.isSuccessful()) {
  200.                         Log.d(TAG, "User logged with google!");
  201.                         FirebaseUser user = mAuth.getCurrentUser();
  202.                         updateUI(user);
  203.                     } else {
  204.                         Log.w(TAG, "signInWithCredential:failure", task.getException());
  205.                         Toast.makeText(getApplicationContext(), "Authentication failed.",
  206.                                 Toast.LENGTH_SHORT).show();
  207.                     }
  208.                 });
  209.     }
  210.  
  211.     @Override
  212.     protected void onActivityResult(int requestCode, int resultCode, Intent data) {
  213.         super.onActivityResult(requestCode, resultCode, data);
  214.         callbackManager.onActivityResult(requestCode, resultCode, data);
  215.  
  216.         if (requestCode == RC_SIGN_IN_GOOGLE) {
  217.             Task<GoogleSignInAccount> task = GoogleSignIn.getSignedInAccountFromIntent(data);
  218.             try {
  219.                 GoogleSignInAccount account = task.getResult(ApiException.class);
  220.                 firebaseAuthWithGoogle(account);
  221.             } catch (ApiException e) {
  222.                 Toast.makeText(getApplicationContext(), "You need a Google account to log in.",
  223.                         Toast.LENGTH_SHORT).show();
  224.             }
  225.         }
  226.     }
  227.  
  228.     private void loginUser(String email, String password) {
  229.         mAuth.signInWithEmailAndPassword(email, password)
  230.                 .addOnCompleteListener(this, task -> {
  231.                     if (task.isSuccessful()) {
  232.                         Log.d(TAG, "User logged with email/password!");
  233.                         updateUI(mAuth.getCurrentUser());
  234.                     } else {
  235.                         Toast.makeText(getApplicationContext(),
  236.                                 "Authentication failed.", Toast.LENGTH_SHORT).show();
  237.                     }
  238.                 });
  239.     }
  240.  
  241.     private void updateUI(FirebaseUser currentUser) {
  242.         if (currentUser != null) {
  243.             String email = currentUser.getEmail();
  244.             Intent intent = new Intent(this, MainActivity.class);
  245.             intent.putExtra("USER_EMAIL", email);
  246.             intent.putExtra("IS_GUEST", currentUser.isAnonymous());
  247.             finish();
  248.             startActivity(intent);
  249.         }
  250.     }
  251.  
  252. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement