Advertisement
Guest User

Untitled

a guest
Sep 13th, 2017
122
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 13.24 KB | None | 0 0
  1. package pawel.cooker.ui.Activity;
  2.  
  3. import android.animation.Animator;
  4. import android.animation.AnimatorListenerAdapter;
  5. import android.annotation.TargetApi;
  6. import android.content.Intent;
  7. import android.content.pm.PackageManager;
  8. import android.support.annotation.NonNull;
  9. import android.support.annotation.RequiresApi;
  10. import android.support.design.widget.Snackbar;
  11. import android.support.v7.app.AppCompatActivity;
  12. import android.app.LoaderManager.LoaderCallbacks;
  13.  
  14. import android.content.CursorLoader;
  15. import android.content.Loader;
  16. import android.database.Cursor;
  17. import android.net.Uri;
  18. import android.os.AsyncTask;
  19.  
  20. import android.os.Build;
  21. import android.os.Bundle;
  22. import android.provider.ContactsContract;
  23. import android.text.TextUtils;
  24. import android.view.KeyEvent;
  25. import android.view.View;
  26. import android.view.View.OnClickListener;
  27. import android.view.inputmethod.EditorInfo;
  28. import android.widget.ArrayAdapter;
  29. import android.widget.AutoCompleteTextView;
  30. import android.widget.Button;
  31. import android.widget.EditText;
  32. import android.widget.TextView;
  33. import android.widget.Toast;
  34.  
  35. import com.google.common.hash.Hashing;
  36.  
  37. import java.nio.charset.StandardCharsets;
  38. import java.util.ArrayList;
  39. import java.util.List;
  40.  
  41. import pawel.cooker.R;
  42. import pawel.cooker.api.model.User;
  43. import pawel.cooker.api.service.Api;
  44. import pawel.cooker.api.service.ApiService;
  45. import retrofit2.Call;
  46. import retrofit2.Callback;
  47. import retrofit2.Response;
  48.  
  49. import static android.Manifest.permission.READ_CONTACTS;
  50.  
  51. public class LoginActivity extends AppCompatActivity implements LoaderCallbacks<Cursor> {
  52.  
  53.     /**
  54.      * Id to identity READ_CONTACTS permission request.
  55.      */
  56.     private static final int REQUEST_READ_CONTACTS = 0;
  57.  
  58.     /**
  59.      * Keep track of the login task to ensure we can cancel it if requested.
  60.      */
  61.     private UserLoginTask mAuthTask = null;
  62.  
  63.     // UI references.
  64.     private AutoCompleteTextView mEmailView;
  65.     private EditText mPasswordView;
  66.     private View mProgressView;
  67.     private View mLoginFormView;
  68.  
  69.     //Retrofit
  70.     private Api api;
  71.     private ApiService apiService;
  72.  
  73.     //User
  74.     User user = null;
  75.  
  76.     @Override
  77.     protected void onCreate(Bundle savedInstanceState) {
  78.         super.onCreate(savedInstanceState);
  79.         setContentView(R.layout.activity_login);
  80.         // Set up the login form.
  81.         mEmailView = (AutoCompleteTextView) findViewById(R.id.email);
  82.         populateAutoComplete();
  83.  
  84.         mPasswordView = (EditText) findViewById(R.id.password);
  85.         mPasswordView.setOnEditorActionListener(new TextView.OnEditorActionListener() {
  86.             @Override
  87.             public boolean onEditorAction(TextView textView, int id, KeyEvent keyEvent) {
  88.                 if (id == R.id.login || id == EditorInfo.IME_NULL) {
  89.                     attemptLogin();
  90.                     return true;
  91.                 }
  92.                 return false;
  93.             }
  94.         });
  95.  
  96.         Button mEmailSignInButton = (Button) findViewById(R.id.email_sign_in_button);
  97.         mEmailSignInButton.setOnClickListener(new OnClickListener() {
  98.             @Override
  99.             public void onClick(View view) {
  100.                 attemptLogin();
  101.             }
  102.         });
  103.  
  104.         mLoginFormView = findViewById(R.id.login_form);
  105.         mProgressView = findViewById(R.id.login_progress);
  106.  
  107.         //Retrofit
  108.         api = Api.getInstance();
  109.         apiService = api.getApiService();
  110.     }
  111.  
  112.     private void populateAutoComplete() {
  113.         if (!mayRequestContacts()) {
  114.             return;
  115.         }
  116.  
  117.         getLoaderManager().initLoader(0, null, this);
  118.     }
  119.  
  120.     private boolean mayRequestContacts() {
  121.         if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
  122.             return true;
  123.         }
  124.         if (checkSelfPermission(READ_CONTACTS) == PackageManager.PERMISSION_GRANTED) {
  125.             return true;
  126.         }
  127.         if (shouldShowRequestPermissionRationale(READ_CONTACTS)) {
  128.             Snackbar.make(mEmailView, R.string.permission_rationale, Snackbar.LENGTH_INDEFINITE)
  129.                     .setAction(android.R.string.ok, new View.OnClickListener() {
  130.                         @Override
  131.                         @TargetApi(Build.VERSION_CODES.M)
  132.                         public void onClick(View v) {
  133.                             requestPermissions(new String[]{READ_CONTACTS}, REQUEST_READ_CONTACTS);
  134.                         }
  135.                     });
  136.         } else {
  137.             requestPermissions(new String[]{READ_CONTACTS}, REQUEST_READ_CONTACTS);
  138.         }
  139.         return false;
  140.     }
  141.  
  142.     /**
  143.      * Callback received when a permissions request has been completed.
  144.      */
  145.     @Override
  146.     public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,
  147.                                            @NonNull int[] grantResults) {
  148.         if (requestCode == REQUEST_READ_CONTACTS) {
  149.             if (grantResults.length == 1 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
  150.                 populateAutoComplete();
  151.             }
  152.         }
  153.     }
  154.  
  155.  
  156.     /**
  157.      * Attempts to sign in or register the account specified by the login form.
  158.      * If there are form errors (invalid email, missing fields, etc.), the
  159.      * errors are presented and no actual login attempt is made.
  160.      */
  161.     private void attemptLogin() {
  162.         if (mAuthTask != null) {
  163.             return;
  164.         }
  165.  
  166.         // Reset errors.
  167.         mEmailView.setError(null);
  168.         mPasswordView.setError(null);
  169.  
  170.         // Store values at the time of the login attempt.
  171.         String email = mEmailView.getText().toString();
  172.         String password = mPasswordView.getText().toString();
  173.  
  174.         boolean cancel = false;
  175.         View focusView = null;
  176.  
  177.         // Check for a valid password, if the user entered one.
  178.         if (!TextUtils.isEmpty(password) && !isPasswordValid(password)) {
  179.             mPasswordView.setError(getString(R.string.error_invalid_password));
  180.             focusView = mPasswordView;
  181.             cancel = true;
  182.         }
  183.  
  184.         // Check for a valid email address.
  185.         if (TextUtils.isEmpty(email)) {
  186.             mEmailView.setError(getString(R.string.error_field_required));
  187.             focusView = mEmailView;
  188.             cancel = true;
  189.         } else if (!isEmailValid(email)) {
  190.             mEmailView.setError(getString(R.string.error_invalid_email));
  191.             focusView = mEmailView;
  192.             cancel = true;
  193.         }
  194.  
  195.         if (cancel) {
  196.             // There was an error; don't attempt login and focus the first
  197.             // form field with an error.
  198.             focusView.requestFocus();
  199.         } else {
  200.             // Show a progress spinner, and kick off a background task to
  201.             // perform the user login attempt.
  202.             showProgress(true);
  203.             mAuthTask = new UserLoginTask(email, password);
  204.             mAuthTask.execute((Void) null);
  205.         }
  206.     }
  207.  
  208.     private boolean isEmailValid(String email) {
  209.         //TODO: Replace this with your own logic
  210.         return email.contains("@");
  211.     }
  212.  
  213.     private boolean isPasswordValid(String password) {
  214.         //TODO: Replace this with your own logic
  215.         return password.length() > 4;
  216.     }
  217.  
  218.     /**
  219.      * Shows the progress UI and hides the login form.
  220.      */
  221.     @TargetApi(Build.VERSION_CODES.HONEYCOMB_MR2)
  222.     private void showProgress(final boolean show) {
  223.         // On Honeycomb MR2 we have the ViewPropertyAnimator APIs, which allow
  224.         // for very easy animations. If available, use these APIs to fade-in
  225.         // the progress spinner.
  226.         if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB_MR2) {
  227.             int shortAnimTime = getResources().getInteger(android.R.integer.config_shortAnimTime);
  228.  
  229.             mLoginFormView.setVisibility(show ? View.GONE : View.VISIBLE);
  230.             mLoginFormView.animate().setDuration(shortAnimTime).alpha(
  231.                     show ? 0 : 1).setListener(new AnimatorListenerAdapter() {
  232.                 @Override
  233.                 public void onAnimationEnd(Animator animation) {
  234.                     mLoginFormView.setVisibility(show ? View.GONE : View.VISIBLE);
  235.                 }
  236.             });
  237.  
  238.             mProgressView.setVisibility(show ? View.VISIBLE : View.GONE);
  239.             mProgressView.animate().setDuration(shortAnimTime).alpha(
  240.                     show ? 1 : 0).setListener(new AnimatorListenerAdapter() {
  241.                 @Override
  242.                 public void onAnimationEnd(Animator animation) {
  243.                     mProgressView.setVisibility(show ? View.VISIBLE : View.GONE);
  244.                 }
  245.             });
  246.         } else {
  247.             // The ViewPropertyAnimator APIs are not available, so simply show
  248.             // and hide the relevant UI components.
  249.             mProgressView.setVisibility(show ? View.VISIBLE : View.GONE);
  250.             mLoginFormView.setVisibility(show ? View.GONE : View.VISIBLE);
  251.         }
  252.     }
  253.  
  254.     @Override
  255.     public Loader<Cursor> onCreateLoader(int i, Bundle bundle) {
  256.         return new CursorLoader(this,
  257.                 // Retrieve data rows for the device user's 'profile' contact.
  258.                 Uri.withAppendedPath(ContactsContract.Profile.CONTENT_URI,
  259.                         ContactsContract.Contacts.Data.CONTENT_DIRECTORY), ProfileQuery.PROJECTION,
  260.  
  261.                 // Select only email addresses.
  262.                 ContactsContract.Contacts.Data.MIMETYPE +
  263.                         " = ?", new String[]{ContactsContract.CommonDataKinds.Email
  264.                 .CONTENT_ITEM_TYPE},
  265.  
  266.                 // Show primary email addresses first. Note that there won't be
  267.                 // a primary email address if the user hasn't specified one.
  268.                 ContactsContract.Contacts.Data.IS_PRIMARY + " DESC");
  269.     }
  270.  
  271.     @Override
  272.     public void onLoadFinished(Loader<Cursor> cursorLoader, Cursor cursor) {
  273.         List<String> emails = new ArrayList<>();
  274.         cursor.moveToFirst();
  275.         while (!cursor.isAfterLast()) {
  276.             emails.add(cursor.getString(ProfileQuery.ADDRESS));
  277.             cursor.moveToNext();
  278.         }
  279.  
  280.         addEmailsToAutoComplete(emails);
  281.     }
  282.  
  283.     @Override
  284.     public void onLoaderReset(Loader<Cursor> cursorLoader) {
  285.  
  286.     }
  287.  
  288.     private void addEmailsToAutoComplete(List<String> emailAddressCollection) {
  289.         //Create adapter to tell the AutoCompleteTextView what to show in its dropdown list.
  290.         ArrayAdapter<String> adapter =
  291.                 new ArrayAdapter<>(LoginActivity.this,
  292.                         android.R.layout.simple_dropdown_item_1line, emailAddressCollection);
  293.  
  294.         mEmailView.setAdapter(adapter);
  295.     }
  296.  
  297.  
  298.     private interface ProfileQuery {
  299.         String[] PROJECTION = {
  300.                 ContactsContract.CommonDataKinds.Email.ADDRESS,
  301.                 ContactsContract.CommonDataKinds.Email.IS_PRIMARY,
  302.         };
  303.  
  304.         int ADDRESS = 0;
  305.         int IS_PRIMARY = 1;
  306.     }
  307.  
  308.     /**
  309.      * Represents an asynchronous login/registration task used to authenticate
  310.      * the user.
  311.      */
  312.     public class UserLoginTask extends AsyncTask<Void, Void, Boolean> {
  313.  
  314.         private final String mEmail;
  315.         private final String mPassword;
  316.  
  317.         UserLoginTask(String email, String password) {
  318.             mEmail = email;
  319.             mPassword = password;
  320.         }
  321.  
  322.         @RequiresApi(api = Build.VERSION_CODES.KITKAT)
  323.         @Override
  324.         protected Boolean doInBackground(Void... params) {
  325.  
  326.             try {
  327.                 Thread.sleep(200);
  328.                 Call<User> call = apiService.DataForUser(mEmail);
  329.                 call.enqueue(new Callback<User>() {
  330.                     @Override
  331.                     public void onResponse(Call<User> call, Response<User> response) {
  332.                         user=response.body();
  333.                     }
  334.  
  335.                     @Override
  336.                     public void onFailure(Call<User> call, Throwable t) {
  337.  
  338.                     }
  339.                 });
  340.             } catch (Exception e) {
  341.                 return false;
  342.             }
  343.  
  344.             if(user!=null)
  345.             {
  346.                 String hash_pass = Hashing.sha256()
  347.                         .hashString(mPassword, StandardCharsets.UTF_8)
  348.                         .toString();
  349.  
  350.                 if(hash_pass.equals(user.getPassword())) {
  351.                     return true;
  352.                 }
  353.                 else
  354.                 {
  355.                     return false;
  356.                 }
  357.             }
  358.             else
  359.             {
  360.                 return false;
  361.             }
  362.         }
  363.  
  364.         @Override
  365.         protected void onPostExecute(final Boolean success) {
  366.             mAuthTask = null;
  367.             showProgress(false);
  368.  
  369.             if (success) {
  370.                 Switch();
  371.             } else {
  372.                 mPasswordView.setError(getString(R.string.error_incorrect_password));
  373.                 mPasswordView.requestFocus();
  374.             }
  375.         }
  376.  
  377.         @Override
  378.         protected void onCancelled() {
  379.             mAuthTask = null;
  380.             showProgress(false);
  381.         }
  382.     }
  383.  
  384.     public void Switch (){
  385.         Toast.makeText(LoginActivity.this, "Succes!", Toast.LENGTH_SHORT).show();
  386.         Intent intent = new Intent(this, MainActivity.class);
  387.         startActivity (intent);
  388.     }
  389. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement