aboutsummaryrefslogtreecommitdiffstats
path: root/src/eu/siacs/conversations/ui/EditAccountDialog.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/eu/siacs/conversations/ui/EditAccountDialog.java')
-rw-r--r--src/eu/siacs/conversations/ui/EditAccountDialog.java157
1 files changed, 157 insertions, 0 deletions
diff --git a/src/eu/siacs/conversations/ui/EditAccountDialog.java b/src/eu/siacs/conversations/ui/EditAccountDialog.java
new file mode 100644
index 000000000..7c135fc16
--- /dev/null
+++ b/src/eu/siacs/conversations/ui/EditAccountDialog.java
@@ -0,0 +1,157 @@
+package eu.siacs.conversations.ui;
+
+import java.util.List;
+
+import eu.siacs.conversations.R;
+import eu.siacs.conversations.entities.Account;
+import eu.siacs.conversations.ui.adapter.KnownHostsAdapter;
+import eu.siacs.conversations.utils.Validator;
+import android.app.AlertDialog;
+import android.app.Dialog;
+import android.app.DialogFragment;
+import android.content.Context;
+import android.os.Bundle;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.widget.AutoCompleteTextView;
+import android.widget.Button;
+import android.widget.CheckBox;
+import android.widget.CompoundButton;
+import android.widget.CompoundButton.OnCheckedChangeListener;
+import android.widget.EditText;
+import android.widget.TextView;
+
+public class EditAccountDialog extends DialogFragment {
+
+ protected Account account;
+
+ protected AutoCompleteTextView mAccountJid;
+
+ public void setAccount(Account account) {
+ this.account = account;
+ }
+
+ public interface EditAccountListener {
+ public void onAccountEdited(Account account);
+ }
+
+ protected EditAccountListener listener = null;
+
+ private KnownHostsAdapter mKnownHostsAdapter;
+
+ public void setEditAccountListener(EditAccountListener listener) {
+ this.listener = listener;
+ }
+
+ public void setKnownHosts(List<String> hosts, Context context) {
+ this.mKnownHostsAdapter = new KnownHostsAdapter(context, android.R.layout.simple_list_item_1, hosts);
+ if (this.mAccountJid != null) {
+ this.mAccountJid.setAdapter(this.mKnownHostsAdapter);
+ }
+ }
+
+ @Override
+ public Dialog onCreateDialog(Bundle savedInstanceState) {
+ AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
+ LayoutInflater inflater = getActivity().getLayoutInflater();
+ View view = inflater.inflate(R.layout.edit_account_dialog, null);
+ mAccountJid = (AutoCompleteTextView) view.findViewById(R.id.account_jid);
+ if (this.mKnownHostsAdapter!=null) {
+ mAccountJid.setAdapter(this.mKnownHostsAdapter);
+ }
+ final TextView confirmPwDesc = (TextView) view
+ .findViewById(R.id.account_confirm_password_desc);
+
+ final EditText password = (EditText) view
+ .findViewById(R.id.account_password);
+ final EditText passwordConfirm = (EditText) view
+ .findViewById(R.id.account_password_confirm2);
+ final CheckBox registerAccount = (CheckBox) view
+ .findViewById(R.id.edit_account_register_new);
+
+ if (account != null) {
+ mAccountJid.setText(account.getJid());
+ password.setText(account.getPassword());
+ if (account.isOptionSet(Account.OPTION_REGISTER)) {
+ registerAccount.setChecked(true);
+ passwordConfirm.setVisibility(View.VISIBLE);
+ passwordConfirm.setText(account.getPassword());
+ } else {
+ registerAccount.setVisibility(View.GONE);
+ }
+ }
+ builder.setTitle(R.string.account_settings);
+
+
+ registerAccount
+ .setOnCheckedChangeListener(new OnCheckedChangeListener() {
+
+ @Override
+ public void onCheckedChanged(CompoundButton buttonView,
+ boolean isChecked) {
+ if (isChecked) {
+ passwordConfirm.setVisibility(View.VISIBLE);
+ confirmPwDesc.setVisibility(View.VISIBLE);
+ } else {
+ passwordConfirm.setVisibility(View.GONE);
+ confirmPwDesc.setVisibility(View.GONE);
+ }
+ }
+ });
+
+ builder.setView(view);
+ builder.setNeutralButton(getString(R.string.cancel), null);
+ builder.setPositiveButton(getString(R.string.save), null);
+ return builder.create();
+ }
+
+ @Override
+ public void onStart() {
+ super.onStart();
+ final AlertDialog d = (AlertDialog) getDialog();
+ Button positiveButton = (Button) d.getButton(Dialog.BUTTON_POSITIVE);
+ positiveButton.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ EditText jidEdit = (EditText) d.findViewById(R.id.account_jid);
+ String jid = jidEdit.getText().toString();
+ EditText passwordEdit = (EditText) d
+ .findViewById(R.id.account_password);
+ EditText passwordConfirmEdit = (EditText) d.findViewById(R.id.account_password_confirm2);
+ String password = passwordEdit.getText().toString();
+ String passwordConfirm = passwordConfirmEdit.getText().toString();
+ CheckBox register = (CheckBox) d.findViewById(R.id.edit_account_register_new);
+ String username;
+ String server;
+ if (Validator.isValidJid(jid)) {
+ String[] parts = jid.split("@");
+ username = parts[0];
+ server = parts[1];
+ } else {
+ jidEdit.setError(getString(R.string.invalid_jid));
+ return;
+ }
+ if (register.isChecked()) {
+ if (!passwordConfirm.equals(password)) {
+ passwordConfirmEdit.setError(getString(R.string.passwords_do_not_match));
+ return;
+ }
+ }
+ if (account != null) {
+ account.setPassword(password);
+ account.setUsername(username);
+ account.setServer(server);
+ } else {
+ account = new Account(username, server, password);
+ account.setOption(Account.OPTION_USETLS, true);
+ account.setOption(Account.OPTION_USECOMPRESSION, true);
+ }
+ account.setOption(Account.OPTION_REGISTER, register.isChecked());
+ if (listener != null) {
+ listener.onAccountEdited(account);
+ d.dismiss();
+ }
+ }
+ });
+ }
+}