1package de.gultsch.chat.ui;
2
3import de.gultsch.chat.R;
4import de.gultsch.chat.entities.Account;
5import de.gultsch.chat.utils.Validator;
6import android.app.AlertDialog;
7import android.app.Dialog;
8import android.app.DialogFragment;
9import android.content.DialogInterface;
10import android.content.DialogInterface.OnClickListener;
11import android.os.Bundle;
12import android.view.LayoutInflater;
13import android.view.View;
14import android.widget.Button;
15import android.widget.CheckBox;
16import android.widget.CompoundButton;
17import android.widget.CompoundButton.OnCheckedChangeListener;
18import android.widget.EditText;
19import android.widget.RelativeLayout;
20import android.widget.TextView;
21
22public class EditAccount extends DialogFragment {
23
24 protected Account account;
25
26 public void setAccount(Account account) {
27 this.account = account;
28 }
29
30 public interface EditAccountListener {
31 public void onAccountEdited(Account account);
32 }
33
34 protected EditAccountListener listener = null;
35
36 public void setEditAccountListener(EditAccountListener listener) {
37 this.listener = listener;
38 }
39
40 @Override
41 public Dialog onCreateDialog(Bundle savedInstanceState) {
42 AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
43 LayoutInflater inflater = getActivity().getLayoutInflater();
44 View view = inflater.inflate(R.layout.edit_account_dialog, null);
45 final EditText jidText = (EditText) view.findViewById(R.id.account_jid);
46 final TextView confirmPwDesc = (TextView) view
47 .findViewById(R.id.account_confirm_password_desc);
48 CheckBox useTLS = (CheckBox) view.findViewById(R.id.account_usetls);
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 builder.setTitle("Edit account");
61 registerAccount.setVisibility(View.GONE);
62 jidText.setText(account.getJid());
63 password.setText(account.getPassword());
64 okButtonDesc = "Edit";
65 if (account.isOptionSet(Account.OPTION_USETLS)) {
66 useTLS.setChecked(true);
67 } else {
68 useTLS.setChecked(false);
69 }
70 } else {
71 builder.setTitle("Add account");
72 okButtonDesc = "Add";
73 }
74
75 registerAccount
76 .setOnCheckedChangeListener(new OnCheckedChangeListener() {
77
78 @Override
79 public void onCheckedChanged(CompoundButton buttonView,
80 boolean isChecked) {
81 AlertDialog d = (AlertDialog) getDialog();
82 Button positiveButton = (Button) d
83 .getButton(Dialog.BUTTON_POSITIVE);
84 if (isChecked) {
85 positiveButton.setText("Register");
86 passwordConfirm.setVisibility(View.VISIBLE);
87 confirmPwDesc.setVisibility(View.VISIBLE);
88 } else {
89 passwordConfirm.setVisibility(View.GONE);
90 positiveButton.setText("Add");
91 confirmPwDesc.setVisibility(View.GONE);
92 }
93 }
94 });
95
96 builder.setView(view);
97 builder.setNeutralButton("Cancel", null);
98 builder.setPositiveButton(okButtonDesc, null);
99 return builder.create();
100 }
101
102 @Override
103 public void onStart() {
104 super.onStart();
105 final AlertDialog d = (AlertDialog) getDialog();
106 Button positiveButton = (Button) d.getButton(Dialog.BUTTON_POSITIVE);
107 positiveButton.setOnClickListener(new View.OnClickListener() {
108 @Override
109 public void onClick(View v) {
110 EditText jidEdit = (EditText) d.findViewById(R.id.account_jid);
111 String jid = jidEdit.getText().toString();
112 EditText passwordEdit = (EditText) d
113 .findViewById(R.id.account_password);
114 String password = passwordEdit.getText().toString();
115 CheckBox useTLS = (CheckBox) d.findViewById(R.id.account_usetls);
116 String username;
117 String server;
118 if (Validator.isValidJid(jid)) {
119 String[] parts = jid.split("@");
120 username = parts[0];
121 server = parts[1];
122 } else {
123 jidEdit.setError("Invalid Jabber ID");
124 return;
125 }
126 if (account != null) {
127 account.setPassword(password);
128 account.setUsername(username);
129 account.setServer(server);
130 } else {
131 account = new Account(username, server, password);
132 }
133 account.setOption(Account.OPTION_USETLS, useTLS.isChecked());
134 if (listener != null) {
135 listener.onAccountEdited(account);
136 d.dismiss();
137 }
138 }
139 });
140 }
141}