EditAccountDialog.java

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