EditAccount.java

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