package com.sjriley.zappit;
import java.util.Calendar;
import com.sjriley.zappit.models.CreateAccountModel;
import com.sjriley.zappit.models.LoginModel;
import com.sjriley.zappit.vo.CreateAccountResponse;
import com.sjriley.zappit.vo.LoginResponse;
import android.app.Activity;
import android.app.DatePickerDialog;
import android.app.Dialog;
import android.app.ProgressDialog;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.SharedPreferences;
import android.content.res.Configuration;
import android.net.ConnectivityManager;
import android.os.Bundle;
import android.os.Handler;
import android.text.Html;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.Checkable;
import android.widget.DatePicker;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;
public class CreateAccountActivity extends Activity
{
private static final String TAG = CreateAccountActivity.class.getSimpleName();
static final int DATE_DIALOG_ID = 0;
private int year;
private int month;
private int day;
private EditText fullName;
private EditText email;
private EditText password;
private EditText repeatPassword;
private EditText dateOfBirth;
private Spinner genderSpinner;
private EditText postcode;
private CheckBox promo;
private BroadcastReceiver logoutReceiver;
private CreateAccountResponse response;
private ProgressDialog progressDialog;
private Button createAccountButton;
private final Handler httpHandler = new Handler();
final Runnable createAccountReturned = new Runnable() {
public void run() {
createAccountComplete();
}
};
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.create_account);
fullName = (EditText)findViewById(R.id.fullName);
email = (EditText)findViewById(R.id.email);
password = (EditText)findViewById(R.id.password);
repeatPassword = (EditText)findViewById(R.id.repeatPassword);
dateOfBirth = (EditText)findViewById(R.id.dateOfBirth);
genderSpinner = (Spinner)findViewById(R.id.genderSpinner);
postcode = (EditText)findViewById(R.id.postcode);
promo = (CheckBox)findViewById(R.id.promotionsCheckbox);
createAccountButton= (Button)findViewById(R.id.createAccountButton);
Spinner spinner = (Spinner) findViewById(R.id.genderSpinner);
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(
this, R.array.gender_array, android.R.layout.simple_spinner_item);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(adapter);
dateOfBirth = (EditText) findViewById(R.id.dateOfBirth);
dateOfBirth.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
showDialog(DATE_DIALOG_ID);
}
});
createAccountButton.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View arg0)
{
createAccountClick();
}
});
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction("com.sjriley.zappit.ACTION_LOGOUT");
logoutReceiver = new BroadcastReceiver (){
@Override
public void onReceive(Context context, Intent intent) {
Log.d("LoginActivity","Logout in progress");
finish();
}
};
registerReceiver(logoutReceiver, intentFilter);
// get the current date
final Calendar c = Calendar.getInstance();
year = c.get(Calendar.YEAR);
year -= 20;
month = c.get(Calendar.MONTH);
day = c.get(Calendar.DAY_OF_MONTH);
}
private void createAccountClick() {
if(isConnected()){
Thread t = new Thread() {
public void run() {
runCreateAccount();
}
};
t.start();
progressDialog = ProgressDialog.show(this, "Please wait..", "Creating Account", true,
false);
}
else {
Toast toast = Toast.makeText(this, "Please connect to the internet before logging in", Toast.LENGTH_LONG);
toast.show();
}
}
private void runCreateAccount() {
CreateAccountModel model = new CreateAccountModel(this);
String[] splitDate = dateOfBirth.getText().toString().split("/");
response = model.createAccount("Tq32wx1w",
fullName.getText().toString(),
email.getText().toString(),
password.getText().toString(),
repeatPassword.getText().toString(),
splitDate[0],
splitDate[1],
splitDate[2],
genderSpinner.getSelectedItem().toString(),
postcode.getText().toString(),
promo.isChecked() ? "1" : "0");
httpHandler.post(createAccountReturned);
}
@Override
public void onConfigurationChanged(Configuration newConfig)
{
super.onConfigurationChanged(newConfig);
}
private void createAccountComplete() {
progressDialog.dismiss();
if(response.getStatus() == 0) {
Toast toast = Toast.makeText(this, response.getMessage(), Toast.LENGTH_LONG);
toast.show();
}
else {
Log.d(TAG, "UserId: " + response.getUserId());
SharedPreferences prefs = getSharedPreferences(PreferencesActivity.DEFAULT_PREFERECES, 0);
SharedPreferences.Editor editor = prefs.edit();
editor.putString(PreferencesActivity.USER_ID, response.getUserId());
editor.putString(PreferencesActivity.USER_NAME, response.getUsername());
editor.commit();
Intent intent = new Intent(this,TermsActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
// Show the default page on a clean install, and the what's new page on an upgrade.
startActivity(intent);
}
}
private void updateDisplay() {
StringBuilder sb = new StringBuilder();
if (day < 10) {
sb.append("0");
}
sb.append(day).append("/");
if (month < 10) {
sb.append("0");
}
sb.append(month + 1).append("/")
.append(year);
dateOfBirth.setText(sb);
}
// the callback received when the user "sets" the date in the dialog
private DatePickerDialog.OnDateSetListener dateSetListener =
new DatePickerDialog.OnDateSetListener() {
public void onDateSet(DatePicker view, int theYear,
int monthOfYear, int dayOfMonth) {
year = theYear;
month = monthOfYear;
day = dayOfMonth;
updateDisplay();
}
};
@Override
protected Dialog onCreateDialog(int id) {
switch (id) {
case DATE_DIALOG_ID:
return new DatePickerDialog(this,
dateSetListener,
year, month, day);
}
return null;
}
@Override
protected void onDestroy()
{
super.onDestroy();
unregisterReceiver(logoutReceiver);
}
private boolean isConnected(){
boolean connected = false;
ConnectivityManager cm = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
if (cm.getActiveNetworkInfo() != null && cm.getActiveNetworkInfo().isConnectedOrConnecting()) {
connected = true;
}
return connected;
}
}