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