Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package it.uniba.di.sms18.group8.youradio;
- import android.app.AlertDialog;
- import android.os.Bundle;
- import android.support.design.widget.Snackbar;
- import android.support.v7.app.AppCompatActivity;
- import android.content.Intent;
- import android.util.Log;
- import android.widget.Button;
- import android.widget.EditText;
- import android.widget.ImageView;
- import android.widget.Toast;
- import com.facebook.AccessToken;
- import com.facebook.CallbackManager;
- import com.facebook.FacebookCallback;
- import com.facebook.FacebookException;
- import com.facebook.FacebookSdk;
- import com.facebook.appevents.AppEventsLogger;
- import com.facebook.login.LoginManager;
- import com.facebook.login.LoginResult;
- import com.facebook.login.widget.LoginButton;
- import com.google.android.gms.auth.api.signin.GoogleSignIn;
- import com.google.android.gms.auth.api.signin.GoogleSignInAccount;
- import com.google.android.gms.auth.api.signin.GoogleSignInClient;
- import com.google.android.gms.auth.api.signin.GoogleSignInOptions;
- import com.google.android.gms.common.SignInButton;
- import com.google.android.gms.common.api.ApiException;
- 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 com.google.firebase.auth.GoogleAuthProvider;
- public class LoginActivity extends AppCompatActivity {
- enum SocialOption {
- FACEBOOK,
- GOOGLE
- }
- private static final String TAG = "LoginActivity";
- private static final int RC_SIGN_IN_GOOGLE = 9001;
- FirebaseAuth mAuth = FirebaseAuth.getInstance();
- CallbackManager callbackManager = CallbackManager.Factory.create();;
- EditText txtEmail;
- EditText txtPassword;
- Button btnLogin;
- Button btnGuestLogin;
- LoginButton btnFacebook;
- SignInButton btnGoogle;
- @Override
- public void onStart() {
- super.onStart();
- mAuth.signOut(); // da togliere ovviamente
- updateUI(mAuth.getCurrentUser());
- }
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_login);
- init();
- btnLogin.setOnClickListener(v -> {
- String email = txtEmail.getText().toString();
- String password = txtPassword.getText().toString();
- if (email.length() == 0) {
- new AlertDialog.Builder(this)
- .setTitle(R.string.accountCreation)
- .setMessage(R.string.questionAccountCreation)
- .setIcon(R.drawable.ic_form_people)
- .setPositiveButton(android.R.string.yes, (dialog, whichButton) -> {
- startActivity(new Intent(getApplicationContext(), MainActivity.class));
- })
- .setNegativeButton(android.R.string.no, (dialog, whichButton) -> {})
- .show();
- return;
- }
- if (email.length() > 5 && email.contains("@")) {
- if (password.length() > 5) {
- loginUser(email, password);
- } else {
- Toast.makeText(getApplicationContext(), "Invalid password!", Toast.LENGTH_LONG).show();
- }
- } else {
- Toast.makeText(getApplicationContext(), "Invalid email!", Toast.LENGTH_LONG).show();
- }
- });
- btnGuestLogin.setOnClickListener(view -> {
- new AlertDialog.Builder(this)
- .setTitle(R.string.accountCreation)
- .setMessage(R.string.questionGuestLogin)
- .setIcon(R.drawable.ic_form_people)
- .setPositiveButton(android.R.string.yes, (dialog, whichButton) -> loginUser())
- .setNegativeButton(android.R.string.no, (dialog, whichButton) -> {})
- .show();
- });
- btnFacebook.setOnClickListener(view -> loginUser(SocialOption.FACEBOOK));
- btnGoogle.setOnClickListener(view -> loginUser(SocialOption.GOOGLE));
- }
- private void init() {
- txtEmail = findViewById(R.id.txtEmail);
- txtPassword = findViewById(R.id.txtPassword);
- btnLogin = findViewById(R.id.btnLogin);
- btnGuestLogin = findViewById(R.id.btnGuestLogin);
- btnFacebook = findViewById(R.id.btnFacebook);
- btnGoogle = findViewById(R.id.btnGoogle);
- }
- private void loginUser() {
- mAuth.signInAnonymously()
- .addOnCompleteListener(this, task -> {
- if (task.isSuccessful()) {
- Log.d(TAG, "User logged!");
- updateUI(mAuth.getCurrentUser());
- } else {
- Toast.makeText(getApplicationContext(),
- "Authentication failed.", Toast.LENGTH_SHORT).show();
- }
- });
- }
- private void loginUser(SocialOption social) {
- switch (social) {
- case FACEBOOK:
- // https://developers.facebook.com/docs/facebook-login/android/v2.3
- // https://firebase.google.com/docs/auth/android/facebook-login
- btnFacebook.setReadPermissions("email", "public_profile");
- // callbackManager = CallbackManager.Factory.create();
- btnFacebook.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
- @Override
- public void onSuccess(LoginResult loginResult) {
- handleFacebookAccessToken(loginResult.getAccessToken());
- }
- @Override
- public void onCancel() {
- Toast.makeText(getApplicationContext(), "Authentication canceled.",
- Toast.LENGTH_SHORT).show();
- }
- @Override
- public void onError(FacebookException error) {
- Toast.makeText(getApplicationContext(), "Authentication error.",
- Toast.LENGTH_SHORT).show();
- }
- });
- break;
- case GOOGLE:
- // https://firebase.google.com/docs/auth/android/google-signin
- GoogleSignInOptions options = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
- .requestIdToken(getString(R.string.default_web_client_id))
- .requestEmail()
- .build();
- Intent signInIntent = GoogleSignIn.getClient(this, options).getSignInIntent();
- startActivityForResult(signInIntent, RC_SIGN_IN_GOOGLE);
- break;
- }
- }
- private void handleFacebookAccessToken(AccessToken token) {
- Log.d(TAG, "handleFacebookAccessToken:" + token);
- AuthCredential credential = FacebookAuthProvider.getCredential(token.getToken());
- mAuth.signInWithCredential(credential)
- .addOnCompleteListener(this, task -> {
- if (task.isSuccessful()) {
- Log.d(TAG, "User logged with facebook!");
- FirebaseUser user = mAuth.getCurrentUser();
- updateUI(user);
- } else {
- Log.w(TAG, "signInWithCredential:failure", task.getException());
- Toast.makeText(getApplicationContext(), "Authentication failed.",
- Toast.LENGTH_SHORT).show();
- }
- });
- }
- private void firebaseAuthWithGoogle(GoogleSignInAccount acct) {
- Log.d(TAG, "firebaseAuthWithGoogle:" + acct.getId());
- AuthCredential credential = GoogleAuthProvider.getCredential(acct.getIdToken(), null);
- mAuth.signInWithCredential(credential)
- .addOnCompleteListener(this, task -> {
- if (task.isSuccessful()) {
- Log.d(TAG, "User logged with google!");
- FirebaseUser user = mAuth.getCurrentUser();
- updateUI(user);
- } else {
- Log.w(TAG, "signInWithCredential:failure", task.getException());
- Toast.makeText(getApplicationContext(), "Authentication failed.",
- Toast.LENGTH_SHORT).show();
- }
- });
- }
- @Override
- protected void onActivityResult(int requestCode, int resultCode, Intent data) {
- super.onActivityResult(requestCode, resultCode, data);
- callbackManager.onActivityResult(requestCode, resultCode, data);
- if (requestCode == RC_SIGN_IN_GOOGLE) {
- Task<GoogleSignInAccount> task = GoogleSignIn.getSignedInAccountFromIntent(data);
- try {
- GoogleSignInAccount account = task.getResult(ApiException.class);
- firebaseAuthWithGoogle(account);
- } catch (ApiException e) {
- Toast.makeText(getApplicationContext(), "You need a Google account to log in.",
- Toast.LENGTH_SHORT).show();
- }
- }
- }
- private void loginUser(String email, String password) {
- mAuth.signInWithEmailAndPassword(email, password)
- .addOnCompleteListener(this, task -> {
- if (task.isSuccessful()) {
- Log.d(TAG, "User logged with email/password!");
- updateUI(mAuth.getCurrentUser());
- } else {
- Toast.makeText(getApplicationContext(),
- "Authentication failed.", Toast.LENGTH_SHORT).show();
- }
- });
- }
- private void updateUI(FirebaseUser currentUser) {
- if (currentUser != null) {
- String email = currentUser.getEmail();
- Intent intent = new Intent(this, MainActivity.class);
- intent.putExtra("USER_EMAIL", email);
- intent.putExtra("IS_GUEST", currentUser.isAnonymous());
- finish();
- startActivity(intent);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement