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}