package com.chehanr.yako;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import com.parse.ParseException;
import com.parse.ParseUser;
import com.parse.SignUpCallback;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegistrationActivity extends AppCompatActivity {
private EditText mUsernameEtxt;
private EditText mPasswordEtxt;
private EditText mCPasswordEtxt;
private EditText mEmailEtxt;
private EditText mNameEtxt;
private TextView mNametxt;
private Button mSignupBtn;
@Override
public void onBackPressed() {
Intent myIntent = new Intent(RegistrationActivity.this, AuthenticationActivity.class);
myIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(myIntent);
finish();
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setTitle(getString(R.string.title_activity_register));
setContentView(R.layout.activity_registration);
// Get view references
mUsernameEtxt = (EditText) findViewById(R.id.username);
mPasswordEtxt = (EditText) findViewById(R.id.password);
mCPasswordEtxt = (EditText) findViewById(R.id.c_password);
mEmailEtxt = (EditText) findViewById(R.id.email);
mNameEtxt = (EditText) findViewById(R.id.name);
mNametxt = (TextView) findViewById(R.id.name_view);
mSignupBtn = (Button) findViewById(R.id.btn_sign_up);
//Extract Authentication Activity's data
mUsernameEtxt.setText(getIntent().getStringExtra("u"));
mEmailEtxt.setText(getIntent().getStringExtra("e"));
mPasswordEtxt.setText(getIntent().getStringExtra("pw"));
// Setup button click listeners
mSignupBtn.setOnClickListener(new SignUpOnClickListener());
//Shows the shortened screen name
TextWatcher inputTextWatcher = new TextWatcher() {
public void afterTextChanged(Editable name) {
if (mNameEtxt != null && mNameEtxt.length() > 0) {
String sname = mNameEtxt.getText().toString().toUpperCase().trim().replaceAll("(?<=\\s.).*", "");
mNametxt.setVisibility(View.VISIBLE);
mNametxt.setText(getString(R.string.name_view) + sname.toString());
} else {
mNametxt.setVisibility(View.GONE);
}
}
public void beforeTextChanged(CharSequence fullname, int start, int count, int after) {
}
public void onTextChanged(CharSequence fullname, int start, int before, int count) {
}
};
mNameEtxt.addTextChangedListener(inputTextWatcher);
}
// Input validation
private boolean isFormInputValid(String username, String password, String c_password, String email, String name) {
mUsernameEtxt.setError(null);
mPasswordEtxt.setError(null);
mCPasswordEtxt.setError(null);
mEmailEtxt.setError(null);
mNameEtxt.setError(null);
//username
if (username == null || username.isEmpty()) {
mUsernameEtxt.setError(getString(R.string.error_username));
mUsernameEtxt.requestFocus();
return false;
}
//password
if (password == null || password.isEmpty()) {
mPasswordEtxt.setError(getString(R.string.error_password));
mPasswordEtxt.requestFocus();
return false;
}
//confirm password
if ((!c_password.equals(password))) {
mCPasswordEtxt.setError(getString(R.string.error_c_password));
mCPasswordEtxt.requestFocus();
return false;
}
//email
if (email == null || email.isEmpty()) {
mEmailEtxt.setError(getString(R.string.error_email));
mEmailEtxt.requestFocus();
return false;
}
//name
if (name == null || name.isEmpty()) {
mNameEtxt.setError(getString(R.string.error_name));
mNameEtxt.requestFocus();
return false;
}
return true;
}
public boolean isValidUsername(final String username) {
Pattern pattern;
Matcher matcher;
final String USERNAME_PATTERN = "^[a-zA-Z0-9._-]{4,}$";
pattern = Pattern.compile(USERNAME_PATTERN);
matcher = pattern.matcher(username);
return matcher.matches();
}
public boolean isValidPassword(final String password) {
Pattern pattern;
Matcher matcher;
final String PASSWORD_PATTERN = "(?=.*[0-9])(?=.*[a-z])(?=\\S+$).{8,}$";
pattern = Pattern.compile(PASSWORD_PATTERN);
matcher = pattern.matcher(password);
return matcher.matches();
}
//TODO: Fix this,
public boolean isValidEmail(final String email) {
Pattern pattern;
Matcher matcher;
final String EMAIL_PATTERN = "^[_A-Za-z0-9-]+(\\\\.[_A-Za-z0-9-]+)*@[A-Za-z0-9\\\\-]+(\\\\.[A-Za-z0-9]+)*(\\\\.[A-Za-z]{2,})$";
pattern = Pattern.compile(EMAIL_PATTERN);
matcher = pattern.matcher(email);
return true;
}
public boolean isValidName(final String name) {
Pattern pattern;
Matcher matcher;
final String NAME_PATTERN = "^[A-Za-z\\s]{1,}[\\.]{0,1}[A-Za-z\\s]{0,}$";
pattern = Pattern.compile(NAME_PATTERN);
matcher = pattern.matcher(name);
return matcher.matches();
}
// OnClickListener Implementations
private class SignUpOnClickListener implements View.OnClickListener {
@Override
public void onClick(View v) {
// Get the username and password from the view
String username = mUsernameEtxt.getText().toString().toLowerCase().trim();
String password = mPasswordEtxt.getText().toString().trim();
String c_password = mCPasswordEtxt.getText().toString();
String email = mEmailEtxt.getText().toString().trim();
String name = mNameEtxt.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, password, c_password, email, name)) {
if (isValidUsername(mUsernameEtxt.getText().toString().trim())) {
if (isValidPassword(mPasswordEtxt.getText().toString().trim())) {
if (email.indexOf('@') != -1) {
if (isValidName(mNameEtxt.getText().toString().trim())) {
ParseUser user = new ParseUser();
user.setUsername(username);
user.setPassword(password);
user.setEmail(email);
user.put("name", name);
//user.put("device_id", deviceId);
user.signUpInBackground(new SignUpCallback() {
public void done(ParseException e) {
if (e == null) {
// Successful sign up, take user to the MainActivity
Intent intent = new Intent(getBaseContext(), MainActivity.class).addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY | Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(intent);
finish();
} else {
// Sign up didn't succeed, most likely the username/email is taken
TextView error = (TextView) findViewById(R.id.info);
error.setVisibility(View.VISIBLE);
error.setText(getString(R.string.error_username_email_taken));
}
}
});
} else {
mNameEtxt.setError(getString(R.string.error_name_notvalid));
TextView error = (TextView) findViewById(R.id.info);
error.setVisibility(View.VISIBLE);
error.setText(getString(R.string.error_name_notvalid_detail));
Log.d("error", "name invalid");
}
} else {
mEmailEtxt.setError(getString(R.string.error_email_notvalid));
TextView error = (TextView) findViewById(R.id.info);
error.setVisibility(View.VISIBLE);
error.setText(getString(R.string.error_email_notvalid_detail));
Log.d("error", "email invalid");
}
} else {
mPasswordEtxt.setError(getString(R.string.error_password_weak));
TextView error = (TextView) findViewById(R.id.info);
error.setVisibility(View.VISIBLE);
error.setText(getString(R.string.error_password_weak_detail));
Log.d("error", "password invalid");
}
} else {
mUsernameEtxt.setError(getString(R.string.error_username_notvalid));
TextView error = (TextView) findViewById(R.id.info);
error.setVisibility(View.VISIBLE);
error.setText(getString(R.string.error_username_notvalid_detail));
Log.d("error", "username invalid");
}
}
}
}
}