blob: b02144f3e18782ad084d7ae8cf5f1dc691f91622 [file] [log] [blame]
Alexandre Lisionafd40e42013-10-15 13:48:37 -04001package org.sflphone.fragments;
2
3import java.net.NetworkInterface;
4import java.net.SocketException;
5import java.util.ArrayList;
6import java.util.Enumeration;
7import java.util.HashMap;
8
9import org.sflphone.R;
10import org.sflphone.account.AccountDetail;
11import org.sflphone.account.AccountDetailAdvanced;
12import org.sflphone.account.AccountDetailBasic;
13import org.sflphone.account.AccountDetailSrtp;
14import org.sflphone.account.AccountDetailTls;
15
16import android.app.Activity;
17import android.os.Bundle;
18import android.preference.CheckBoxPreference;
19import android.preference.EditTextPreference;
20import android.preference.ListPreference;
21import android.preference.Preference;
22import android.preference.Preference.OnPreferenceChangeListener;
23import android.preference.PreferenceFragment;
24import android.util.Log;
25
26public class EditionFragment extends PreferenceFragment {
27
28 private static final String TAG = EditionFragment.class.getSimpleName();
29 private AccountDetailBasic basicDetails = null;
30 private AccountDetailAdvanced advancedDetails = null;
31 private AccountDetailSrtp srtpDetails = null;
32 private AccountDetailTls tlsDetails = null;
33 private boolean isDifferent = false;
34 private ArrayList<String> requiredFields = null;
35
36 private Callbacks mCallbacks = sDummyCallbacks;
37 private static Callbacks sDummyCallbacks = new Callbacks() {
38
39 @Override
40 public HashMap<String, String> getBasicDetails() {
41 // TODO Stub de la méthode généré automatiquement
42 return null;
43 }
44
45 @Override
46 public HashMap<String, String> getAdvancedDetails() {
47 // TODO Stub de la méthode généré automatiquement
48 return null;
49 }
50
51 @Override
52 public HashMap<String, String> getSRTPDetails() {
53 // TODO Stub de la méthode généré automatiquement
54 return null;
55 }
56
57 @Override
58 public HashMap<String, String> getTLSDetails() {
59 // TODO Stub de la méthode généré automatiquement
60 return null;
61 }
62
63
64 };
65
66 public interface Callbacks {
67
68 public HashMap<String, String> getBasicDetails();
69 public HashMap<String, String> getAdvancedDetails();
70 public HashMap<String, String> getSRTPDetails();
71 public HashMap<String, String> getTLSDetails();
72
73 }
74
75 @Override
76 public void onAttach(Activity activity) {
77 super.onAttach(activity);
78 if (!(activity instanceof Callbacks)) {
79 throw new IllegalStateException("Activity must implement fragment's callbacks.");
80 }
81
82 mCallbacks = (Callbacks) activity;
83 }
84
85 @Override
86 public void onDetach() {
87 super.onDetach();
88 mCallbacks = sDummyCallbacks;
89 }
90
91 @Override
92 public void onCreate(Bundle savedInstanceState) {
93 super.onCreate(savedInstanceState);
94
95 // Load the preferences from an XML resource
96 addPreferencesFromResource(R.xml.account_prefs);
97 initEdition();
98 requiredFields = new ArrayList<String>();
99 requiredFields.add(AccountDetailBasic.CONFIG_ACCOUNT_ALIAS);
100 requiredFields.add(AccountDetailBasic.CONFIG_ACCOUNT_HOSTNAME);
101 requiredFields.add(AccountDetailBasic.CONFIG_ACCOUNT_USERNAME);
102 requiredFields.add(AccountDetailBasic.CONFIG_ACCOUNT_PASSWORD);
103
104 }
105
106 private void initEdition() {
107
108 setBasicDetails(new AccountDetailBasic(mCallbacks.getBasicDetails()));
109 setAdvancedDetails(new AccountDetailAdvanced(mCallbacks.getAdvancedDetails()));
110 setSrtpDetails(new AccountDetailSrtp(mCallbacks.getSRTPDetails()));
111 setTlsDetails(new AccountDetailTls(mCallbacks.getTLSDetails()));
112
113 setPreferenceDetails(getBasicDetails());
114 setPreferenceDetails(getAdvancedDetails());
115 setPreferenceDetails(getSrtpDetails());
116 setPreferenceDetails(getTlsDetails());
117
118 addPreferenceListener(getBasicDetails(), changeBasicPreferenceListener);
119 // addPreferenceListener(advancedDetails, changeAdvancedPreferenceListener);
120 // addPreferenceListener(srtpDetails, changeSrtpPreferenceListener);
121 // addPreferenceListener(tlsDetails, changeTlsPreferenceListener);
122 }
123
124 private void setPreferenceDetails(AccountDetail details) {
125 for (AccountDetail.PreferenceEntry p : details.getDetailValues()) {
126 Log.i(TAG, "setPreferenceDetails: pref " + p.mKey + " value " + p.mValue);
127 Preference pref = findPreference(p.mKey);
128 if (pref != null) {
129 if (p.mKey == AccountDetailAdvanced.CONFIG_LOCAL_INTERFACE) {
130 ArrayList<CharSequence> entries = new ArrayList<CharSequence>();
131 try {
132
133 for (Enumeration<NetworkInterface> list = NetworkInterface.getNetworkInterfaces(); list.hasMoreElements();) {
134 NetworkInterface i = list.nextElement();
135 Log.e("network_interfaces", "display name " + i.getDisplayName());
136 if (i.isUp())
137 entries.add(i.getDisplayName());
138 }
139 } catch (SocketException e) {
140 Log.e(TAG, e.toString());
141 }
142 CharSequence[] display = new CharSequence[entries.size()];
143 entries.toArray(display);
144 ((ListPreference) pref).setEntries(display);
145 ((ListPreference) pref).setEntryValues(display);
146 pref.setSummary(p.mValue);
147 continue;
148 }
149 if (!p.isTwoState) {
150 ((EditTextPreference) pref).setText(p.mValue);
151 pref.setSummary(p.mValue);
152 }
153 } else {
154 Log.w(TAG, "pref not found");
155 }
156 }
157 }
158
159 private void addPreferenceListener(AccountDetail details, OnPreferenceChangeListener listener) {
160 for (AccountDetail.PreferenceEntry p : details.getDetailValues()) {
161 Log.i(TAG, "addPreferenceListener: pref " + p.mKey + p.mValue);
162 Preference pref = findPreference(p.mKey);
163 if (pref != null) {
164
165 pref.setOnPreferenceChangeListener(listener);
166
167 } else {
168 Log.w(TAG, "addPreferenceListener: pref not found");
169 }
170 }
171 }
172
173 Preference.OnPreferenceChangeListener changeBasicPreferenceListener = new Preference.OnPreferenceChangeListener() {
174 @Override
175 public boolean onPreferenceChange(Preference preference, Object newValue) {
176
177 setDifferent(true);
178 if (preference instanceof CheckBoxPreference) {
179 if ((Boolean) newValue == true)
180 getBasicDetails().setDetailString(preference.getKey(), ((Boolean) newValue).toString());
181 } else {
182 preference.setSummary((CharSequence) newValue);
183 Log.i(TAG, "Changing preference value:" + newValue);
184 getBasicDetails().setDetailString(preference.getKey(), ((CharSequence) newValue).toString());
185 }
186 return true;
187 }
188 };
189
190 Preference.OnPreferenceChangeListener changeAdvancedPreferenceListener = new Preference.OnPreferenceChangeListener() {
191 @Override
192 public boolean onPreferenceChange(Preference preference, Object newValue) {
193 preference.setSummary((CharSequence) newValue);
194 getAdvancedDetails().setDetailString(preference.getKey(), ((CharSequence) newValue).toString());
195 return true;
196 }
197 };
198
199 Preference.OnPreferenceChangeListener changeTlsPreferenceListener = new Preference.OnPreferenceChangeListener() {
200 @Override
201 public boolean onPreferenceChange(Preference preference, Object newValue) {
202 preference.setSummary((CharSequence) newValue);
203 getTlsDetails().setDetailString(preference.getKey(), ((CharSequence) newValue).toString());
204 return true;
205 }
206 };
207
208 Preference.OnPreferenceChangeListener changeSrtpPreferenceListener = new Preference.OnPreferenceChangeListener() {
209 @Override
210 public boolean onPreferenceChange(Preference preference, Object newValue) {
211 preference.setSummary((CharSequence) newValue);
212 getSrtpDetails().setDetailString(preference.getKey(), ((CharSequence) newValue).toString());
213 return true;
214 }
215 };
216
217 public boolean validateAccountCreation(ArrayList<String> missingValue) {
218 boolean valid = true;
219
220 for (String s : requiredFields) {
221 EditTextPreference pref = (EditTextPreference) findPreference(s);
222 Log.i(TAG, "Looking for " + s);
223 Log.i(TAG, "Value " + pref.getText());
224 if (pref.getText().isEmpty()) {
225 valid = false;
226 missingValue.add(pref.getTitle().toString());
227 }
228 }
229
230 return valid;
231 }
232
233 public boolean isDifferent() {
234 return isDifferent;
235 }
236
237 public void setDifferent(boolean isDifferent) {
238 this.isDifferent = isDifferent;
239 }
240
241 public AccountDetailAdvanced getAdvancedDetails() {
242 return advancedDetails;
243 }
244
245 public void setAdvancedDetails(AccountDetailAdvanced advancedDetails) {
246 this.advancedDetails = advancedDetails;
247 }
248
249 public AccountDetailBasic getBasicDetails() {
250 return basicDetails;
251 }
252
253 public void setBasicDetails(AccountDetailBasic basicDetails) {
254 this.basicDetails = basicDetails;
255 }
256
257 public AccountDetailSrtp getSrtpDetails() {
258 return srtpDetails;
259 }
260
261 public void setSrtpDetails(AccountDetailSrtp srtpDetails) {
262 this.srtpDetails = srtpDetails;
263 }
264
265 public AccountDetailTls getTlsDetails() {
266 return tlsDetails;
267 }
268
269 public void setTlsDetails(AccountDetailTls tlsDetails) {
270 this.tlsDetails = tlsDetails;
271 }
272
273}