EditAccount.java

  1package de.gultsch.chat.ui;
  2
  3import de.gultsch.chat.R;
  4import de.gultsch.chat.entities.Account;
  5import de.gultsch.chat.utils.Validator;
  6import android.app.AlertDialog;
  7import android.app.Dialog;
  8import android.app.DialogFragment;
  9import android.content.DialogInterface;
 10import android.content.DialogInterface.OnClickListener;
 11import android.os.Bundle;
 12import android.view.LayoutInflater;
 13import android.view.View;
 14import android.widget.Button;
 15import android.widget.CheckBox;
 16import android.widget.CompoundButton;
 17import android.widget.CompoundButton.OnCheckedChangeListener;
 18import android.widget.EditText;
 19import android.widget.RelativeLayout;
 20import android.widget.TextView;
 21
 22public class EditAccount extends DialogFragment {
 23
 24	protected Account account;
 25
 26	public void setAccount(Account account) {
 27		this.account = account;
 28	}
 29
 30	public interface EditAccountListener {
 31		public void onAccountEdited(Account account);
 32	}
 33
 34	protected EditAccountListener listener = null;
 35
 36	public void setEditAccountListener(EditAccountListener listener) {
 37		this.listener = listener;
 38	}
 39
 40	@Override
 41	public Dialog onCreateDialog(Bundle savedInstanceState) {
 42		AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
 43		LayoutInflater inflater = getActivity().getLayoutInflater();
 44		View view = inflater.inflate(R.layout.edit_account_dialog, null);
 45		final EditText jidText = (EditText) view.findViewById(R.id.account_jid);
 46		final EditText usernameText = (EditText) view
 47				.findViewById(R.id.account_username);
 48		final EditText serverText = (EditText) view
 49				.findViewById(R.id.account_server);
 50		final TextView usernameDesc = (TextView) view
 51				.findViewById(R.id.textView2);
 52		final TextView confirmPwDesc = (TextView) view.findViewById(R.id.account_confirm_password_desc);
 53		CheckBox showAdvanced = (CheckBox) view
 54				.findViewById(R.id.account_show_advanced);
 55		final RelativeLayout advancedOptions = (RelativeLayout) view
 56				.findViewById(R.id.advanced_options);
 57		showAdvanced.setOnCheckedChangeListener(new OnCheckedChangeListener() {
 58
 59			@Override
 60			public void onCheckedChanged(CompoundButton buttonView,
 61					boolean isChecked) {
 62				if (isChecked) {
 63					advancedOptions.setVisibility(View.VISIBLE);
 64					usernameDesc.setText("Username");
 65					usernameText.setVisibility(View.VISIBLE);
 66					jidText.setVisibility(View.GONE);
 67				} else {
 68					advancedOptions.setVisibility(View.GONE);
 69					usernameDesc.setText("Jabber ID");
 70					usernameText.setVisibility(View.GONE);
 71					jidText.setVisibility(View.VISIBLE);
 72				}
 73			}
 74		});
 75
 76		final EditText password = (EditText) view
 77				.findViewById(R.id.account_password);
 78		final EditText passwordConfirm = (EditText) view
 79				.findViewById(R.id.account_password_confirm2);
 80		final CheckBox registerAccount = (CheckBox) view
 81				.findViewById(R.id.edit_account_register_new);
 82
 83		final String okButtonDesc;
 84
 85		if (account != null) {
 86			builder.setTitle("Edit account");
 87			registerAccount.setVisibility(View.GONE);
 88			jidText.setText(account.getJid());
 89			password.setText(account.getPassword());
 90			usernameText.setText(account.getUsername());
 91			serverText.setText(account.getServer());
 92			okButtonDesc = "Edit";
 93		} else {
 94			builder.setTitle("Add account");
 95			okButtonDesc = "Add";
 96		}
 97
 98		registerAccount
 99				.setOnCheckedChangeListener(new OnCheckedChangeListener() {
100
101					@Override
102					public void onCheckedChanged(CompoundButton buttonView,
103							boolean isChecked) {
104						AlertDialog d = (AlertDialog) getDialog();
105						Button positiveButton = (Button) d.getButton(Dialog.BUTTON_POSITIVE);
106						if (isChecked) {
107							positiveButton.setText("Register");
108							passwordConfirm.setVisibility(View.VISIBLE);
109							confirmPwDesc.setVisibility(View.VISIBLE);
110						} else {
111							passwordConfirm.setVisibility(View.GONE);
112							positiveButton.setText("Add");
113							confirmPwDesc.setVisibility(View.GONE);
114						}
115					}
116				});
117
118		builder.setView(view);
119		builder.setNeutralButton("Cancel", null);
120		builder.setPositiveButton(okButtonDesc, null);
121		return builder.create();
122	}
123
124	@Override
125	public void onStart() {
126		super.onStart();
127		final AlertDialog d = (AlertDialog) getDialog();
128		Button positiveButton = (Button) d.getButton(Dialog.BUTTON_POSITIVE);
129		positiveButton.setOnClickListener(new View.OnClickListener() {
130			@Override
131			public void onClick(View v) {
132				boolean showAdvanced = ((CheckBox) d.findViewById(R.id.account_show_advanced)).isChecked();
133				EditText jidEdit = (EditText) d.findViewById(R.id.account_jid);
134				String jid = jidEdit.getText().toString();
135				EditText usernameEdit = (EditText) d.findViewById(R.id.account_username);
136				String username = usernameEdit.getText().toString();
137				EditText serverEdit = (EditText) d.findViewById(R.id.account_server);
138				String server = serverEdit.getText().toString();
139				EditText passwordEdit = (EditText) d.findViewById(R.id.account_password);
140				String password = passwordEdit.getText().toString();
141				if (!showAdvanced) {
142					if (Validator.isValidJid(jid)) {
143						String[] parts = jid.split("@");
144						username = parts[0];
145						server = parts[1];
146					} else {
147						jidEdit.setError("Invalid Jabber ID");
148						return;
149					}
150				} else {
151					if (username.length()==0) {
152						usernameEdit.setError("username is too short");
153						return;
154					} else if (server.length()==0) {
155						serverEdit.setError("server is too short");
156						return;
157					}
158				}
159				if (account!=null) {
160					account.setPassword(password);
161					account.setUsername(username);
162					account.setServer(server);
163				} else {
164					account = new Account(username, server, password);
165				}
166				if (listener!=null) {
167					listener.onAccountEdited(account);
168					d.dismiss();
169				}
170			}
171		});
172	}
173}