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 EditText usernameText = (EditText) view
47 .findViewById(R.id.account_username);
48 final EditText serverText = (EditText) view
49 .findViewById(R.id.account_server);
50 final TextView usernameDesc = (TextView) view
51 .findViewById(R.id.textView2);
52 final TextView confirmPwDesc = (TextView) view.findViewById(R.id.account_confirm_password_desc);
53 CheckBox showAdvanced = (CheckBox) view
54 .findViewById(R.id.account_show_advanced);
55 final RelativeLayout advancedOptions = (RelativeLayout) view
56 .findViewById(R.id.advanced_options);
57 showAdvanced.setOnCheckedChangeListener(new OnCheckedChangeListener() {
58
59 @Override
60 public void onCheckedChanged(CompoundButton buttonView,
61 boolean isChecked) {
62 if (isChecked) {
63 advancedOptions.setVisibility(View.VISIBLE);
64 usernameDesc.setText("Username");
65 usernameText.setVisibility(View.VISIBLE);
66 jidText.setVisibility(View.GONE);
67 } else {
68 advancedOptions.setVisibility(View.GONE);
69 usernameDesc.setText("Jabber ID");
70 usernameText.setVisibility(View.GONE);
71 jidText.setVisibility(View.VISIBLE);
72 }
73 }
74 });
75
76 final EditText password = (EditText) view
77 .findViewById(R.id.account_password);
78 final EditText passwordConfirm = (EditText) view
79 .findViewById(R.id.account_password_confirm2);
80 final CheckBox registerAccount = (CheckBox) view
81 .findViewById(R.id.edit_account_register_new);
82
83 final String okButtonDesc;
84
85 if (account != null) {
86 builder.setTitle("Edit account");
87 registerAccount.setVisibility(View.GONE);
88 jidText.setText(account.getJid());
89 password.setText(account.getPassword());
90 usernameText.setText(account.getUsername());
91 serverText.setText(account.getServer());
92 okButtonDesc = "Edit";
93 } else {
94 builder.setTitle("Add account");
95 okButtonDesc = "Add";
96 }
97
98 registerAccount
99 .setOnCheckedChangeListener(new OnCheckedChangeListener() {
100
101 @Override
102 public void onCheckedChanged(CompoundButton buttonView,
103 boolean isChecked) {
104 AlertDialog d = (AlertDialog) getDialog();
105 Button positiveButton = (Button) d.getButton(Dialog.BUTTON_POSITIVE);
106 if (isChecked) {
107 positiveButton.setText("Register");
108 passwordConfirm.setVisibility(View.VISIBLE);
109 confirmPwDesc.setVisibility(View.VISIBLE);
110 } else {
111 passwordConfirm.setVisibility(View.GONE);
112 positiveButton.setText("Add");
113 confirmPwDesc.setVisibility(View.GONE);
114 }
115 }
116 });
117
118 builder.setView(view);
119 builder.setNeutralButton("Cancel", null);
120 builder.setPositiveButton(okButtonDesc, null);
121 return builder.create();
122 }
123
124 @Override
125 public void onStart() {
126 super.onStart();
127 final AlertDialog d = (AlertDialog) getDialog();
128 Button positiveButton = (Button) d.getButton(Dialog.BUTTON_POSITIVE);
129 positiveButton.setOnClickListener(new View.OnClickListener() {
130 @Override
131 public void onClick(View v) {
132 boolean showAdvanced = ((CheckBox) d.findViewById(R.id.account_show_advanced)).isChecked();
133 EditText jidEdit = (EditText) d.findViewById(R.id.account_jid);
134 String jid = jidEdit.getText().toString();
135 EditText usernameEdit = (EditText) d.findViewById(R.id.account_username);
136 String username = usernameEdit.getText().toString();
137 EditText serverEdit = (EditText) d.findViewById(R.id.account_server);
138 String server = serverEdit.getText().toString();
139 EditText passwordEdit = (EditText) d.findViewById(R.id.account_password);
140 String password = passwordEdit.getText().toString();
141 if (!showAdvanced) {
142 if (Validator.isValidJid(jid)) {
143 String[] parts = jid.split("@");
144 username = parts[0];
145 server = parts[1];
146 } else {
147 jidEdit.setError("Invalid Jabber ID");
148 return;
149 }
150 } else {
151 if (username.length()==0) {
152 usernameEdit.setError("username is too short");
153 return;
154 } else if (server.length()==0) {
155 serverEdit.setError("server is too short");
156 return;
157 }
158 }
159 if (account!=null) {
160 account.setPassword(password);
161 account.setUsername(username);
162 account.setServer(server);
163 } else {
164 account = new Account(username, server, password);
165 }
166 if (listener!=null) {
167 listener.onAccountEdited(account);
168 d.dismiss();
169 }
170 }
171 });
172 }
173}