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 TextView confirmPwDesc = (TextView) view
 47				.findViewById(R.id.account_confirm_password_desc);
 48		CheckBox useTLS = (CheckBox) view.findViewById(R.id.account_usetls);
 49
 50		final EditText password = (EditText) view
 51				.findViewById(R.id.account_password);
 52		final EditText passwordConfirm = (EditText) view
 53				.findViewById(R.id.account_password_confirm2);
 54		final CheckBox registerAccount = (CheckBox) view
 55				.findViewById(R.id.edit_account_register_new);
 56
 57		final String okButtonDesc;
 58
 59		if (account != null) {
 60			builder.setTitle("Edit account");
 61			registerAccount.setVisibility(View.GONE);
 62			jidText.setText(account.getJid());
 63			password.setText(account.getPassword());
 64			okButtonDesc = "Edit";
 65			if (account.isOptionSet(Account.OPTION_USETLS)) {
 66				useTLS.setChecked(true);
 67			} else {
 68				useTLS.setChecked(false);
 69			}
 70		} else {
 71			builder.setTitle("Add account");
 72			okButtonDesc = "Add";
 73		}
 74
 75		registerAccount
 76				.setOnCheckedChangeListener(new OnCheckedChangeListener() {
 77
 78					@Override
 79					public void onCheckedChanged(CompoundButton buttonView,
 80							boolean isChecked) {
 81						AlertDialog d = (AlertDialog) getDialog();
 82						Button positiveButton = (Button) d
 83								.getButton(Dialog.BUTTON_POSITIVE);
 84						if (isChecked) {
 85							positiveButton.setText("Register");
 86							passwordConfirm.setVisibility(View.VISIBLE);
 87							confirmPwDesc.setVisibility(View.VISIBLE);
 88						} else {
 89							passwordConfirm.setVisibility(View.GONE);
 90							positiveButton.setText("Add");
 91							confirmPwDesc.setVisibility(View.GONE);
 92						}
 93					}
 94				});
 95
 96		builder.setView(view);
 97		builder.setNeutralButton("Cancel", null);
 98		builder.setPositiveButton(okButtonDesc, null);
 99		return builder.create();
100	}
101
102	@Override
103	public void onStart() {
104		super.onStart();
105		final AlertDialog d = (AlertDialog) getDialog();
106		Button positiveButton = (Button) d.getButton(Dialog.BUTTON_POSITIVE);
107		positiveButton.setOnClickListener(new View.OnClickListener() {
108			@Override
109			public void onClick(View v) {
110				EditText jidEdit = (EditText) d.findViewById(R.id.account_jid);
111				String jid = jidEdit.getText().toString();
112				EditText passwordEdit = (EditText) d
113						.findViewById(R.id.account_password);
114				String password = passwordEdit.getText().toString();
115				CheckBox useTLS = (CheckBox) d.findViewById(R.id.account_usetls);
116				String username;
117				String server;
118				if (Validator.isValidJid(jid)) {
119					String[] parts = jid.split("@");
120					username = parts[0];
121					server = parts[1];
122				} else {
123					jidEdit.setError("Invalid Jabber ID");
124					return;
125				}
126				if (account != null) {
127					account.setPassword(password);
128					account.setUsername(username);
129					account.setServer(server);
130				} else {
131					account = new Account(username, server, password);
132				}
133				account.setOption(Account.OPTION_USETLS, useTLS.isChecked());
134				if (listener != null) {
135					listener.onAccountEdited(account);
136					d.dismiss();
137				}
138			}
139		});
140	}
141}