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}