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