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