blob: 2238994be1d52c88f7b3334f80ec57fcac16442c [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 Savardae992932012-10-17 10:26:12 -040035import android.content.Context;
Alexandre Savard53d2ddd2012-09-30 22:04:40 -040036import android.content.Intent;
Alexandre Savard9a93f062012-09-11 10:42:43 -040037import android.preference.EditTextPreference;
38import android.preference.Preference;
39import android.preference.PreferenceCategory;
40import android.preference.PreferenceFragment;
41import android.preference.PreferenceScreen;
Alexandre Savard70982012012-09-27 17:15:50 -040042import android.preference.ListPreference;
Alexandre Savard2b370f02012-09-06 16:06:01 -040043import android.os.Bundle;
Alexandre Savard12dc3ac2012-09-27 11:17:39 -040044import android.os.RemoteException;
Alexandre Savard2b370f02012-09-06 16:06:01 -040045import android.util.Log;
Alexandre Savard2b370f02012-09-06 16:06:01 -040046import android.view.View;
Alexandre Savard9a93f062012-09-11 10:42:43 -040047import android.widget.ArrayAdapter;
48import android.widget.ListView;
49import java.util.HashMap;
Alexandre Savard52a72522012-09-27 16:40:13 -040050import java.util.ArrayList;
Alexandre Savard2b370f02012-09-06 16:06:01 -040051
52import com.savoirfairelinux.sflphone.R;
Alexandre Savard12dc3ac2012-09-27 11:17:39 -040053import com.savoirfairelinux.sflphone.service.ISipService;
54import com.savoirfairelinux.sflphone.service.SipService;
55import com.savoirfairelinux.sflphone.service.ServiceConstants;
Alexandre Savardae992932012-10-17 10:26:12 -040056import com.savoirfairelinux.sflphone.utils.AccountDetail;
Alexandre Savard8f27d162012-10-05 16:30:28 -040057import com.savoirfairelinux.sflphone.utils.AccountDetailsHandler;
Alexandre Savardae992932012-10-17 10:26:12 -040058import com.savoirfairelinux.sflphone.utils.AccountDetailBasic;
59import com.savoirfairelinux.sflphone.utils.AccountDetailAdvanced;
60import com.savoirfairelinux.sflphone.utils.AccountDetailSrtp;
61import com.savoirfairelinux.sflphone.utils.AccountDetailTls;
Alexandre Savard2b370f02012-09-06 16:06:01 -040062
Alexandre Savard9a93f062012-09-11 10:42:43 -040063public class AccountManagementFragment extends PreferenceFragment
Alexandre Savard2b370f02012-09-06 16:06:01 -040064{
65 static final String TAG = "AccountManagementFragment";
Alexandre Savarda6c0d992012-09-28 09:24:13 -040066 static final String DEFAULT_ACCOUNT_ID = "IP2IP";
Alexandre Savard53d2ddd2012-09-30 22:04:40 -040067 static final int ACCOUNT_CREATE_REQUEST = 1;
Alexandre Savard12dc3ac2012-09-27 11:17:39 -040068 private ISipService service;
Alexandre Savardae992932012-10-17 10:26:12 -040069
Alexandre Savard8b7d4332012-09-30 20:02:11 -040070 HashMap<String,HashMap<String,String>> mAccountList = new HashMap<String,HashMap<String,String>>();
Alexandre Savardae992932012-10-17 10:26:12 -040071 ArrayList<AccountDetail.PreferenceEntry> basicDetailKeys;
72 ArrayList<AccountDetail.PreferenceEntry> advancedDetailKeys;
73 ArrayList<AccountDetail.PreferenceEntry> srtpDetailKeys;
74 ArrayList<AccountDetail.PreferenceEntry> tlsDetailKeys;
75 AccountDetailBasic basicDetails;
76 AccountDetailAdvanced advancedDetails;
77 AccountDetailSrtp srtpDetails;
78 AccountDetailTls tlsDetails;
79
Alexandre Savard9c966e32012-09-28 14:41:28 -040080 Activity context = getActivity();
Alexandre Savard12dc3ac2012-09-27 11:17:39 -040081
82 public AccountManagementFragment(ISipService s)
83 {
84 service = s;
Alexandre Savard9c966e32012-09-28 14:41:28 -040085
Alexandre Savardae992932012-10-17 10:26:12 -040086 basicDetailKeys = AccountDetailBasic.getPreferenceEntries();
87 advancedDetailKeys = AccountDetailAdvanced.getPreferenceEntries();
88
89 basicDetails = new AccountDetailBasic();
90 advancedDetails = new AccountDetailAdvanced();
91 srtpDetails = new AccountDetailSrtp();
92 tlsDetails = new AccountDetailTls();
Alexandre Savard12dc3ac2012-09-27 11:17:39 -040093 }
Alexandre Savard2b370f02012-09-06 16:06:01 -040094
95 @Override
96 public void onCreate(Bundle savedInstanceState)
97 {
98 super.onCreate(savedInstanceState);
99
Alexandre Savard9a93f062012-09-11 10:42:43 -0400100 Log.i(TAG, "Create Account Management Fragment");
Alexandre Savard2b370f02012-09-06 16:06:01 -0400101
Alexandre Savard70982012012-09-27 17:15:50 -0400102 setPreferenceScreen(getAccountListPreferenceScreen());
Alexandre Savard2b370f02012-09-06 16:06:01 -0400103 }
104
Alexandre Savard8b7d4332012-09-30 20:02:11 -0400105 @Override
106 public void onStop()
107 {
108 super.onStop();
109 Log.i(TAG, "onStop");
110
Alexandre Savardd5babe52012-10-01 08:52:44 -0400111 ArrayList<String> accountList = getAccountList();
112
113 try {
Alexandre Savardd5babe52012-10-01 08:52:44 -0400114 for(String s : accountList) {
115 Log.i(TAG, " set details for " + s);
Alexandre Savard9e0015d2012-10-15 18:02:34 -0400116 HashMap<String, String> accountDetails = mAccountList.get(s);
117 if(accountDetails != null) {
118 service.setAccountDetails(s, accountDetails);
119 }
Alexandre Savardd5babe52012-10-01 08:52:44 -0400120 }
121 } catch (RemoteException e) {
122 Log.e(TAG, "Cannot call service method", e);
123 }
Alexandre Savard8b7d4332012-09-30 20:02:11 -0400124 }
125
126 @Override
127 public void onDestroy()
128 {
129 super.onDestroy();
130 Log.i(TAG, "onDestroy");
131
132
133 }
134
Alexandre Savard53d2ddd2012-09-30 22:04:40 -0400135 @Override
136 public void onActivityResult(int requestCode, int resultCode, Intent data) {
137 if (requestCode == ACCOUNT_CREATE_REQUEST) {
138 }
139 }
140
Alexandre Savard9a93f062012-09-11 10:42:43 -0400141
Alexandre Savard8ef37c52012-10-01 10:48:14 -0400142 Preference.OnPreferenceChangeListener changeBasicTextEditListener = new Preference.OnPreferenceChangeListener() {
Alexandre Savard9a93f062012-09-11 10:42:43 -0400143 public boolean onPreferenceChange(Preference preference, Object newValue) {
Alexandre Savard5261f822012-10-05 15:23:56 -0400144 preference.setSummary(getString(R.string.account_current_value_label) + (CharSequence)newValue);
Alexandre Savard8ef37c52012-10-01 10:48:14 -0400145 mAccountList.get(preference.getKey()).put(basicDetailKeys.get(preference.getOrder()).mKey, ((CharSequence)newValue).toString());
Alexandre Savard9a93f062012-09-11 10:42:43 -0400146 return true;
147 }
148 };
149
Alexandre Savard8ef37c52012-10-01 10:48:14 -0400150 Preference.OnPreferenceChangeListener changeAdvancedTextEditListener = new Preference.OnPreferenceChangeListener() {
151 public boolean onPreferenceChange(Preference preference, Object newValue) {
Alexandre Savard5261f822012-10-05 15:23:56 -0400152 preference.setSummary(getString(R.string.account_current_value_label) + (CharSequence)newValue);
Alexandre Savard8ef37c52012-10-01 10:48:14 -0400153 mAccountList.get(preference.getKey()).put(advancedDetailKeys.get(preference.getOrder()).mKey, ((CharSequence)newValue).toString());
154 return true;
155 }
156 };
Alexandre Savard9a93f062012-09-11 10:42:43 -0400157
Alexandre Savard53d2ddd2012-09-30 22:04:40 -0400158 Preference.OnPreferenceClickListener launchAccountCreationOnClick = new Preference.OnPreferenceClickListener() {
Alexandre Savard9a93f062012-09-11 10:42:43 -0400159 public boolean onPreferenceClick(Preference preference) {
Alexandre Savard53d2ddd2012-09-30 22:04:40 -0400160 if(preference.getTitle() == "Touch to Create New Account") {
Alexandre Savardd5babe52012-10-01 08:52:44 -0400161 launchAccountCreationPanel(preference);
Alexandre Savard53d2ddd2012-09-30 22:04:40 -0400162 }
163 return true;
Alexandre Savard9a93f062012-09-11 10:42:43 -0400164 }
165 };
166
Alexandre Savardd5babe52012-10-01 08:52:44 -0400167 private void launchAccountCreationPanel(Preference preference)
Alexandre Savard53d2ddd2012-09-30 22:04:40 -0400168 {
169 Log.i("MainSandbox", "launchPreferencePanel");
Alexandre Savardd5babe52012-10-01 08:52:44 -0400170 Intent intent = preference.getIntent();
Alexandre Savard53d2ddd2012-09-30 22:04:40 -0400171 startActivityForResult(intent, ACCOUNT_CREATE_REQUEST);
172 }
173
174 private ArrayList<String> getAccountList()
Alexandre Savard52a72522012-09-27 16:40:13 -0400175 {
176 ArrayList<String> accountList = null;
177 try {
178 accountList = (ArrayList) service.getAccountList();
179 } catch (RemoteException e) {
180 Log.e(TAG, "Cannot call service method", e);
181 }
182
Alexandre Savarda6c0d992012-09-28 09:24:13 -0400183 // Remove the default account from list
184 accountList.remove(DEFAULT_ACCOUNT_ID);
185
Alexandre Savard52a72522012-09-27 16:40:13 -0400186 return accountList;
187 }
188
Alexandre Savard53d2ddd2012-09-30 22:04:40 -0400189 private HashMap getAccountDetails(String accountID)
Alexandre Savard9a93f062012-09-11 10:42:43 -0400190 {
Alexandre Savard12dc3ac2012-09-27 11:17:39 -0400191 HashMap accountDetails = null;
192 try {
Alexandre Savard70982012012-09-27 17:15:50 -0400193 accountDetails = (HashMap) service.getAccountDetails(accountID);
Alexandre Savard12dc3ac2012-09-27 11:17:39 -0400194 } catch (RemoteException e) {
195 Log.e(TAG, "Cannot call service method", e);
196 }
Alexandre Savard9a93f062012-09-11 10:42:43 -0400197
198 return accountDetails;
199 }
200
Alexandre Savardd5babe52012-10-01 08:52:44 -0400201 private void setAccountDetails(String accountID, HashMap<String, String> accountDetails)
202 {
203 try {
204 service.setAccountDetails(accountID, accountDetails);
205 } catch (RemoteException e) {
206 Log.e(TAG, "Cannot call service method", e);
207 }
208 }
209
Alexandre Savard70982012012-09-27 17:15:50 -0400210 public PreferenceScreen getAccountListPreferenceScreen()
Alexandre Savard9a93f062012-09-11 10:42:43 -0400211 {
Alexandre Savard9a93f062012-09-11 10:42:43 -0400212 Activity currentContext = getActivity();
Alexandre Savard52a72522012-09-27 16:40:13 -0400213
Alexandre Savard8b7d4332012-09-30 20:02:11 -0400214 ArrayList<String> accountList = getAccountList();
215 // Log.i(TAG, "GetAccountList: " + mAccountList);
Alexandre Savard52a72522012-09-27 16:40:13 -0400216
Alexandre Savard70982012012-09-27 17:15:50 -0400217 PreferenceScreen root = getPreferenceManager().createPreferenceScreen(currentContext);
218
Alexandre Savarda6c0d992012-09-28 09:24:13 -0400219 // Default account category
Alexandre Savard70982012012-09-27 17:15:50 -0400220 PreferenceCategory defaultAccountCat = new PreferenceCategory(currentContext);
Alexandre Savarda6c0d992012-09-28 09:24:13 -0400221 defaultAccountCat.setTitle(R.string.default_account_category);
Alexandre Savard70982012012-09-27 17:15:50 -0400222 root.addPreference(defaultAccountCat);
223
Alexandre Savarda6c0d992012-09-28 09:24:13 -0400224 root.addPreference(getAccountPreferenceScreen(DEFAULT_ACCOUNT_ID));
Alexandre Savard70982012012-09-27 17:15:50 -0400225
Alexandre Savarda6c0d992012-09-28 09:24:13 -0400226 // Account list category
Alexandre Savard70982012012-09-27 17:15:50 -0400227 PreferenceCategory accountListCat = new PreferenceCategory(currentContext);
Alexandre Savarda6c0d992012-09-28 09:24:13 -0400228 accountListCat.setTitle(R.string.default_account_category);
Alexandre Savard70982012012-09-27 17:15:50 -0400229 root.addPreference(accountListCat);
230
Alexandre Savard53d2ddd2012-09-30 22:04:40 -0400231 Preference createNewAccount = new Preference(currentContext);
232 createNewAccount.setTitle("Touch to Create New Account");
233 createNewAccount.setOnPreferenceClickListener(launchAccountCreationOnClick);
Alexandre Savardd5babe52012-10-01 08:52:44 -0400234 createNewAccount.setIntent(new Intent().setClass(getActivity(), AccountCreationActivity.class));
Alexandre Savard53d2ddd2012-09-30 22:04:40 -0400235 root.addPreference(createNewAccount);
Alexandre Savard3a46d922012-09-30 20:42:51 -0400236
Alexandre Savard8ef37c52012-10-01 10:48:14 -0400237 for(String s : accountList)
238 root.addPreference(getAccountPreferenceScreen(s));
239
Alexandre Savarda6c0d992012-09-28 09:24:13 -0400240 return root;
Alexandre Savard70982012012-09-27 17:15:50 -0400241 }
242
Alexandre Savardae992932012-10-17 10:26:12 -0400243 public PreferenceCategory createPreferenceSection(PreferenceScreen root, Context context, int titleId, ArrayList<AccountDetail.PreferenceEntry> detailEntries,
244 String accountID, HashMap<String, String> map)
245 {
246 // Inline preference
247 PreferenceCategory accountPrefCat = new PreferenceCategory(context);
248 accountPrefCat.setTitle(titleId);
249 root.addPreference(accountPrefCat);
250
251 for(AccountDetail.PreferenceEntry entry : detailEntries)
252 {
253 EditTextPreference accountPref = new EditTextPreference(context);
254 accountPref.setDialogTitle(entry.mLabelId);
255 accountPref.setPersistent(false);
256 accountPref.setTitle(entry.mLabelId);
257 accountPref.setSummary(getString(R.string.account_current_value_label) + map.get(entry.mKey));
258 accountPref.setOnPreferenceChangeListener(changeBasicTextEditListener);
259 accountPref.setKey(accountID);
260 accountPrefCat.addPreference(accountPref);
261 }
262
263 return accountPrefCat;
264 }
265
Alexandre Savard70982012012-09-27 17:15:50 -0400266 public PreferenceScreen getAccountPreferenceScreen(String accountID)
267 {
268 Activity currentContext = getActivity();
269
Alexandre Savard8b7d4332012-09-30 20:02:11 -0400270 HashMap<String,String> map = getAccountDetails(accountID);
271 mAccountList.put(accountID, map);
Alexandre Savard9a93f062012-09-11 10:42:43 -0400272
273 PreferenceScreen root = getPreferenceManager().createPreferenceScreen(currentContext);
Alexandre Savard8b7d4332012-09-30 20:02:11 -0400274 root.setTitle(map.get(ServiceConstants.CONFIG_ACCOUNT_ALIAS));
Alexandre Savard70982012012-09-27 17:15:50 -0400275
Alexandre Savardae992932012-10-17 10:26:12 -0400276 createPreferenceSection(root, currentContext, R.string.account_preferences_basic, basicDetailKeys, accountID, map);
277 createPreferenceSection(root, currentContext, R.string.account_preferences_advanced, advancedDetailKeys, accountID, map);
278/*
Alexandre Savard9a93f062012-09-11 10:42:43 -0400279 // Inline preference
Alexandre Savard3a46d922012-09-30 20:42:51 -0400280 PreferenceCategory accountBasicPrefCat = new PreferenceCategory(currentContext);
281 accountBasicPrefCat.setTitle(R.string.account_preferences_basic);
282 root.addPreference(accountBasicPrefCat);
Alexandre Savard9a93f062012-09-11 10:42:43 -0400283
Alexandre Savardae992932012-10-17 10:26:12 -0400284 for(AccountDetail.PreferenceEntry entry : basicDetailKeys)
Alexandre Savard9c966e32012-09-28 14:41:28 -0400285 {
Alexandre Savard8ef37c52012-10-01 10:48:14 -0400286 EditTextPreference accountPref = new EditTextPreference(currentContext);
287 accountPref.setDialogTitle(entry.mLabelId);
288 accountPref.setPersistent(false);
289 accountPref.setTitle(entry.mLabelId);
Alexandre Savard5261f822012-10-05 15:23:56 -0400290 accountPref.setSummary(getString(R.string.account_current_value_label) + map.get(entry.mKey));
Alexandre Savard8ef37c52012-10-01 10:48:14 -0400291 accountPref.setOnPreferenceChangeListener(changeBasicTextEditListener);
292 accountPref.setKey(accountID);
293 accountBasicPrefCat.addPreference(accountPref);
Alexandre Savard9c966e32012-09-28 14:41:28 -0400294 }
295
Alexandre Savard3a46d922012-09-30 20:42:51 -0400296 PreferenceCategory accountAdvancedPrefCat = new PreferenceCategory(currentContext);
297 accountAdvancedPrefCat.setTitle(R.string.account_preferences_advanced);
298 root.addPreference(accountAdvancedPrefCat);
299
Alexandre Savardae992932012-10-17 10:26:12 -0400300 for(AccountDetail.PreferenceEntry entry : advancedDetailKeys)
Alexandre Savard9c966e32012-09-28 14:41:28 -0400301 {
Alexandre Savard8ef37c52012-10-01 10:48:14 -0400302 EditTextPreference accountPref = new EditTextPreference(currentContext);
303 accountPref.setDialogTitle(entry.mLabelId);
304 accountPref.setPersistent(false);
305 accountPref.setTitle(entry.mLabelId);
Alexandre Savard5261f822012-10-05 15:23:56 -0400306 accountPref.setSummary(getString(R.string.account_current_value_label) + map.get(entry.mKey));
Alexandre Savard8ef37c52012-10-01 10:48:14 -0400307 accountPref.setOnPreferenceChangeListener(changeAdvancedTextEditListener);
308 accountPref.setKey(accountID);
309 accountAdvancedPrefCat.addPreference(accountPref);
Alexandre Savard9c966e32012-09-28 14:41:28 -0400310 }
Alexandre Savardae992932012-10-17 10:26:12 -0400311*/
312
Alexandre Savard9c966e32012-09-28 14:41:28 -0400313
Alexandre Savard9a93f062012-09-11 10:42:43 -0400314 return root;
315 }
Alexandre Savard9c966e32012-09-28 14:41:28 -0400316
Alexandre Savard2b370f02012-09-06 16:06:01 -0400317}