Advertisement
AoXhide

SingActivity.java

Oct 10th, 2016
103
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 16.25 KB | None | 0 0
  1. package id.my.asmith.myapplication;
  2.  
  3. import android.app.ProgressDialog;
  4. import android.content.DialogInterface;
  5. import android.content.Intent;
  6. import android.os.Bundle;
  7. import android.os.Handler;
  8. import android.support.annotation.NonNull;
  9. import android.support.v7.app.AlertDialog;
  10. import android.support.v7.app.AppCompatActivity;
  11. import android.text.TextUtils;
  12. import android.util.Log;
  13. import android.view.View;
  14. import android.view.inputmethod.EditorInfo;
  15. import android.widget.Button;
  16. import android.widget.EditText;
  17. import android.widget.RadioButton;
  18. import android.widget.Toast;
  19.  
  20. import com.google.android.gms.tasks.OnCompleteListener;
  21. import com.google.android.gms.tasks.Task;
  22. import com.google.firebase.auth.AuthResult;
  23. import com.google.firebase.auth.FirebaseAuth;
  24. import com.google.firebase.auth.FirebaseUser;
  25. import com.google.firebase.database.DatabaseReference;
  26. import com.google.firebase.database.FirebaseDatabase;
  27.  
  28. public class SingActivity extends AppCompatActivity {
  29.     //Declaration
  30.     private EditText mTxtEmail, mTxtPass;
  31.     private Button mBtnGO, mBtnForgot, mBtnAnon;
  32.     private ProgressDialog mProgressDialog;
  33.     private FirebaseAuth mAuth;
  34.     private DatabaseReference mDatabase;
  35.     private FirebaseAuth.AuthStateListener mAuthStateListener;
  36.     @Override
  37.     protected void onCreate(Bundle savedInstanceState) {
  38.         super.onCreate(savedInstanceState);
  39.         setContentView(R.layout.activity_sing);
  40.  
  41.         //Initialization
  42.         //Views
  43.         mProgressDialog = new ProgressDialog(this);
  44.         mAuth = FirebaseAuth.getInstance();
  45.         mDatabase = FirebaseDatabase.getInstance().getReference();
  46.         mTxtEmail = (EditText)findViewById(R.id.edEmail);
  47.         mTxtPass = (EditText)findViewById(R.id.edPwd);
  48.         mBtnGO = (Button)findViewById(R.id.btnGo);
  49.  
  50.         //Cek the user status
  51.         mAuthStateListener = new FirebaseAuth.AuthStateListener() {
  52.  
  53.  
  54.  
  55.             //Versi lain dari Aunt Instance
  56.             @Override
  57.             public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
  58.                 FirebaseUser user = firebaseAuth.getCurrentUser();
  59.  
  60.                 if (user != null) {
  61.                     // user has signed
  62.                     Log.d("Sing", "onAuthStateChanged:signed_in:" + user.getUid());
  63.                     startActivity(new Intent(SingActivity.this, MainActivity.class));
  64.                     finish();
  65.                 } else {
  66.                     // user has logout
  67.                     Log.d("Sing", "onAuthStateChanged:signed_out");
  68.                 }
  69.             }
  70.         };
  71.  
  72.         mBtnForgot = (Button) findViewById(R.id.btnForgot);
  73.         mBtnForgot.setOnClickListener(new View.OnClickListener() {
  74.             @Override
  75.             public void onClick(View v) {
  76.                 //Showing AlertDialog after clicking Button forgot
  77.                 final AlertDialog.Builder alertDialogBuilder =
  78.                         new AlertDialog.Builder(SingActivity.this);
  79.                 alertDialogBuilder.setTitle("Enter your registered email address!");
  80.                 alertDialogBuilder.setIcon(R.mipmap.ic_launcher);
  81.                 //Showing EditText in alertDialog
  82.                 final EditText inPwd = new EditText(SingActivity.this);
  83.                 alertDialogBuilder.setView(inPwd, 60, 60, 60, 0);
  84.                 inPwd.setImeOptions(EditorInfo.IME_ACTION_DONE);
  85.                 inPwd.setSingleLine(true);
  86.                 // set positive button: Send
  87.                 alertDialogBuilder.setPositiveButton("Send",new DialogInterface.OnClickListener() {
  88.                     public void onClick(final DialogInterface dialog, int id) {
  89.                         // go to a new activity of the app
  90.                         // onClickEvent to reset the password
  91.                         // Get string type data from inPwd
  92.                         String email = inPwd.getText().toString().trim();
  93.                         if (TextUtils.isEmpty(email)) {
  94.                             Toast.makeText(getApplication(),
  95.                                     "Enter your registered email address",
  96.                                     Toast.LENGTH_SHORT).show();
  97.                             return;
  98.                         }
  99.                         // Displaying Progress Dialog
  100.                         mProgressDialog.show();
  101.                         mProgressDialog.setMessage("Sending request!");
  102.                         // Sending data to your registered email address
  103.                         mAuth.sendPasswordResetEmail(email)
  104.                                 .addOnCompleteListener(new OnCompleteListener<Void>() {
  105.                                     @Override
  106.                                     public void onComplete(@NonNull Task<Void> task) {
  107.                                         mProgressDialog.dismiss();
  108.                                         if (task.isSuccessful()) {
  109.                                             // give notification if instructions reset
  110.                                             // password was send to your email
  111.                                             Toast.makeText(SingActivity.this,
  112.                                                     "We have sent you instructions" +
  113.                                                             " to reset your password!",
  114.                                                     Toast.LENGTH_SHORT).show();
  115.                                             int finishTime = 3; //10 secs
  116.                                             Handler handler = new Handler();
  117.                                             handler.postDelayed(new Runnable() {
  118.                                                 public void run() {
  119.                                                     dialog.cancel();
  120.                                                 }
  121.                                             }, finishTime * 300);
  122.                                         } else {
  123.                                             // notify to user if system cant send
  124.                                             // instructions to reset the password
  125.                                             Toast.makeText(SingActivity.this,
  126.                                                     "Failed to send an email!",
  127.                                                     Toast.LENGTH_SHORT).show();
  128.                                         }
  129.  
  130.  
  131.                                     }
  132.                                 });
  133.                     }
  134.                 });
  135.                 // set negative button: Cancel
  136.                 alertDialogBuilder.setNegativeButton("Cancel",new DialogInterface.OnClickListener() {
  137.                     public void onClick(DialogInterface dialog,int id) {
  138.                         // cancel the alert box and put a Toast to the user
  139.                         dialog.cancel();
  140.                         // notify to user hes press the cancel button
  141.                         Toast.makeText(getApplicationContext(), "Canceled",
  142.                                 Toast.LENGTH_LONG).show();
  143.                     }
  144.                 });
  145.                 AlertDialog alertDialog = alertDialogBuilder.create();
  146.                 // show alert
  147.                 alertDialog.show();
  148.             }
  149.         });
  150.  
  151.         mBtnAnon = (Button) findViewById(R.id.btnAnon);
  152.         mBtnAnon.setOnClickListener(new View.OnClickListener() {
  153.             @Override
  154.             public void onClick(View v) {
  155.                 mProgressDialog.show();
  156.                 mProgressDialog.setMessage("Please wait...");
  157.                 mAuth.signInAnonymously()
  158.                         .addOnCompleteListener(SingActivity.this, new OnCompleteListener<AuthResult>() {
  159.                             @Override
  160.                             public void onComplete(@NonNull Task<AuthResult> task) {
  161.                                 Log.d("user", "signInAnonymously:onComplete:" + task.isSuccessful());
  162.                                 mProgressDialog.dismiss();
  163.                                 // If sign in fails, display a message to the user. If sign in succeeds
  164.                                 // the auth state listener will be notified and logic to handle the
  165.                                 // signed in user can be handled in the listener.
  166.                                 if (!task.isSuccessful()) {
  167.                                     Log.w("user", "signInAnonymously", task.getException());
  168.                                     Toast.makeText(SingActivity.this, "Authentication failed.",
  169.                                             Toast.LENGTH_SHORT).show();
  170.                                 }
  171.  
  172.                             }
  173.                         });
  174.             }
  175.         });
  176.  
  177.  
  178.  
  179.     }
  180.  
  181.     // Radio button
  182.     public void onRadioButtonClicked(View view) {
  183.         // Is the button now checked?
  184.         boolean checked = ((RadioButton) view).isChecked();
  185.  
  186.         // Check which radio button was clicked
  187.         switch(view.getId()) {
  188.             case R.id.radio_singup:
  189.                 if (checked)
  190.  
  191.                     // set button in singUp mode
  192.                     mBtnGO.setOnClickListener(new View.OnClickListener() {
  193.                         @Override
  194.                         public void onClick(View view) {
  195.                             Log.d("user", "signUp");
  196.                             if (!validateForm()) {
  197.                                 return;
  198.                             }
  199.                             //getString from editText
  200.                             String email = mTxtEmail.getText().toString();
  201.                             final String password = mTxtPass.getText().toString();
  202.                             //Progress singUp
  203.                             mProgressDialog.show();
  204.                             mProgressDialog.setMessage("Please wait...");
  205.                             mAuth.createUserWithEmailAndPassword(email, password)
  206.                                     .addOnCompleteListener(new OnCompleteListener<AuthResult>() {
  207.                                         @Override
  208.                                         public void onComplete(@NonNull Task<AuthResult> task) {
  209.                                             Log.d("user", "createUser:onComplete:" +
  210.                                                     task.isSuccessful());
  211.  
  212.                                             mProgressDialog.dismiss();
  213.                                             if (task.isSuccessful()) {
  214.                                                 onAuthSuccess(task.getResult().getUser());
  215.                                             } else {
  216.                                                 // there was an error
  217.                                                 if (password.length() < 6) {
  218.                                                     mTxtPass.setError(getString(R.string.min_pwd));
  219.                                                 } else {
  220.                                                     Toast.makeText(SingActivity.this,
  221.                                                             "Oops! ada masalah dengan email anda," +
  222.                                                                     " coba periksa kembali!!",
  223.                                                             Toast.LENGTH_LONG).show();
  224.                                                 }
  225.  
  226.                                             }
  227.                                         }
  228.                                     });
  229.                         }
  230.                     });
  231.                 // End of singUp task
  232.                 break;
  233.             case R.id.radio_singin:
  234.                 if (checked)
  235.                     //SingIn Mode
  236.                     mBtnGO.setOnClickListener(new View.OnClickListener() {
  237.                         @Override
  238.                         public void onClick(View view) {
  239.                             Log.d("user", "signIn");
  240.  
  241.                             if (!validateForm()) {
  242.                                 return;
  243.                             }
  244.  
  245.                             String email = mTxtEmail.getText().toString();
  246.                             final String password = mTxtPass.getText().toString();
  247.                             //Progress singIn
  248.                             mProgressDialog.show();
  249.                             mProgressDialog.setMessage("Please wait...");
  250.                             mAuth.signInWithEmailAndPassword(email, password)
  251.                                     .addOnCompleteListener(SingActivity.this, new OnCompleteListener<AuthResult>() {
  252.                                         @Override
  253.                                         public void onComplete(@NonNull Task<AuthResult> task) {
  254.                                             // If sign in fails, display a message to the user. If sign in succeeds
  255.                                             // the auth state listener will be notified and logic to handle the
  256.                                             // signed in user can be handled in the listener.
  257.                                             mProgressDialog.dismiss();
  258.  
  259.                                             if (!task.isSuccessful()) {
  260.  
  261.                                                 // there was an error
  262.                                                 if (password.length() < 6) {
  263.                                                     mTxtPass.setError(getString(R.string.min_pwd));
  264.                                                 } else {
  265.                                                     Toast.makeText(SingActivity.this,
  266.                                                             getString(R.string.mAuth_fail),
  267.                                                             Toast.LENGTH_LONG).show();
  268.                                                 }
  269.                                             } else {
  270.                                                 Toast.makeText(SingActivity.this, "Welcome back " +
  271.                                                                 mTxtEmail.getText().toString(),
  272.                                                         Toast.LENGTH_SHORT).show();
  273.  
  274.  
  275.                                                 startActivity(new Intent(SingActivity.this,
  276.                                                         MainActivity.class));
  277.                                                 finish();
  278.                                             }
  279.                                         }
  280.                                     });
  281.                         }
  282.                     });
  283.  
  284.                 //End of progress singIn
  285.                 break;
  286.  
  287.             default:
  288.                 break;
  289.         }
  290.     }
  291.  
  292.     @Override
  293.     public void onStart() {
  294.         super.onStart();
  295.         mAuth.addAuthStateListener(mAuthStateListener);
  296.     }
  297.  
  298.     @Override
  299.     public void onStop() {
  300.         super.onStop();
  301.         if (mAuthStateListener != null) {
  302.             mAuth.removeAuthStateListener(mAuthStateListener);
  303.         }
  304.     }
  305.  
  306.     //If singUp was success email from database converted to username from this method and save it
  307.     //on WriteNewUser task
  308.     private void onAuthSuccess(FirebaseUser user) {
  309.         String username = usernameFromEmail(user.getEmail());
  310.  
  311.         // Write new user
  312.         writeNewUser(user.getUid(), username, user.getEmail());
  313.  
  314.         // Go to MainActivity
  315.         startActivity(new Intent(SingActivity.this, MainActivity.class));
  316.         finish();
  317.     }
  318.  
  319.     //Get username from email
  320.     private String usernameFromEmail(String email) {
  321.         if (email.contains("@")) {
  322.             return email.split("@")[0];
  323.         } else {
  324.             return email;
  325.         }
  326.     }
  327.  
  328.     private boolean validateForm() {
  329.         boolean result = true;
  330.         if (TextUtils.isEmpty(mTxtEmail.getText().toString())) {
  331.             mTxtEmail.setError("Required");
  332.             result = false;
  333.         } else {
  334.             mTxtEmail.setError(null);
  335.         }
  336.  
  337.         if (TextUtils.isEmpty(mTxtPass.getText().toString())) {
  338.             mTxtPass.setError("Required");
  339.             result = false;
  340.         } else {
  341.             mTxtPass.setError(null);
  342.         }
  343.  
  344.         return result;
  345.     }
  346.  
  347.  
  348.     // [START basic_write on Firebase Database]
  349.     private void writeNewUser(String userId, String name, String email) {
  350.         User user = new User(name, email);
  351.  
  352.         mDatabase.child("users").child(userId).setValue(user);
  353.     }
  354.  
  355. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement