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}