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