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}