blob: aa8a8398bfb5138b0736d606e627dc289485b9fd [file] [log] [blame]
Alexandre Lision3cefec22013-11-14 17:26:35 -05001package org.sflphone.views;
2
3import java.util.HashMap;
4
5import org.sflphone.R;
6import org.sflphone.account.AccountCredentials;
7import org.sflphone.account.CredentialsManager;
8
9import android.app.AlertDialog;
10import android.app.AlertDialog.Builder;
11import android.content.Context;
12import android.content.DialogInterface;
13import android.content.DialogInterface.OnClickListener;
14import android.os.Bundle;
15import android.preference.DialogPreference;
16import android.util.AttributeSet;
17import android.view.Gravity;
18import android.view.KeyEvent;
19import android.view.LayoutInflater;
20import android.view.View;
21import android.widget.EditText;
22import android.widget.TextView;
23import android.widget.TextView.OnEditorActionListener;
24import android.widget.Toast;
25
26public class CredentialsPreference extends DialogPreference {
27
28 EditText mUsernameField, mPasswordField, mRealmField;
29
30 public CredentialsPreference(Context context, AttributeSet attrs) {
31 super(context, attrs);
32
33 }
34
35 @Override
36 protected View onCreateDialogView() {
37
38 LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
39 View view = inflater.inflate(R.layout.credentials_pref, null);
40
41 mUsernameField = (EditText) view.findViewById(R.id.credentials_username);
42 mPasswordField = (EditText) view.findViewById(R.id.credentials_password);
43 mRealmField = (EditText) view.findViewById(R.id.credentials_realm);
44
45 if (getExtras().getSerializable(CredentialsManager.CURRENT_CRED) != null) {
46 HashMap<String, String> details = (HashMap<String, String>) getExtras().getSerializable(CredentialsManager.CURRENT_CRED);
47 mUsernameField.setText(details.get(AccountCredentials.CONFIG_ACCOUNT_USERNAME));
48 mPasswordField.setText(details.get(AccountCredentials.CONFIG_ACCOUNT_PASSWORD));
49 mRealmField.setText(details.get(AccountCredentials.CONFIG_ACCOUNT_REALM));
50 }
51
52 mRealmField.setOnEditorActionListener(new OnEditorActionListener() {
53
54 @Override
55 public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
56 String to = mRealmField.getText().toString();
57 if (to.contentEquals("")) {
58 mRealmField.setError(getContext().getString(R.string.dial_error_no_number_dialed));
59 }
60 return true;
61 }
62 });
63
64 return view;
65 }
66
67 private boolean isValid() {
68 return mUsernameField.getText().length() > 0 && mPasswordField.getText().length() > 0 && mRealmField.getText().length() > 0;
69 }
70
71 @Override
72 protected void showDialog(Bundle state) {
73 super.showDialog(state);
74
75 final AlertDialog d = (AlertDialog) getDialog();
76
77 // Prevent dismissing the dialog if they are any empty field
78 d.getButton(AlertDialog.BUTTON_POSITIVE).setOnClickListener(new View.OnClickListener() {
79 @Override
80 public void onClick(View v) {
81
82 if (isValid()) {
83 d.dismiss();
84 onDialogClosed(true);
85 } else {
86 Toast t = Toast.makeText(getContext(), "All fields are mandatory!", Toast.LENGTH_LONG);
87 t.setGravity(Gravity.CENTER, 0, 0);
88 t.show();
89 }
90 }
91 });
92
93 d.setButton(DialogInterface.BUTTON_NEUTRAL, "Delete", new OnClickListener() {
94
95 @Override
96 public void onClick(DialogInterface dialog, int which) {
97 Bundle toReturn = getExtras();
98 getOnPreferenceChangeListener().onPreferenceChange(CredentialsPreference.this, toReturn);
99 }
100 });
101
102 }
103
104 @Override
105 public void onPrepareDialogBuilder(Builder builder) {
106
107 if (getExtras().getSerializable(CredentialsManager.CURRENT_CRED) != null) {
108 // If the user is editing an entry, he can delete it, otherwise don't show this button
109 builder.setNeutralButton("Delete", new OnClickListener() {
110
111 @Override
112 public void onClick(DialogInterface dialog, int which) {
113 Bundle toReturn = getExtras();
114 getOnPreferenceChangeListener().onPreferenceChange(CredentialsPreference.this, toReturn);
115 }
116 });
117 }
118 super.onPrepareDialogBuilder(builder);
119 }
120
121 @Override
122 protected void onDialogClosed(boolean positiveResult) {
123 if (positiveResult) {
124 if (getExtras().getSerializable(CredentialsManager.CURRENT_CRED) != null) {
125 Bundle toReturn = getExtras();
126 HashMap<String, String> fields = new HashMap<String, String>();
127 fields.put(AccountCredentials.CONFIG_ACCOUNT_USERNAME, mUsernameField.getText().toString());
128 fields.put(AccountCredentials.CONFIG_ACCOUNT_PASSWORD, mPasswordField.getText().toString());
129 fields.put(AccountCredentials.CONFIG_ACCOUNT_REALM, mRealmField.getText().toString());
130 toReturn.putSerializable(CredentialsManager.NEW_CRED, fields);
131 getOnPreferenceChangeListener().onPreferenceChange(this, toReturn);
132 } else {
133 HashMap<String, String> fields = new HashMap<String, String>();
134 fields.put(AccountCredentials.CONFIG_ACCOUNT_USERNAME, mUsernameField.getText().toString());
135 fields.put(AccountCredentials.CONFIG_ACCOUNT_PASSWORD, mPasswordField.getText().toString());
136 fields.put(AccountCredentials.CONFIG_ACCOUNT_REALM, mRealmField.getText().toString());
137 getOnPreferenceChangeListener().onPreferenceChange(this, new AccountCredentials(fields));
138 }
139
140 }
141 }
142
143}