package com.chehanr.yako; import android.content.Intent; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; import com.parse.GetCallback; import com.parse.LogInCallback; import com.parse.ParseException; import com.parse.ParseQuery; import com.parse.ParseUser; public class AuthenticationActivity extends AppCompatActivity { private EditText mUsernameEmailEtxt; private EditText mPasswordEtxt; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_authentication); // Get view references mPasswordEtxt = (EditText) findViewById(R.id.password); mUsernameEmailEtxt = (EditText) findViewById(R.id.username_email); Button mSigninBtn = (Button) findViewById(R.id.btn_sign_in); Button mSignupBtn = (Button) findViewById(R.id.btn_sign_up); Button mCredentialBtn = (Button) findViewById(R.id.forgotCredentials); // Setup button click listeners mSigninBtn.setOnClickListener(new SignInOnClickListener()); mSignupBtn.setOnClickListener(new SignUpOnClickListener()); mCredentialBtn.setOnClickListener(new RecoveryOnClickListener()); } // Input validation private boolean isFormInputValid(String username_email, String password) { mUsernameEmailEtxt.setError(null); mPasswordEtxt.setError(null); // validate the username or email if (username_email == null || username_email.isEmpty()) { mUsernameEmailEtxt.setError(getString(R.string.error_username_email)); mUsernameEmailEtxt.requestFocus(); return false; } // validate the password if (password == null || password.isEmpty()) { mPasswordEtxt.setError(getString(R.string.error_password)); mPasswordEtxt.requestFocus(); return false; } return true; } private class SignUpOnClickListener implements View.OnClickListener { @Override public void onClick(View v) { // Get the username and password from the view final String username_email = mUsernameEmailEtxt.getText().toString().toLowerCase().trim(); final String password = mPasswordEtxt.getText().toString().trim(); if (isFormInputValid(username_email, password)) { if (username_email.indexOf('@') != -1) { String email = mUsernameEmailEtxt.getText().toString().toLowerCase().trim(); Log.d("detector", "username_email detected as email:" + email); Intent intent = new Intent(AuthenticationActivity.this, RegistrationActivity.class); intent.putExtra("e", email); intent.putExtra("pw", password); startActivity(intent); } else { Log.d("detector", "username_email detected as username:" + username_email); Intent intent = new Intent(AuthenticationActivity.this, RegistrationActivity.class); intent.putExtra("u", username_email); intent.putExtra("pw", password); startActivity(intent); } } } } private class SignInOnClickListener implements View.OnClickListener { public void onClick(View v) { // Get the username and password from the view final String username_email = mUsernameEmailEtxt.getText().toString().toLowerCase().trim(); final String password = mPasswordEtxt.getText().toString().trim(); /* final TelephonyManager tm = (TelephonyManager) getBaseContext().getSystemService(Context.TELEPHONY_SERVICE); final String tmDevice, tmSerial, androidId; tmDevice = "" + tm.getDeviceId(); tmSerial = "" + tm.getSimSerialNumber(); androidId = "" + android.provider.Settings.Secure.getString(getContentResolver(), android.provider.Settings.Secure.ANDROID_ID); final UUID deviceUuid = new UUID(androidId.hashCode(), ((long)tmDevice.hashCode() << 32) | tmSerial.hashCode()); final String deviceId = deviceUuid.toString(); */ if (isFormInputValid(username_email, password)) { if (username_email.indexOf('@') != -1) { ParseQuery<ParseUser> query = ParseUser.getQuery(); query.whereEqualTo("email", username_email); query.getFirstInBackground(new GetCallback<ParseUser>() { public void done(ParseUser object, ParseException e) { if (object == null) { TextView error = (TextView) findViewById(R.id.info); error.setVisibility(View.VISIBLE); error.setText(getString(R.string.error_sign_in)); Log.d("error", "The getFirst request failed. Probably because no associated account found"); } else { String actualUsername = (String) object.get("username"); ParseUser.logInInBackground(actualUsername, password, new LogInCallback() { public void done(ParseUser user, ParseException e) { if (user != null) { // Hooray! The user is logged in. //user.put("device_id", deviceId); Intent intent = new Intent(getBaseContext(), MainActivity.class).addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY | Intent.FLAG_ACTIVITY_CLEAR_TASK); startActivity(intent); finish(); } else { TextView error = (TextView) findViewById(R.id.info); error.setVisibility(View.VISIBLE); error.setText(getString(R.string.error_sign_in)); Log.d("error", "email or password invalid"); } } }); } } }); } else { Log.d("detector", "username_email detected as username:" + username_email); ParseUser.logInInBackground(username_email, password, new LogInCallback() { public void done(ParseUser user, ParseException e) { if (user != null) { // Hooray! The user is logged in. //user.put("device_id", deviceId); Intent intent = new Intent(getBaseContext(), MainActivity.class).addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY | Intent.FLAG_ACTIVITY_CLEAR_TASK); startActivity(intent); finish(); } else { TextView error = (TextView) findViewById(R.id.info); error.setVisibility(View.VISIBLE); error.setText(getString(R.string.error_sign_in)); Log.d("error", "username or password invalid"); } } }); } } } } private class RecoveryOnClickListener implements View.OnClickListener { @Override public void onClick(View v) { // Get the username and password from the view final String username_email = mUsernameEmailEtxt.getText().toString().toLowerCase().trim(); if (username_email.indexOf('@') != -1) { String email = mUsernameEmailEtxt.getText().toString().toLowerCase().trim(); Log.d("detector", "username_email detected as email:" + email); Intent intent = new Intent(AuthenticationActivity.this, RecoveryActivity.class); intent.putExtra("e", email); startActivity(intent); } else { Log.d("detector", "username_email detected as username:" + username_email); Intent intent = new Intent(AuthenticationActivity.this, RecoveryActivity.class); startActivity(intent); } } } }