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		public void onAccountDelete(Account account);
 34	}
 35
 36	protected EditAccountListener listener = null;
 37
 38	public void setEditAccountListener(EditAccountListener listener) {
 39		this.listener = listener;
 40	}
 41
 42	@Override
 43	public Dialog onCreateDialog(Bundle savedInstanceState) {
 44		AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
 45		LayoutInflater inflater = getActivity().getLayoutInflater();
 46		View view = inflater.inflate(R.layout.edit_account_dialog, null);
 47		final EditText jidText = (EditText) view.findViewById(R.id.account_jid);
 48		final EditText usernameText = (EditText) view
 49				.findViewById(R.id.account_username);
 50		final EditText serverText = (EditText) view
 51				.findViewById(R.id.account_server);
 52		final TextView usernameDesc = (TextView) view
 53				.findViewById(R.id.textView2);
 54		final TextView confirmPwDesc = (TextView) view.findViewById(R.id.account_confirm_password_desc);
 55		CheckBox showAdvanced = (CheckBox) view
 56				.findViewById(R.id.account_show_advanced);
 57		final RelativeLayout advancedOptions = (RelativeLayout) view
 58				.findViewById(R.id.advanced_options);
 59		showAdvanced.setOnCheckedChangeListener(new OnCheckedChangeListener() {
 60
 61			@Override
 62			public void onCheckedChanged(CompoundButton buttonView,
 63					boolean isChecked) {
 64				if (isChecked) {
 65					advancedOptions.setVisibility(View.VISIBLE);
 66					usernameDesc.setText("Username");
 67					usernameText.setVisibility(View.VISIBLE);
 68					jidText.setVisibility(View.GONE);
 69				} else {
 70					advancedOptions.setVisibility(View.GONE);
 71					usernameDesc.setText("Jabber ID");
 72					usernameText.setVisibility(View.GONE);
 73					jidText.setVisibility(View.VISIBLE);
 74				}
 75			}
 76		});
 77
 78		final EditText password = (EditText) view
 79				.findViewById(R.id.account_password);
 80		final EditText passwordConfirm = (EditText) view
 81				.findViewById(R.id.account_password_confirm2);
 82		final CheckBox registerAccount = (CheckBox) view
 83				.findViewById(R.id.edit_account_register_new);
 84
 85		final String okButtonDesc;
 86
 87		if (account != null) {
 88			builder.setTitle("Edit account");
 89			registerAccount.setVisibility(View.GONE);
 90			jidText.setText(account.getJid());
 91			password.setText(account.getPassword());
 92			usernameText.setText(account.getUsername());
 93			serverText.setText(account.getServer());
 94			okButtonDesc = "Edit";
 95			builder.setNegativeButton("Delete Account", new OnClickListener() {
 96				
 97				@Override
 98				public void onClick(DialogInterface dialog, int which) {
 99					AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
100					builder.setTitle("Are you sure?");
101					builder.setIconAttribute(android.R.attr.alertDialogIcon);
102					builder.setMessage("If you delete your account your entire conversation history will be lost");
103					builder.setPositiveButton("Delete", new OnClickListener() {
104						
105						@Override
106						public void onClick(DialogInterface dialog, int which) {
107							if (listener!=null) {
108								listener.onAccountDelete(account);
109							}
110						}
111					});
112					builder.setNegativeButton("Cancel",null);
113					builder.create().show();
114				}
115			});
116		} else {
117			builder.setTitle("Add account");
118			okButtonDesc = "Add";
119		}
120
121		registerAccount
122				.setOnCheckedChangeListener(new OnCheckedChangeListener() {
123
124					@Override
125					public void onCheckedChanged(CompoundButton buttonView,
126							boolean isChecked) {
127						AlertDialog d = (AlertDialog) getDialog();
128						Button positiveButton = (Button) d.getButton(Dialog.BUTTON_POSITIVE);
129						if (isChecked) {
130							positiveButton.setText("Register");
131							passwordConfirm.setVisibility(View.VISIBLE);
132							confirmPwDesc.setVisibility(View.VISIBLE);
133						} else {
134							passwordConfirm.setVisibility(View.GONE);
135							positiveButton.setText("Add");
136							confirmPwDesc.setVisibility(View.GONE);
137						}
138					}
139				});
140
141		builder.setView(view);
142		builder.setNeutralButton("Cancel", null);
143		builder.setPositiveButton(okButtonDesc, null);
144		return builder.create();
145	}
146
147	@Override
148	public void onStart() {
149		super.onStart();
150		final AlertDialog d = (AlertDialog) getDialog();
151		Button positiveButton = (Button) d.getButton(Dialog.BUTTON_POSITIVE);
152		positiveButton.setOnClickListener(new View.OnClickListener() {
153			@Override
154			public void onClick(View v) {
155				boolean showAdvanced = ((CheckBox) d.findViewById(R.id.account_show_advanced)).isChecked();
156				EditText jidEdit = (EditText) d.findViewById(R.id.account_jid);
157				String jid = jidEdit.getText().toString();
158				EditText usernameEdit = (EditText) d.findViewById(R.id.account_username);
159				String username = usernameEdit.getText().toString();
160				EditText serverEdit = (EditText) d.findViewById(R.id.account_server);
161				String server = serverEdit.getText().toString();
162				EditText passwordEdit = (EditText) d.findViewById(R.id.account_password);
163				String password = passwordEdit.getText().toString();
164				if (!showAdvanced) {
165					if (Validator.isValidJid(jid)) {
166						String[] parts = jid.split("@");
167						username = parts[0];
168						server = parts[1];
169					} else {
170						jidEdit.setError("Invalid Jabber ID");
171						return;
172					}
173				} else {
174					if (username.length()==0) {
175						usernameEdit.setError("username is too short");
176						return;
177					} else if (server.length()==0) {
178						serverEdit.setError("server is too short");
179						return;
180					}
181				}
182				if (account!=null) {
183					account.setPassword(password);
184					account.setUsername(username);
185					account.setServer(server);
186				} else {
187					account = new Account(username, server, password);
188				}
189				if (listener!=null) {
190					listener.onAccountEdited(account);
191					d.dismiss();
192				}
193			}
194		});
195	}
196}