package com.kedzie.vbox.server; import android.content.Intent; import android.os.Bundle; import android.text.Editable; import android.text.TextWatcher; import android.widget.CheckBox; import android.widget.Switch; import android.widget.TextView; import com.actionbarsherlock.app.SherlockActivity; import com.actionbarsherlock.view.ActionMode; import com.actionbarsherlock.view.Menu; import com.actionbarsherlock.view.MenuItem; import com.kedzie.vbox.R; import com.kedzie.vbox.app.Utils; import com.kedzie.vbox.machine.settings.ErrorSupport; public class EditServerActivity extends SherlockActivity { public static final String INTENT_SERVER = "server"; protected Server mServer; private ServerSQlite mDb; private TextView nameText; private TextView hostText; private Switch sslSwitch; private CheckBox sslBox; private TextView portText; private TextView userText; private TextView passText; private ErrorSupport _errorSupport; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.server); mDb = new ServerSQlite(this); mServer = (Server)(savedInstanceState==null ? getIntent().getParcelableExtra(INTENT_SERVER) : savedInstanceState.getParcelable(INTENT_SERVER)); nameText = (TextView)findViewById(R.id.server_name); hostText = (TextView)findViewById(R.id.server_host); if(Utils.isIceCreamSandwhich()) sslSwitch = (Switch)findViewById(R.id.server_ssl); else sslBox = (CheckBox)findViewById(R.id.server_ssl); portText = (TextView)findViewById(R.id.server_port); userText = (TextView)findViewById(R.id.server_username); passText = (TextView)findViewById(R.id.server_password); nameText.setText(mServer.getName()); hostText.setText(mServer.getHost()); if(Utils.isIceCreamSandwhich()) sslSwitch.setChecked(mServer.isSSL()); else sslBox.setChecked(mServer.isSSL()); portText.setText(""+mServer.getPort()); hostText.addTextChangedListener(new TextWatcher() { @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) {} @Override public void afterTextChanged(Editable s) {} @Override public void onTextChanged(CharSequence s, int start, int before, int count) { if(com.google.common.net.InetAddresses.isInetAddress(s.toString())) { _errorSupport.showError("host", ""); } else { _errorSupport.showError("host", "Invalid host name or IP Address"); } } }); portText.addTextChangedListener(new TextWatcher() { @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) {} @Override public void afterTextChanged(Editable s) {} @Override public void onTextChanged(CharSequence s, int start, int before, int count) { try { Integer.parseInt(s.toString()); _errorSupport.showError("port", ""); } catch(NumberFormatException e) { _errorSupport.showError("port", "Port # must be positive numeric value"); } } }); userText.setText(mServer.getUsername()); passText.setText(mServer.getPassword()); _errorSupport = new ErrorSupport(); _errorSupport.setTextView((TextView)findViewById(R.id.errors)); startActionMode(new ActionMode.Callback() { @Override public boolean onCreateActionMode(ActionMode mode, Menu menu) { mode.setTitle(R.string.edit_server_actionmode_title); mode.getMenuInflater().inflate(R.menu.server_actions, menu); return true; } @Override public boolean onPrepareActionMode(ActionMode mode, Menu menu) { return false; } @Override public boolean onActionItemClicked(ActionMode mode, MenuItem item) { switch(item.getItemId()) { case R.id.server_list_option_menu_save: if(!_errorSupport.hasErrors()) { populateServer(); if(mServer.getId().equals(-1L)) mDb.insert(mServer); else mDb.update(mServer); finish(); } else { Utils.toastLong(EditServerActivity.this, "Fix errors first"); } return true; case R.id.server_list_option_menu_delete: mDb.delete(mServer.getId()); finish(); return true; default: return true; } } @Override public void onDestroyActionMode(ActionMode mode) { setResult(RESULT_CANCELED, new Intent()); finish(); } }); } private void populateServer() { mServer.setName( nameText.getText().toString() ); mServer.setHost( hostText.getText().toString() ); mServer.setSSL(Utils.isIceCreamSandwhich() ? sslSwitch.isChecked() : sslBox.isChecked()); try { mServer.setPort( Integer.parseInt( portText.getText().toString().trim()) ); } catch(NumberFormatException e) {} mServer.setUsername( userText.getText().toString() ); mServer.setPassword( passText.getText().toString() ); } @Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); populateServer(); outState.putParcelable(INTENT_SERVER, mServer); } @Override protected void onDestroy() { super.onDestroy(); mDb.close(); } @Override public void finish() { super.finish(); Utils.overrideBackTransition(this); } }