package pt.codebits.park.alert;
import pt.codebits.park.alert.comm.REST;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.telephony.TelephonyManager;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.ProgressBar;
public class RegisterActivity extends Activity {
private static final String USERNAME_ALREADY_EXISTS = "usernameAlreadyExists";
private static final String EMAIL_INCORRECT = "emailIncorrect";
private static final String WRONG_PHONE_NUMBER = "wrongPhoneNumber";
private static final String JSON_PROBLEMS = "jsonProblems";
private SharedPreferences mPrefs;
public static final String PREFS_NAME = "ValuesPreferences";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.register);
final Button registerBtn = (Button) findViewById(R.id.registerbtn);
mPrefs = getSharedPreferences(PREFS_NAME, MODE_PRIVATE);
TelephonyManager tMgr =(TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
final String mPhoneNumber = tMgr.getLine1Number();
final EditText usernameForm = (EditText) findViewById(R.id.utilizadorform);
final EditText emailForm = (EditText) findViewById(R.id.emailform);
final EditText passwordForm = (EditText) findViewById(R.id.palavrachaveform);
final EditText passwordConfirmForm = (EditText) findViewById(R.id.palavrachaveconfirmform);
final EditText phoneNumberForm = (EditText) findViewById(R.id.phoneform);
if (mPhoneNumber != null && mPhoneNumber.length() != 0) {
phoneNumberForm.setText(mPhoneNumber);
}
registerBtn.setOnClickListener(new OnClickListener() {
private boolean allFieldsFilled() {
String username = usernameForm.getText().toString();
String email = emailForm.getText().toString();
String password = passwordForm.getText().toString();
String passwordConfirm = passwordConfirmForm.getText().toString();
String phoneNumber = phoneNumberForm.getText().toString();
if (username == null || username.length() == 0 || email == null || email.length() == 0
|| password == null || password.length() == 0 || passwordConfirm == null ||
passwordConfirm.length() == 0 || phoneNumber == null || phoneNumber.length() == 0) {
return false;
}
return true;
}
private boolean passwordsMatchEachOther() {
String password = passwordForm.getText().toString();
String passwordConfirm = passwordConfirmForm.getText().toString();
if (!password.equals(passwordConfirm)) {
return false;
}
return true;
}
private void setWarningMessage(final int msgUID) {
RegisterActivity.this.runOnUiThread(new Runnable() {
public void run() {
final android.widget.TextView warningView = (android.widget.TextView) findViewById(R.id.warningMsg);
warningView.setText(msgUID);
final ProgressBar progressBar = (ProgressBar) findViewById(R.id.progressBar);
stopProgressBar(progressBar);
return;
}
});
}
private void stopProgressBar(final ProgressBar progressBar) {
// Set the progress bar back to invisible and move on to next activity
RegisterActivity.this.runOnUiThread(new Runnable(){
public void run() {
progressBar.setVisibility(View.INVISIBLE);
}
});
}
public void onClick(View v) {
final android.widget.TextView warningView = (android.widget.TextView) findViewById(R.id.warningMsg);
// Test if the form is correctly filled in
if (!allFieldsFilled()) {
warningView.setText(R.string.fillFields);
return;
}
if (!passwordsMatchEachOther()) {
passwordForm.setText("");
passwordConfirmForm.setText("");
warningView.setText(R.string.mismatchPasswords);
return;
}
// Make the progress bar visible (changing UI, need the UI thread)
final ProgressBar progressBar = (ProgressBar) findViewById(R.id.progressBar);
RegisterActivity.this.runOnUiThread(new Runnable() {
public void run() {
progressBar.setVisibility(View.VISIBLE);
}
});
// Run the register request asynchronously, the UI thread remains responsive
// and the progress bar is spinning
new Thread() {
public void run() {
// This request is blocking in this concurrent Thread
String result = REST.registerUser(RegisterActivity.this, usernameForm.getText().toString(),
passwordForm.getText().toString(), emailForm.getText().toString(), phoneNumberForm.getText().toString());
if (REST.checkForStopConditions(RegisterActivity.this, result)) {
return;
}
if (result.equals(USERNAME_ALREADY_EXISTS)) {
setWarningMessage(R.string.usernameInUse);
return;
} else if (result.equals(EMAIL_INCORRECT)) {
setWarningMessage(R.string.emailWrong);
return;
} else if (result.equals(WRONG_PHONE_NUMBER)) {
setWarningMessage(R.string.wrongNumber);
return;
} else if (result.equals(JSON_PROBLEMS)) {
setWarningMessage(R.string.jsonProblems);
return;
}
setWarningMessage(R.string.empty);
String token = REST.loginUser(RegisterActivity.this, usernameForm.getText().toString(), passwordForm.getText().toString());
if (REST.checkForStopConditions(RegisterActivity.this, token)) {
return;
}
SharedPreferences.Editor editor = mPrefs.edit();
editor.putString("regular_access_token", token);
editor.commit();
stopProgressBar(progressBar);
MainMapActivity.redirectToLogin(RegisterActivity.this);
}
}.start();
}
});
final ImageButton fbBtn = (ImageButton) findViewById(R.id.fbbtn);
fbBtn.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
Intent intent = new Intent(RegisterActivity.this, LoginActivity.class);
intent.putExtra("registerFB", true);
RegisterActivity.this.startActivity(intent);
RegisterActivity.this.finish();
}
});
final ImageButton twitterBtn = (ImageButton) findViewById(R.id.twitterbtn);
twitterBtn.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
Intent intent = new Intent(RegisterActivity.this, LoginActivity.class);
intent.putExtra("registerTwitter", true);
RegisterActivity.this.startActivity(intent);
RegisterActivity.this.finish();
}
});
}
}