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 public void onAccountDelete(Account account);
34 }
35
36 protected EditAccountListener listener = null;
37
38 public void setEditAccountListener(EditAccountListener listener) {
39 this.listener = listener;
40 }
41
42 @Override
43 public Dialog onCreateDialog(Bundle savedInstanceState) {
44 AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
45 LayoutInflater inflater = getActivity().getLayoutInflater();
46 View view = inflater.inflate(R.layout.edit_account_dialog, null);
47 final EditText jidText = (EditText) view.findViewById(R.id.account_jid);
48 final EditText usernameText = (EditText) view
49 .findViewById(R.id.account_username);
50 final EditText serverText = (EditText) view
51 .findViewById(R.id.account_server);
52 final TextView usernameDesc = (TextView) view
53 .findViewById(R.id.textView2);
54 final TextView confirmPwDesc = (TextView) view.findViewById(R.id.account_confirm_password_desc);
55 CheckBox showAdvanced = (CheckBox) view
56 .findViewById(R.id.account_show_advanced);
57 final RelativeLayout advancedOptions = (RelativeLayout) view
58 .findViewById(R.id.advanced_options);
59 showAdvanced.setOnCheckedChangeListener(new OnCheckedChangeListener() {
60
61 @Override
62 public void onCheckedChanged(CompoundButton buttonView,
63 boolean isChecked) {
64 if (isChecked) {
65 advancedOptions.setVisibility(View.VISIBLE);
66 usernameDesc.setText("Username");
67 usernameText.setVisibility(View.VISIBLE);
68 jidText.setVisibility(View.GONE);
69 } else {
70 advancedOptions.setVisibility(View.GONE);
71 usernameDesc.setText("Jabber ID");
72 usernameText.setVisibility(View.GONE);
73 jidText.setVisibility(View.VISIBLE);
74 }
75 }
76 });
77
78 final EditText password = (EditText) view
79 .findViewById(R.id.account_password);
80 final EditText passwordConfirm = (EditText) view
81 .findViewById(R.id.account_password_confirm2);
82 final CheckBox registerAccount = (CheckBox) view
83 .findViewById(R.id.edit_account_register_new);
84
85 final String okButtonDesc;
86
87 if (account != null) {
88 builder.setTitle("Edit account");
89 registerAccount.setVisibility(View.GONE);
90 jidText.setText(account.getJid());
91 password.setText(account.getPassword());
92 usernameText.setText(account.getUsername());
93 serverText.setText(account.getServer());
94 okButtonDesc = "Edit";
95 builder.setNegativeButton("Delete Account", new OnClickListener() {
96
97 @Override
98 public void onClick(DialogInterface dialog, int which) {
99 AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
100 builder.setTitle("Are you sure?");
101 builder.setIconAttribute(android.R.attr.alertDialogIcon);
102 builder.setMessage("If you delete your account your entire conversation history will be lost");
103 builder.setPositiveButton("Delete", new OnClickListener() {
104
105 @Override
106 public void onClick(DialogInterface dialog, int which) {
107 if (listener!=null) {
108 listener.onAccountDelete(account);
109 }
110 }
111 });
112 builder.setNegativeButton("Cancel",null);
113 builder.create().show();
114 }
115 });
116 } else {
117 builder.setTitle("Add account");
118 okButtonDesc = "Add";
119 }
120
121 registerAccount
122 .setOnCheckedChangeListener(new OnCheckedChangeListener() {
123
124 @Override
125 public void onCheckedChanged(CompoundButton buttonView,
126 boolean isChecked) {
127 AlertDialog d = (AlertDialog) getDialog();
128 Button positiveButton = (Button) d.getButton(Dialog.BUTTON_POSITIVE);
129 if (isChecked) {
130 positiveButton.setText("Register");
131 passwordConfirm.setVisibility(View.VISIBLE);
132 confirmPwDesc.setVisibility(View.VISIBLE);
133 } else {
134 passwordConfirm.setVisibility(View.GONE);
135 positiveButton.setText("Add");
136 confirmPwDesc.setVisibility(View.GONE);
137 }
138 }
139 });
140
141 builder.setView(view);
142 builder.setNeutralButton("Cancel", null);
143 builder.setPositiveButton(okButtonDesc, null);
144 return builder.create();
145 }
146
147 @Override
148 public void onStart() {
149 super.onStart();
150 final AlertDialog d = (AlertDialog) getDialog();
151 Button positiveButton = (Button) d.getButton(Dialog.BUTTON_POSITIVE);
152 positiveButton.setOnClickListener(new View.OnClickListener() {
153 @Override
154 public void onClick(View v) {
155 boolean showAdvanced = ((CheckBox) d.findViewById(R.id.account_show_advanced)).isChecked();
156 EditText jidEdit = (EditText) d.findViewById(R.id.account_jid);
157 String jid = jidEdit.getText().toString();
158 EditText usernameEdit = (EditText) d.findViewById(R.id.account_username);
159 String username = usernameEdit.getText().toString();
160 EditText serverEdit = (EditText) d.findViewById(R.id.account_server);
161 String server = serverEdit.getText().toString();
162 EditText passwordEdit = (EditText) d.findViewById(R.id.account_password);
163 String password = passwordEdit.getText().toString();
164 if (!showAdvanced) {
165 if (Validator.isValidJid(jid)) {
166 String[] parts = jid.split("@");
167 username = parts[0];
168 server = parts[1];
169 } else {
170 jidEdit.setError("Invalid Jabber ID");
171 return;
172 }
173 } else {
174 if (username.length()==0) {
175 usernameEdit.setError("username is too short");
176 return;
177 } else if (server.length()==0) {
178 serverEdit.setError("server is too short");
179 return;
180 }
181 }
182 if (account!=null) {
183 account.setPassword(password);
184 account.setUsername(username);
185 account.setServer(server);
186 } else {
187 account = new Account(username, server, password);
188 }
189 if (listener!=null) {
190 listener.onAccountEdited(account);
191 d.dismiss();
192 }
193 }
194 });
195 }
196}