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.util.Log;
 11import android.view.LayoutInflater;
 12import android.view.View;
 13import android.widget.Button;
 14import android.widget.CheckBox;
 15import android.widget.CompoundButton;
 16import android.widget.CompoundButton.OnCheckedChangeListener;
 17import android.widget.EditText;
 18import android.widget.TextView;
 19
 20public class EditAccount extends DialogFragment {
 21
 22	protected Account account;
 23
 24	public void setAccount(Account account) {
 25		this.account = account;
 26	}
 27
 28	public interface EditAccountListener {
 29		public void onAccountEdited(Account account);
 30	}
 31
 32	protected EditAccountListener listener = null;
 33
 34	public void setEditAccountListener(EditAccountListener listener) {
 35		this.listener = listener;
 36	}
 37
 38	@Override
 39	public Dialog onCreateDialog(Bundle savedInstanceState) {
 40		AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
 41		LayoutInflater inflater = getActivity().getLayoutInflater();
 42		View view = inflater.inflate(R.layout.edit_account_dialog, null);
 43		final EditText jidText = (EditText) view.findViewById(R.id.account_jid);
 44		final TextView confirmPwDesc = (TextView) view
 45				.findViewById(R.id.account_confirm_password_desc);
 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		if (account != null) {
 55			jidText.setText(account.getJid());
 56			password.setText(account.getPassword());
 57			if (account.isOptionSet(Account.OPTION_REGISTER)) {
 58				registerAccount.setChecked(true);
 59				passwordConfirm.setVisibility(View.VISIBLE);
 60				passwordConfirm.setText(account.getPassword());
 61			} else {
 62				registerAccount.setVisibility(View.GONE);
 63			}
 64		}
 65		builder.setTitle(R.string.account_settings);
 66		
 67
 68		registerAccount
 69				.setOnCheckedChangeListener(new OnCheckedChangeListener() {
 70
 71					@Override
 72					public void onCheckedChanged(CompoundButton buttonView,
 73							boolean isChecked) {
 74						if (isChecked) {
 75							passwordConfirm.setVisibility(View.VISIBLE);
 76							confirmPwDesc.setVisibility(View.VISIBLE);
 77						} else {
 78							passwordConfirm.setVisibility(View.GONE);
 79							confirmPwDesc.setVisibility(View.GONE);
 80						}
 81					}
 82				});
 83
 84		builder.setView(view);
 85		builder.setNeutralButton(getString(R.string.cancel), null);
 86		builder.setPositiveButton(getString(R.string.save), null);
 87		return builder.create();
 88	}
 89
 90	@Override
 91	public void onStart() {
 92		super.onStart();
 93		final AlertDialog d = (AlertDialog) getDialog();
 94		Button positiveButton = (Button) d.getButton(Dialog.BUTTON_POSITIVE);
 95		positiveButton.setOnClickListener(new View.OnClickListener() {
 96			@Override
 97			public void onClick(View v) {
 98				EditText jidEdit = (EditText) d.findViewById(R.id.account_jid);
 99				String jid = jidEdit.getText().toString();
100				EditText passwordEdit = (EditText) d
101						.findViewById(R.id.account_password);
102				EditText passwordConfirmEdit = (EditText) d.findViewById(R.id.account_password_confirm2);
103				String password = passwordEdit.getText().toString();
104				String passwordConfirm = passwordConfirmEdit.getText().toString();
105				CheckBox register = (CheckBox) d.findViewById(R.id.edit_account_register_new);
106				String username;
107				String server;
108				if (Validator.isValidJid(jid)) {
109					String[] parts = jid.split("@");
110					username = parts[0];
111					server = parts[1];
112				} else {
113					jidEdit.setError(getString(R.string.invalid_jid));
114					return;
115				}
116				if (register.isChecked()) {
117					if (!passwordConfirm.equals(password)) {
118						passwordConfirmEdit.setError(getString(R.string.passwords_do_not_match));
119						return;
120					}
121				}
122				if (account != null) {
123					account.setPassword(password);
124					account.setUsername(username);
125					account.setServer(server);
126				} else {
127					account = new Account(username, server, password);
128					account.setOption(Account.OPTION_USETLS, true);
129					account.setOption(Account.OPTION_USECOMPRESSION, true);
130				}
131				account.setOption(Account.OPTION_REGISTER, register.isChecked());
132				if (listener != null) {
133					listener.onAccountEdited(account);
134					d.dismiss();
135				}
136			}
137		});
138	}
139}