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