package uk.ac.cam.echo.activities; import uk.ac.cam.echo.R; import uk.ac.cam.echo.Toaster; import uk.ac.cam.echo.client.ClientApi; import uk.ac.cam.echo.data.User; import uk.ac.cam.echo.services.EchoService; import android.app.Activity; import android.app.AlertDialog; import android.content.ComponentName; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.content.ServiceConnection; import android.graphics.Typeface; import android.os.AsyncTask; import android.os.Bundle; import android.os.IBinder; import android.view.KeyEvent; import android.view.Menu; import android.view.View; import android.view.inputmethod.EditorInfo; import android.widget.Button; import android.widget.EditText; import android.widget.ProgressBar; import android.widget.TextView; import android.widget.TextView.OnEditorActionListener; import java.lang.reflect.UndeclaredThrowableException; public class RegisterActivity extends Activity implements OnEditorActionListener { private EchoService echoService; private ServiceConnection connection = new ServiceConnection() { public void onServiceConnected(ComponentName className, IBinder service) { echoService = ((EchoService.LocalBinder)service).getService(); api = echoService.getApi(); } public void onServiceDisconnected(ComponentName className) { echoService = null; } }; ClientApi api; EditText username; EditText password; EditText passwordVerify; EditText firstName; EditText lastName; TextView loginScreen; Button register; ProgressBar progress; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_registration); username = (EditText)findViewById(R.id.usernameInput); password = (EditText)findViewById(R.id.passwordInput1); passwordVerify = (EditText)findViewById(R.id.passwordInput2); firstName = (EditText)findViewById(R.id.firstName); lastName = (EditText)findViewById(R.id.lastName); register = (Button)findViewById(R.id.buttonRegister); progress = (ProgressBar)findViewById(R.id.progressLogin); loginScreen = (TextView)findViewById(R.id.loginScreen); password.setOnEditorActionListener(this); } @Override protected void onResume() { super.onResume(); Intent service = new Intent(this, EchoService.class); bindService(service, connection, Context.BIND_AUTO_CREATE); } @Override protected void onPause() { super.onPause(); unbindService(connection); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } public void registerUser(View v) { String usernameText = username.getText().toString(); if(usernameText.equals("")) { Toaster.displayLong(this, "username must not be empty"); return; } String passwordText = password.getText().toString(); String passwordVerifyText = passwordVerify.getText().toString(); if(!passwordText.equals(passwordVerifyText)){ Toaster.displayLong(this, "Passwords do not match"); return; } toggleButton(); String firstText = firstName.getText().toString(); String lastText = lastName.getText().toString(); if(firstText.equals("") || lastText.equals("")) { Toaster.displayLong(this, "Please enter your name"); return; } Toaster.displayShort(this, api == null ? "api is null" : "api not null"); Toaster.displayShort(this, echoService == null ? "service is null" : "service not null"); new RegisterUser().execute(usernameText, passwordText, firstText, lastText); } public void loginScreen(View v) { Intent i = new Intent(this, MainActivity.class); i.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY); startActivity(i); } @Override public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { if(actionId == EditorInfo.IME_ACTION_DONE) { register.performClick(); return true; } return false; } private void toggleButton() { if(register.getVisibility() == View.GONE) { register.setVisibility(View.VISIBLE); loginScreen.setVisibility(View.VISIBLE); progress.setVisibility(View.GONE); loginScreen.setVisibility(View.VISIBLE); } else { register.setVisibility(View.GONE); progress.setVisibility(View.VISIBLE); loginScreen.setVisibility(View.GONE); } } private class RegisterUser extends AsyncTask<String, Void, User> { boolean success = true; @Override protected User doInBackground(String... args) { String usernameText = args[0]; String passwordText = args[1]; String firstText = args[2]; String lastText = args[3]; User user = null; try { user = api.newUser(); user.setUsername(usernameText); user.setPassword(passwordText); user.setFirstName(firstText); user.setLastName(lastText); echoService.setUser(user); user.save(); }catch(UndeclaredThrowableException e) { success = false; return user; } Intent i = new Intent(getApplicationContext(), ConversationListActivity.class); startActivity(i); return user; } @Override protected void onPostExecute(User user) { super.onPostExecute(user); if(!success) { AlertDialog alertDialog = new AlertDialog.Builder(RegisterActivity.this).create(); alertDialog.setTitle("Could not connect to Server"); alertDialog.setMessage("Please try again later. The server is experiencing heavy load."); alertDialog.setIcon(android.R.drawable.stat_sys_warning); alertDialog.setButton("Close", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { finish(); } }); alertDialog.show(); } } } }