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);
}
}
}
}