blob: 4cfa8a7e62ce82aff72e54475c4fb70309d4fd02 [file] [log] [blame]
Alexandre Savard2b370f02012-09-06 16:06:01 -04001/*
2 * Copyright (C) 2004-2012 Savoir-Faire Linux Inc.
3 *
4 * Author: Alexandre Savard <alexandre.savard@savoirfairelinux.com>
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 3 of the License, or
9 * (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
19 *
20 * Additional permission under GNU GPL version 3 section 7:
21 *
22 * If you modify this program, or any covered work, by linking or
23 * combining it with the OpenSSL project's OpenSSL library (or a
24 * modified version of that library), containing parts covered by the
25 * terms of the OpenSSL or SSLeay licenses, Savoir-Faire Linux Inc.
26 * grants you additional permission to convey the resulting work.
27 * Corresponding Source for a non-source form of such a combination
28 * shall include the source code for the parts of OpenSSL used as well
29 * as that of the covered work.
30 */
31
32package com.savoirfairelinux.sflphone.client;
33
Alexandre Savard9a93f062012-09-11 10:42:43 -040034import android.app.Activity;
Alexandre Savard4f11d7a2012-10-18 13:15:36 -040035import android.content.BroadcastReceiver;
Alexandre Savardae992932012-10-17 10:26:12 -040036import android.content.Context;
Alexandre Savard53d2ddd2012-09-30 22:04:40 -040037import android.content.Intent;
Alexandre Savard4f11d7a2012-10-18 13:15:36 -040038import android.content.IntentFilter;
Alexandre Savard9a93f062012-09-11 10:42:43 -040039import android.preference.EditTextPreference;
40import android.preference.Preference;
41import android.preference.PreferenceCategory;
42import android.preference.PreferenceFragment;
43import android.preference.PreferenceScreen;
Alexandre Savard70982012012-09-27 17:15:50 -040044import android.preference.ListPreference;
Alexandre Savarde990d052012-10-18 14:43:09 -040045import android.preference.PreferenceManager;
Alexandre Savard2b370f02012-09-06 16:06:01 -040046import android.os.Bundle;
Alexandre Savard12dc3ac2012-09-27 11:17:39 -040047import android.os.RemoteException;
Alexandre Savard4f11d7a2012-10-18 13:15:36 -040048import android.support.v4.content.LocalBroadcastManager;
Alexandre Savard2b370f02012-09-06 16:06:01 -040049import android.util.Log;
Alexandre Savard2b370f02012-09-06 16:06:01 -040050import android.view.View;
Alexandre Savard9a93f062012-09-11 10:42:43 -040051import android.widget.ArrayAdapter;
52import android.widget.ListView;
Alexandre Savard4f11d7a2012-10-18 13:15:36 -040053
54import java.util.Set;
Alexandre Savard9a93f062012-09-11 10:42:43 -040055import java.util.HashMap;
Alexandre Savard52a72522012-09-27 16:40:13 -040056import java.util.ArrayList;
Alexandre Savard2b370f02012-09-06 16:06:01 -040057
58import com.savoirfairelinux.sflphone.R;
Alexandre Savard12dc3ac2012-09-27 11:17:39 -040059import com.savoirfairelinux.sflphone.service.ISipService;
60import com.savoirfairelinux.sflphone.service.SipService;
61import com.savoirfairelinux.sflphone.service.ServiceConstants;
Alexandre Savardae992932012-10-17 10:26:12 -040062import com.savoirfairelinux.sflphone.utils.AccountDetail;
Alexandre Savard8f27d162012-10-05 16:30:28 -040063import com.savoirfairelinux.sflphone.utils.AccountDetailsHandler;
Alexandre Savardae992932012-10-17 10:26:12 -040064import com.savoirfairelinux.sflphone.utils.AccountDetailBasic;
65import com.savoirfairelinux.sflphone.utils.AccountDetailAdvanced;
66import com.savoirfairelinux.sflphone.utils.AccountDetailSrtp;
67import com.savoirfairelinux.sflphone.utils.AccountDetailTls;
Alexandre Savard68838112012-10-30 11:34:43 -040068import com.savoirfairelinux.sflphone.client.AccountPreferenceActivity;
Alexandre Savard2b370f02012-09-06 16:06:01 -040069
Alexandre Savard9a93f062012-09-11 10:42:43 -040070public class AccountManagementFragment extends PreferenceFragment
Alexandre Savard2b370f02012-09-06 16:06:01 -040071{
72 static final String TAG = "AccountManagementFragment";
Alexandre Savarda6c0d992012-09-28 09:24:13 -040073 static final String DEFAULT_ACCOUNT_ID = "IP2IP";
Alexandre Savard53d2ddd2012-09-30 22:04:40 -040074 static final int ACCOUNT_CREATE_REQUEST = 1;
Alexandre Savard68838112012-10-30 11:34:43 -040075 static final int ACCOUNT_EDIT_REQUEST = 2;
Alexandre Savard12dc3ac2012-09-27 11:17:39 -040076 private ISipService service;
Alexandre Savardae992932012-10-17 10:26:12 -040077
Alexandre Savarde990d052012-10-18 14:43:09 -040078 // HashMap<String,HashMap<String,String>> mAccountList = new HashMap<String,HashMap<String,String>>();
79 HashMap<String, AccountPreferenceScreen> mAccountList = new HashMap<String, AccountPreferenceScreen>();
Alexandre Savardae992932012-10-17 10:26:12 -040080 ArrayList<AccountDetail.PreferenceEntry> basicDetailKeys;
81 ArrayList<AccountDetail.PreferenceEntry> advancedDetailKeys;
82 ArrayList<AccountDetail.PreferenceEntry> srtpDetailKeys;
83 ArrayList<AccountDetail.PreferenceEntry> tlsDetailKeys;
Alexandre Savard68838112012-10-30 11:34:43 -040084 PreferenceScreen mRoot = null;
Alexandre Savardae992932012-10-17 10:26:12 -040085
Alexandre Savard9c966e32012-09-28 14:41:28 -040086 Activity context = getActivity();
Alexandre Savard12dc3ac2012-09-27 11:17:39 -040087
88 public AccountManagementFragment(ISipService s)
89 {
90 service = s;
Alexandre Savard9c966e32012-09-28 14:41:28 -040091
Alexandre Savardae992932012-10-17 10:26:12 -040092 basicDetailKeys = AccountDetailBasic.getPreferenceEntries();
93 advancedDetailKeys = AccountDetailAdvanced.getPreferenceEntries();
Alexandre Savardc63f54b2012-10-17 10:39:40 -040094 srtpDetailKeys = AccountDetailSrtp.getPreferenceEntries();
95 tlsDetailKeys = AccountDetailTls.getPreferenceEntries();
Alexandre Savard12dc3ac2012-09-27 11:17:39 -040096 }
Alexandre Savard2b370f02012-09-06 16:06:01 -040097
98 @Override
99 public void onCreate(Bundle savedInstanceState)
100 {
101 super.onCreate(savedInstanceState);
102
Alexandre Savard9a93f062012-09-11 10:42:43 -0400103 Log.i(TAG, "Create Account Management Fragment");
Alexandre Savard2b370f02012-09-06 16:06:01 -0400104
Alexandre Savard70982012012-09-27 17:15:50 -0400105 setPreferenceScreen(getAccountListPreferenceScreen());
Alexandre Savard4f11d7a2012-10-18 13:15:36 -0400106
107 LocalBroadcastManager.getInstance(getActivity()).registerReceiver(mMessageReceiver, new IntentFilter("accounts-changed"));
Alexandre Savard2b370f02012-09-06 16:06:01 -0400108 }
109
Alexandre Savard8b7d4332012-09-30 20:02:11 -0400110 @Override
111 public void onStop()
112 {
113 super.onStop();
114 Log.i(TAG, "onStop");
115
Alexandre Savardd5babe52012-10-01 08:52:44 -0400116 ArrayList<String> accountList = getAccountList();
117
118 try {
Alexandre Savardd5babe52012-10-01 08:52:44 -0400119 for(String s : accountList) {
120 Log.i(TAG, " set details for " + s);
Alexandre Savarde990d052012-10-18 14:43:09 -0400121 AccountPreferenceScreen accountPref = mAccountList.get(s);
122 if(accountPref != null) {
123 service.setAccountDetails(s, accountPref.preferenceMap);
Alexandre Savard9e0015d2012-10-15 18:02:34 -0400124 }
Alexandre Savardd5babe52012-10-01 08:52:44 -0400125 }
126 } catch (RemoteException e) {
127 Log.e(TAG, "Cannot call service method", e);
128 }
Alexandre Savard8b7d4332012-09-30 20:02:11 -0400129 }
130
131 @Override
132 public void onDestroy()
133 {
Alexandre Savard4f11d7a2012-10-18 13:15:36 -0400134 LocalBroadcastManager.getInstance(getActivity()).unregisterReceiver(mMessageReceiver);
Alexandre Savard8b7d4332012-09-30 20:02:11 -0400135 super.onDestroy();
136 Log.i(TAG, "onDestroy");
Alexandre Savard8b7d4332012-09-30 20:02:11 -0400137 }
138
Alexandre Savard53d2ddd2012-09-30 22:04:40 -0400139 @Override
140 public void onActivityResult(int requestCode, int resultCode, Intent data) {
Alexandre Savard68838112012-10-30 11:34:43 -0400141 switch(requestCode) {
142 case ACCOUNT_CREATE_REQUEST:
143 Log.i(TAG, "ACCOUNT_CREATE_REQUEST Done");
144 break;
145 case ACCOUNT_EDIT_REQUEST:
146 if(resultCode == AccountPreferenceActivity.ACCOUNT_MODIFIED) {
147 Bundle bundle = data.getExtras();
148 String accountID = bundle.getString("AccountID");
149 Log.i(TAG, "Update account settings for " + accountID);
150 }
151 break;
152 default:
153 break;
Alexandre Savard53d2ddd2012-09-30 22:04:40 -0400154 }
155 }
156
Alexandre Savard4f11d7a2012-10-18 13:15:36 -0400157 private BroadcastReceiver mMessageReceiver = new BroadcastReceiver() {
158 @Override
159 public void onReceive(Context context, Intent intent) {
160 String message = intent.getStringExtra("message");
161 Log.d("receiver", "Got message: " + message);
162 ArrayList<String> newList = (ArrayList<String>) getAccountList();
163 Set<String> currentList = (Set<String>) mAccountList.keySet();
Alexandre Savardcf7e95a2012-10-18 18:03:06 -0400164 currentList.remove(DEFAULT_ACCOUNT_ID);
Alexandre Savardc7d22332012-10-18 16:54:17 -0400165 if(newList.size() > currentList.size()) {
166 for(String s : newList) {
167 if(!currentList.contains(s)) {
168 Log.i("receiver", "ADDING ACCOUNT!!!!!! " + s);
Alexandre Savard68838112012-10-30 11:34:43 -0400169 mRoot.addPreference(createAccountPreferenceScreen(s));
Alexandre Savardc7d22332012-10-18 16:54:17 -0400170 }
Alexandre Savard4f11d7a2012-10-18 13:15:36 -0400171 }
172 }
Alexandre Savardcf7e95a2012-10-18 18:03:06 -0400173 else if(newList.size() < currentList.size()) {
Alexandre Savardc7d22332012-10-18 16:54:17 -0400174 for(String s : currentList) {
175 if(!newList.contains(s)) {
176 Log.i("receiver", "REMOVING ACCOUNT!!!!!! " + s);
177 mRoot.removePreference(mAccountList.get(s).mScreen);
178 mAccountList.remove(s);
179 }
180 }
181 }
Alexandre Savard4f11d7a2012-10-18 13:15:36 -0400182 }
183 };
184
Alexandre Savard9a93f062012-09-11 10:42:43 -0400185
Alexandre Savard8ef37c52012-10-01 10:48:14 -0400186 Preference.OnPreferenceChangeListener changeBasicTextEditListener = new Preference.OnPreferenceChangeListener() {
Alexandre Savard9a93f062012-09-11 10:42:43 -0400187 public boolean onPreferenceChange(Preference preference, Object newValue) {
Alexandre Savard5261f822012-10-05 15:23:56 -0400188 preference.setSummary(getString(R.string.account_current_value_label) + (CharSequence)newValue);
Alexandre Savardc7d22332012-10-18 16:54:17 -0400189 AccountPreferenceScreen accountPreference = mAccountList.get(preference.getKey());
190 String preferenceKey = basicDetailKeys.get(preference.getOrder()).mKey;
191 accountPreference.preferenceMap.put(preferenceKey, ((CharSequence)newValue).toString());
192 if(preferenceKey == AccountDetailBasic.CONFIG_ACCOUNT_ALIAS)
193 accountPreference.mScreen.setTitle(((CharSequence)newValue.toString()));
Alexandre Savard9a93f062012-09-11 10:42:43 -0400194 return true;
195 }
196 };
197
Alexandre Savard8ef37c52012-10-01 10:48:14 -0400198 Preference.OnPreferenceChangeListener changeAdvancedTextEditListener = new Preference.OnPreferenceChangeListener() {
199 public boolean onPreferenceChange(Preference preference, Object newValue) {
Alexandre Savard5261f822012-10-05 15:23:56 -0400200 preference.setSummary(getString(R.string.account_current_value_label) + (CharSequence)newValue);
Alexandre Savarde990d052012-10-18 14:43:09 -0400201 mAccountList.get(preference.getKey()).preferenceMap.put(advancedDetailKeys.get(preference.getOrder()).mKey, ((CharSequence)newValue).toString());
Alexandre Savard8ef37c52012-10-01 10:48:14 -0400202 return true;
203 }
204 };
Alexandre Savard9a93f062012-09-11 10:42:43 -0400205
Alexandre Savard53d2ddd2012-09-30 22:04:40 -0400206 Preference.OnPreferenceClickListener launchAccountCreationOnClick = new Preference.OnPreferenceClickListener() {
Alexandre Savard9a93f062012-09-11 10:42:43 -0400207 public boolean onPreferenceClick(Preference preference) {
Alexandre Savardcf7e95a2012-10-18 18:03:06 -0400208 if(preference.getTitle() == "Create New Account") {
Alexandre Savard68838112012-10-30 11:34:43 -0400209 launchAccountCreationActivity(preference);
Alexandre Savard53d2ddd2012-09-30 22:04:40 -0400210 }
211 return true;
Alexandre Savard9a93f062012-09-11 10:42:43 -0400212 }
213 };
214
Alexandre Savard68838112012-10-30 11:34:43 -0400215 Preference.OnPreferenceClickListener launchAccountEditOnClick = new Preference.OnPreferenceClickListener() {
216 public boolean onPreferenceClick(Preference preference) {
217 launchAccountEditActivity(preference);
218 return true;
219 }
220 };
221
Alexandre Savardc7d22332012-10-18 16:54:17 -0400222 Preference.OnPreferenceClickListener removeSelectedAccountOnClick = new Preference.OnPreferenceClickListener() {
223 public boolean onPreferenceClick(Preference preference) {
224 if(preference.getTitle() == "Delete Account") {
225 deleteSelectedAccount(preference.getKey());
226 }
227 return true;
228 }
229 };
230
Alexandre Savard68838112012-10-30 11:34:43 -0400231 private void launchAccountCreationActivity(Preference preference)
Alexandre Savard53d2ddd2012-09-30 22:04:40 -0400232 {
Alexandre Savard68838112012-10-30 11:34:43 -0400233 Log.i(TAG, "Launch account creation activity");
Alexandre Savardd5babe52012-10-01 08:52:44 -0400234 Intent intent = preference.getIntent();
Alexandre Savard53d2ddd2012-09-30 22:04:40 -0400235 startActivityForResult(intent, ACCOUNT_CREATE_REQUEST);
Alexandre Savardc7d22332012-10-18 16:54:17 -0400236 }
237
Alexandre Savard68838112012-10-30 11:34:43 -0400238 private void launchAccountEditActivity(Preference preference)
239 {
240 Log.i(TAG, "Launch account edit activity");
241 Intent intent = preference.getIntent();
242 startActivityForResult(intent, ACCOUNT_EDIT_REQUEST);
243 }
244
Alexandre Savardc7d22332012-10-18 16:54:17 -0400245 private void deleteSelectedAccount(String accountID) {
246 Log.i(TAG, "DeleteSelectedAccount");
247 try {
248 service.removeAccount(accountID);
249 } catch (RemoteException e) {
250 Log.e(TAG, "Cannot call service method", e);
251 }
252 };
Alexandre Savard53d2ddd2012-09-30 22:04:40 -0400253
254 private ArrayList<String> getAccountList()
Alexandre Savard52a72522012-09-27 16:40:13 -0400255 {
256 ArrayList<String> accountList = null;
257 try {
258 accountList = (ArrayList) service.getAccountList();
259 } catch (RemoteException e) {
260 Log.e(TAG, "Cannot call service method", e);
261 }
262
Alexandre Savarda6c0d992012-09-28 09:24:13 -0400263 // Remove the default account from list
264 accountList.remove(DEFAULT_ACCOUNT_ID);
265
Alexandre Savard52a72522012-09-27 16:40:13 -0400266 return accountList;
267 }
268
Alexandre Savard53d2ddd2012-09-30 22:04:40 -0400269 private HashMap getAccountDetails(String accountID)
Alexandre Savard9a93f062012-09-11 10:42:43 -0400270 {
Alexandre Savard12dc3ac2012-09-27 11:17:39 -0400271 HashMap accountDetails = null;
272 try {
Alexandre Savard70982012012-09-27 17:15:50 -0400273 accountDetails = (HashMap) service.getAccountDetails(accountID);
Alexandre Savard12dc3ac2012-09-27 11:17:39 -0400274 } catch (RemoteException e) {
275 Log.e(TAG, "Cannot call service method", e);
276 }
Alexandre Savard9a93f062012-09-11 10:42:43 -0400277
278 return accountDetails;
279 }
280
Alexandre Savardd5babe52012-10-01 08:52:44 -0400281 private void setAccountDetails(String accountID, HashMap<String, String> accountDetails)
282 {
283 try {
284 service.setAccountDetails(accountID, accountDetails);
285 } catch (RemoteException e) {
286 Log.e(TAG, "Cannot call service method", e);
287 }
288 }
289
Alexandre Savard70982012012-09-27 17:15:50 -0400290 public PreferenceScreen getAccountListPreferenceScreen()
Alexandre Savard9a93f062012-09-11 10:42:43 -0400291 {
Alexandre Savard9a93f062012-09-11 10:42:43 -0400292 Activity currentContext = getActivity();
Alexandre Savard52a72522012-09-27 16:40:13 -0400293
Alexandre Savard8b7d4332012-09-30 20:02:11 -0400294 ArrayList<String> accountList = getAccountList();
295 // Log.i(TAG, "GetAccountList: " + mAccountList);
Alexandre Savard52a72522012-09-27 16:40:13 -0400296
Alexandre Savard4f11d7a2012-10-18 13:15:36 -0400297 mRoot = getPreferenceManager().createPreferenceScreen(currentContext);
Alexandre Savard70982012012-09-27 17:15:50 -0400298
Alexandre Savarda6c0d992012-09-28 09:24:13 -0400299 // Default account category
Alexandre Savard70982012012-09-27 17:15:50 -0400300 PreferenceCategory defaultAccountCat = new PreferenceCategory(currentContext);
Alexandre Savarda6c0d992012-09-28 09:24:13 -0400301 defaultAccountCat.setTitle(R.string.default_account_category);
Alexandre Savard4f11d7a2012-10-18 13:15:36 -0400302 mRoot.addPreference(defaultAccountCat);
Alexandre Savard70982012012-09-27 17:15:50 -0400303
Alexandre Savard68838112012-10-30 11:34:43 -0400304 mRoot.addPreference(createAccountPreferenceScreen(DEFAULT_ACCOUNT_ID));
Alexandre Savard70982012012-09-27 17:15:50 -0400305
Alexandre Savarda6c0d992012-09-28 09:24:13 -0400306 // Account list category
Alexandre Savard70982012012-09-27 17:15:50 -0400307 PreferenceCategory accountListCat = new PreferenceCategory(currentContext);
Alexandre Savarda6c0d992012-09-28 09:24:13 -0400308 accountListCat.setTitle(R.string.default_account_category);
Alexandre Savard4f11d7a2012-10-18 13:15:36 -0400309 mRoot.addPreference(accountListCat);
Alexandre Savard70982012012-09-27 17:15:50 -0400310
Alexandre Savard53d2ddd2012-09-30 22:04:40 -0400311 Preference createNewAccount = new Preference(currentContext);
Alexandre Savardcf7e95a2012-10-18 18:03:06 -0400312 createNewAccount.setTitle("Create New Account");
Alexandre Savard53d2ddd2012-09-30 22:04:40 -0400313 createNewAccount.setOnPreferenceClickListener(launchAccountCreationOnClick);
Alexandre Savardd5babe52012-10-01 08:52:44 -0400314 createNewAccount.setIntent(new Intent().setClass(getActivity(), AccountCreationActivity.class));
Alexandre Savard4f11d7a2012-10-18 13:15:36 -0400315 mRoot.addPreference(createNewAccount);
Alexandre Savard3a46d922012-09-30 20:42:51 -0400316
Alexandre Savarde990d052012-10-18 14:43:09 -0400317 for(String s : accountList) {
318 // mRoot.addPreference(getAccountPreferenceScreen(s));
Alexandre Savard68838112012-10-30 11:34:43 -0400319 mRoot.addPreference(createAccountPreferenceScreen(s));
Alexandre Savarde990d052012-10-18 14:43:09 -0400320 }
Alexandre Savard8ef37c52012-10-01 10:48:14 -0400321
Alexandre Savard4f11d7a2012-10-18 13:15:36 -0400322 return mRoot;
Alexandre Savard70982012012-09-27 17:15:50 -0400323 }
324
Alexandre Savard68838112012-10-30 11:34:43 -0400325 Preference createAccountPreferenceScreen(String accountID) {
326
327 HashMap<String, String> preferenceMap = getAccountDetails(accountID);
328
329 AccountDetailBasic basicDetails = new AccountDetailBasic(preferenceMap);
330 AccountDetailAdvanced advancedDetails = new AccountDetailAdvanced(preferenceMap);
331 AccountDetailSrtp srtpDetails = new AccountDetailSrtp(preferenceMap);
332 AccountDetailTls tlsDetails = new AccountDetailTls(preferenceMap);
333
334 Bundle bundle = new Bundle();
335 bundle.putString("AccountID", accountID);
336 bundle.putStringArrayList(AccountDetailBasic.BUNDLE_TAG, basicDetails.getValuesOnly());
337 bundle.putStringArrayList(AccountDetailAdvanced.BUNDLE_TAG, advancedDetails.getValuesOnly());
338 bundle.putStringArrayList(AccountDetailSrtp.BUNDLE_TAG, srtpDetails.getValuesOnly());
339 bundle.putStringArrayList(AccountDetailTls.BUNDLE_TAG, tlsDetails.getValuesOnly());
340
341 Intent intent = new Intent().setClass(getActivity(), AccountPreferenceActivity.class);
342 intent.putExtras(bundle);
343
344 Preference editAccount = new Preference(getActivity());
345 editAccount.setTitle(accountID);
346 editAccount.setOnPreferenceClickListener(launchAccountEditOnClick);
347 editAccount.setIntent(intent);
348
349 return editAccount;
350 }
351
352 /*
Alexandre Savarde990d052012-10-18 14:43:09 -0400353 AccountPreferenceScreen createAccountPreferenceScreen(String accountID) {
354 AccountPreferenceScreen preference = new AccountPreferenceScreen(getPreferenceManager(), getActivity(), accountID);
355 mAccountList.put(accountID, preference);
Alexandre Savardae992932012-10-17 10:26:12 -0400356
Alexandre Savarde990d052012-10-18 14:43:09 -0400357 return preference;
Alexandre Savardae992932012-10-17 10:26:12 -0400358 }
Alexandre Savard68838112012-10-30 11:34:43 -0400359 */
Alexandre Savardae992932012-10-17 10:26:12 -0400360
Alexandre Savarde990d052012-10-18 14:43:09 -0400361 private class AccountPreferenceScreen
Alexandre Savard70982012012-09-27 17:15:50 -0400362 {
Alexandre Savarde990d052012-10-18 14:43:09 -0400363 public PreferenceScreen mScreen;
364 public HashMap<String, String> preferenceMap;
Alexandre Savard70982012012-09-27 17:15:50 -0400365
Alexandre Savarde990d052012-10-18 14:43:09 -0400366 public AccountPreferenceScreen(PreferenceManager prefManager, Context context, String accountID)
367 {
368 mScreen = prefManager.createPreferenceScreen(context);
369 preferenceMap = getAccountDetails(accountID);
Alexandre Savard9a93f062012-09-11 10:42:43 -0400370
Alexandre Savardc7d22332012-10-18 16:54:17 -0400371 mScreen.setTitle(preferenceMap.get(ServiceConstants.CONFIG_ACCOUNT_ALIAS));
372
373 if(accountID != DEFAULT_ACCOUNT_ID) {
374 Preference deleteThisAccount = new Preference(context);
375 deleteThisAccount.setTitle("Delete Account");
376 deleteThisAccount.setKey(accountID);
377 deleteThisAccount.setOnPreferenceClickListener(removeSelectedAccountOnClick);
378 deleteThisAccount.setIntent(new Intent().setClass(getActivity(), AccountCreationActivity.class));
379 mScreen.addPreference(deleteThisAccount);
380 }
Alexandre Savard70982012012-09-27 17:15:50 -0400381
Alexandre Savarde990d052012-10-18 14:43:09 -0400382 createPreferenceSection(mScreen, context, R.string.account_preferences_basic, basicDetailKeys, accountID, preferenceMap);
383 createPreferenceSection(mScreen, context, R.string.account_preferences_advanced, advancedDetailKeys, accountID, preferenceMap);
384 createPreferenceSection(mScreen, context, R.string.account_preferences_srtp, srtpDetailKeys, accountID, preferenceMap);
385 createPreferenceSection(mScreen, context, R.string.account_preferences_tls, tlsDetailKeys, accountID, preferenceMap);
386 }
Alexandre Savard9c966e32012-09-28 14:41:28 -0400387
Alexandre Savarde990d052012-10-18 14:43:09 -0400388 public void createPreferenceSection(PreferenceScreen root, Context context, int titleId, ArrayList<AccountDetail.PreferenceEntry> detailEntries,
389 String accountID, HashMap<String, String> map)
390 {
391 // Inline preference
392 PreferenceCategory accountPrefCat = new PreferenceCategory(context);
393 accountPrefCat.setTitle(titleId);
394 root.addPreference(accountPrefCat);
395
396 for(AccountDetail.PreferenceEntry entry : detailEntries)
397 {
398 EditTextPreference accountPref = new EditTextPreference(context);
399 accountPref.setDialogTitle(entry.mLabelId);
400 accountPref.setPersistent(false);
401 accountPref.setTitle(entry.mLabelId);
402 accountPref.setSummary(getString(R.string.account_current_value_label) + map.get(entry.mKey));
403 accountPref.setOnPreferenceChangeListener(changeBasicTextEditListener);
404 accountPref.setKey(accountID);
405 accountPrefCat.addPreference(accountPref);
406 }
407 }
Alexandre Savard9a93f062012-09-11 10:42:43 -0400408 }
Alexandre Savard2b370f02012-09-06 16:06:01 -0400409}