Advertisement
ffernandes

Login.java

Oct 14th, 2019
255
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 12.73 KB | None | 0 0
  1.  
  2. package bytech.got2eat;
  3.  
  4. import android.animation.ValueAnimator;
  5. import android.content.Context;
  6. import android.content.Intent;
  7. import android.graphics.drawable.Drawable;
  8. import android.net.ConnectivityManager;
  9. import android.os.Handler;
  10. import android.support.annotation.NonNull;
  11. import android.support.design.widget.TextInputLayout;
  12. import android.support.v4.content.ContextCompat;
  13. import android.support.v7.app.AppCompatActivity;
  14. import android.os.Bundle;
  15. import android.text.InputType;
  16. import android.util.Log;
  17. import android.view.View;
  18. import android.widget.Button;
  19. import android.widget.EditText;
  20. import android.widget.Toast;
  21.  
  22. import com.airbnb.lottie.LottieAnimationView;
  23. import com.google.android.gms.auth.api.Auth;
  24. import com.google.android.gms.auth.api.signin.GoogleSignInAccount;
  25. import com.google.android.gms.auth.api.signin.GoogleSignInOptions;
  26. import com.google.android.gms.auth.api.signin.GoogleSignInResult;
  27. import com.google.android.gms.common.ConnectionResult;
  28. import com.google.android.gms.common.api.GoogleApiClient;
  29. import com.google.android.gms.tasks.OnCompleteListener;
  30. import com.google.android.gms.tasks.OnFailureListener;
  31. import com.google.android.gms.tasks.OnSuccessListener;
  32. import com.google.android.gms.tasks.Task;
  33. import com.google.firebase.Timestamp;
  34. import com.google.firebase.auth.AuthCredential;
  35. import com.google.firebase.auth.AuthResult;
  36. import com.google.firebase.auth.FirebaseAuth;
  37. import com.google.firebase.auth.GoogleAuthProvider;
  38. import com.google.firebase.firestore.FirebaseFirestore;
  39.  
  40. import java.sql.Time;
  41. import java.util.HashMap;
  42. import java.util.Map;
  43.  
  44. public class Login extends AppCompatActivity implements GoogleApiClient.OnConnectionFailedListener {
  45.  
  46.     private static final String TAG = "LoginActivity";
  47.     FirebaseAuth mAuth;
  48.     Button loginButton;
  49.     Button registerButton;
  50.     Button googleButton;
  51.     Button passwordVisibilityButton;
  52.     EditText loginPassword;
  53.     EditText loginEmail;
  54.     private boolean passwordVisible = false;
  55.     private GoogleApiClient mGoogleApiClient;
  56.     private Context context = this;
  57.     private Login thisInstance = this;
  58.     private FirebaseFirestore db;
  59.     private boolean alreadyClicked = false;
  60.     private LottieAnimationView animationView;
  61.  
  62.     private int failedAttempts;
  63.     private int RC_SIGN_IN = 100;
  64.  
  65.     @Override
  66.     protected void onCreate(Bundle savedInstanceState) {
  67.         setTheme(R.style.AppTheme);
  68.         super.onCreate(savedInstanceState);
  69.         setContentView(R.layout.activity_login);
  70.  
  71.         failedAttempts = 0;
  72.  
  73.         animationView = findViewById(R.id.animation_view);
  74.         animationView.setVisibility(View.GONE);
  75.         animationView.setRepeatCount(ValueAnimator.INFINITE);
  76.  
  77.         //Comment for testing gpg key
  78.         db = FirebaseFirestore.getInstance();
  79.  
  80.         mAuth = FirebaseAuth.getInstance();
  81.         if (mAuth.getCurrentUser()!=null){
  82.             //Toast.makeText(this, R.string.already_login, Toast.LENGTH_SHORT).show();
  83.             Log.i(TAG, "User already logged in");
  84.  
  85.             //Create new intent to main activity
  86.             //Toast.makeText(context, "Logged in", Toast.LENGTH_SHORT).show();
  87.             Intent intent = new Intent(thisInstance, Home.class);
  88.             startActivity(intent);
  89.             finish();
  90.         }
  91.  
  92.         //Firebase auth
  93.         GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
  94.                 .requestIdToken(getString(R.string.default_web_client_id))
  95.                 .requestEmail()
  96.                 .build();
  97.  
  98.         mGoogleApiClient = new GoogleApiClient.Builder(context)
  99.                 .enableAutoManage(Login.this,thisInstance)
  100.                 .addApi(Auth.GOOGLE_SIGN_IN_API,gso)
  101.                 .build();
  102.  
  103.         loginPassword = findViewById(R.id.login_password_inputLayout);
  104.         loginEmail = findViewById(R.id.login_email_inputLayout);
  105.  
  106.         loginButton = findViewById(R.id.login_button);
  107.         loginButton.setOnClickListener(new View.OnClickListener() {
  108.             @Override
  109.             public void onClick(View v) {
  110.                 if (isNetworkConnected()){
  111.                     if (!alreadyClicked){
  112.                         alreadyClicked = true;
  113.                         String password = loginPassword.getText().toString().trim();
  114.                         String email = loginEmail.getText().toString().trim();
  115.  
  116.                         if (validateInput(password, email)==0){
  117.                             loginButton.setVisibility(View.GONE);
  118.                             registerButton.setVisibility(View.GONE);
  119.                             animationView.setVisibility(View.VISIBLE);
  120.                             animationView.setRepeatCount(ValueAnimator.INFINITE);
  121.                             animationView.playAnimation();
  122.                             Log.d(TAG, "Password: " + loginPassword.getText().toString());
  123.                             Log.d(TAG, "Email: " + loginEmail.getText().toString());
  124.  
  125.                             //Log in
  126.                             signInEmailPassword(email, password);
  127.                         }
  128.                     }
  129.                 }
  130.                 else{
  131.                     Log.e(TAG, "Tried to login without network");
  132.                     Toast.makeText(context, getString(R.string.no_internet), Toast.LENGTH_SHORT).show();
  133.                 }
  134.             }
  135.         });
  136.  
  137.         registerButton = findViewById(R.id.register_button);
  138.         registerButton.setOnClickListener(new View.OnClickListener() {
  139.             @Override
  140.             public void onClick(View v) {
  141.                 if (!alreadyClicked){
  142.                     alreadyClicked = true;
  143.                     Intent intent = new Intent(Login.this, Register.class);
  144.                     startActivity(intent);
  145.                     alreadyClicked = false;
  146.                 }
  147.             }
  148.         });
  149.  
  150.         googleButton = findViewById(R.id.google_button);
  151.         googleButton.setOnClickListener(new View.OnClickListener() {
  152.             @Override
  153.             public void onClick(View v) {
  154.                 if (isNetworkConnected()){
  155.                     //Log in with google
  156.                     Log.d(TAG, "Clicked and internet is up");
  157.                     signInGoogle();
  158.                 }
  159.                 else{
  160.                     Log.e(TAG, "Tried to login without internet");
  161.                     Toast.makeText(context, R.string.no_internet, Toast.LENGTH_SHORT).show();
  162.                 }
  163.             }
  164.         });
  165.  
  166.         passwordVisibilityButton = findViewById(R.id.icon_password_visibility);
  167.         passwordVisibilityButton.setOnClickListener(new View.OnClickListener() {
  168.             @Override
  169.             public void onClick(View v) {
  170.                 passwordVisible = !passwordVisible;
  171.                 if (passwordVisible){
  172.                     passwordVisibilityButton.setBackground(ContextCompat.getDrawable(context, R.drawable.password_visible));
  173.                     loginPassword.setInputType(InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD);
  174.                 }
  175.                 else{
  176.                     passwordVisibilityButton.setBackground(ContextCompat.getDrawable(context, R.drawable.password_not_visible));
  177.                     loginPassword.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);
  178.                 }
  179.                 loginPassword.setSelection(loginPassword.length());
  180.             }
  181.         });
  182.     }
  183.  
  184.     private void signInEmailPassword(String email, String password){
  185.         mAuth.signInWithEmailAndPassword(email, password)
  186.                 .addOnSuccessListener(new OnSuccessListener<AuthResult>() {
  187.                     @Override
  188.                     public void onSuccess(AuthResult authResult) {
  189.                         if (authResult.getUser()!=null){
  190.                             //Update timestamp in database
  191.                             failedAttempts = 0;
  192.                             Map<String, Object> data = new HashMap<>();
  193.                             data.put("lastlogin", Timestamp.now());
  194.                             db.collection("users").document(authResult.getUser().getUid())
  195.                                     .update(data);
  196.  
  197.                             //Create new intent to main activity
  198.                             Toast.makeText(context, "Logged in", Toast.LENGTH_SHORT).show();
  199.                             Intent intent = new Intent(thisInstance, Home.class);
  200.                             startActivity(intent);
  201.                             finish();
  202.                             Handler h = new Handler();
  203.                             h.postDelayed(new Runnable() {
  204.                                 @Override
  205.                                 public void run() {
  206.                                     alreadyClicked = false;
  207.                                 }
  208.                             }, 2000);
  209.                         }
  210.                         else Toast.makeText(context, "Email/password incorreto", Toast.LENGTH_SHORT).show();
  211.                         alreadyClicked = false;
  212.                     }
  213.                 })
  214.                 .addOnFailureListener(new OnFailureListener() {
  215.                     @Override
  216.                     public void onFailure(@NonNull Exception e) {
  217.                         failedAttempts+=1;
  218.                         loginButton.setVisibility(View.VISIBLE);
  219.                         registerButton.setVisibility(View.VISIBLE);
  220.                         animationView.pauseAnimation();
  221.                         animationView.setVisibility(View.GONE);
  222.                         Toast.makeText(context, "Erro de login.", Toast.LENGTH_SHORT).show();
  223.                         if (failedAttempts > 3){
  224.                             Toast.makeText(context, "Associou este email a uma conta Google?", Toast.LENGTH_LONG).show();
  225.                         }
  226.                         alreadyClicked = false;
  227.                     }
  228.                 });
  229.     }
  230.  
  231.     private void signInGoogle(){
  232.         Intent signIntent = Auth.GoogleSignInApi.getSignInIntent(mGoogleApiClient);
  233.         startActivityForResult(signIntent,RC_SIGN_IN);
  234.     }
  235.  
  236.     @Override
  237.     protected void onActivityResult(int requestCode, int resultCode, Intent data) {
  238.         super.onActivityResult(requestCode, resultCode, data);
  239.         if(requestCode==RC_SIGN_IN){
  240.             GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data);
  241.             Log.d(TAG, "Result is :" + result);
  242.             Log.d(TAG, "Result status: " + result.getStatus());
  243.             if(result.isSuccess()){
  244.                 Log.d(TAG, "ActivityResult is successful, starting authWtihGoogle");
  245.                 GoogleSignInAccount account = result.getSignInAccount();
  246.                 authWithGoogle(account);
  247.             }
  248.         }
  249.     }
  250.  
  251.     private void authWithGoogle(GoogleSignInAccount account) {
  252.         Log.d(TAG, "Started authWithGoogle");
  253.         AuthCredential credential = GoogleAuthProvider.getCredential(account.getIdToken(),null);
  254.         mAuth.signInWithCredential(credential).addOnCompleteListener(new OnCompleteListener<AuthResult>() {
  255.             @Override
  256.             public void onComplete(@NonNull Task<AuthResult> task) {
  257.                 if(task.isSuccessful()){
  258.                     //Update value in database
  259.                     Map<String,Object> data = new HashMap<>();
  260.                     data.put("lastlogin", Timestamp.now());
  261.                     Log.d(TAG,"Task signInGoogle is success: " + FirebaseAuth.getInstance().getUid());
  262.                     db.collection("users").document(FirebaseAuth.getInstance().getUid())
  263.                             .update(data);
  264.                     startActivity(new Intent(getApplicationContext(),Login.class));
  265.                     finish();
  266.                 }
  267.                 else{
  268.                     Toast.makeText(getApplicationContext(),"Auth Error",Toast.LENGTH_SHORT).show();
  269.                 }
  270.             }
  271.         });
  272.     }
  273.  
  274.     private int validateInput(String password, String email){
  275.         if (password.isEmpty()){
  276.             loginPassword.setError(getString(R.string.empty_username));
  277.             alreadyClicked = false;
  278.             return 1;
  279.         }
  280.         else if (email.isEmpty()){
  281.             alreadyClicked = false;
  282.             loginEmail.setError(getString(R.string.empty_username));
  283.             return 1;
  284.         }
  285.         else{
  286.             loginPassword.setError(null);
  287.             loginEmail.setError(null);
  288.             return 0;
  289.         }
  290.     }
  291.  
  292.     @Override
  293.     public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {
  294.     }
  295.  
  296.     private boolean isNetworkConnected() {
  297.         ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
  298.         return cm.getActiveNetworkInfo() != null;
  299.     }
  300. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement