diff --git a/src/com/savoirfairelinux/sflphone/client/AccountManagementFragment.java b/src/com/savoirfairelinux/sflphone/client/AccountManagementFragment.java index 2f71c51eb2e220a12f5b409be2ac055e2e07782c..a0c9c7ed34db6add77c9da1ac4230caa875932fd 100644 --- a/src/com/savoirfairelinux/sflphone/client/AccountManagementFragment.java +++ b/src/com/savoirfairelinux/sflphone/client/AccountManagementFragment.java @@ -42,6 +42,7 @@ import android.preference.PreferenceCategory; import android.preference.PreferenceFragment; import android.preference.PreferenceScreen; import android.preference.ListPreference; +import android.preference.PreferenceManager; import android.os.Bundle; import android.os.RemoteException; import android.support.v4.content.LocalBroadcastManager; @@ -72,7 +73,8 @@ public class AccountManagementFragment extends PreferenceFragment static final int ACCOUNT_CREATE_REQUEST = 1; private ISipService service; - HashMap<String,HashMap<String,String>> mAccountList = new HashMap<String,HashMap<String,String>>(); + // HashMap<String,HashMap<String,String>> mAccountList = new HashMap<String,HashMap<String,String>>(); + HashMap<String, AccountPreferenceScreen> mAccountList = new HashMap<String, AccountPreferenceScreen>(); ArrayList<AccountDetail.PreferenceEntry> basicDetailKeys; ArrayList<AccountDetail.PreferenceEntry> advancedDetailKeys; ArrayList<AccountDetail.PreferenceEntry> srtpDetailKeys; @@ -123,9 +125,9 @@ public class AccountManagementFragment extends PreferenceFragment try { for(String s : accountList) { Log.i(TAG, " set details for " + s); - HashMap<String, String> accountDetails = mAccountList.get(s); - if(accountDetails != null) { - service.setAccountDetails(s, accountDetails); + AccountPreferenceScreen accountPref = mAccountList.get(s); + if(accountPref != null) { + service.setAccountDetails(s, accountPref.preferenceMap); } } } catch (RemoteException e) { @@ -157,7 +159,7 @@ public class AccountManagementFragment extends PreferenceFragment for(String s : newList) { if(!currentList.contains(s)) { Log.i("receiver", "ADDING ACCOUNT!!!!!! " + s); - mRoot.addPreference(getAccountPreferenceScreen(s)); + mRoot.addPreference(createAccountPreferenceScreen(s).mScreen); } } } @@ -167,7 +169,7 @@ public class AccountManagementFragment extends PreferenceFragment Preference.OnPreferenceChangeListener changeBasicTextEditListener = new Preference.OnPreferenceChangeListener() { public boolean onPreferenceChange(Preference preference, Object newValue) { preference.setSummary(getString(R.string.account_current_value_label) + (CharSequence)newValue); - mAccountList.get(preference.getKey()).put(basicDetailKeys.get(preference.getOrder()).mKey, ((CharSequence)newValue).toString()); + mAccountList.get(preference.getKey()).preferenceMap.put(basicDetailKeys.get(preference.getOrder()).mKey, ((CharSequence)newValue).toString()); return true; } }; @@ -175,7 +177,7 @@ public class AccountManagementFragment extends PreferenceFragment Preference.OnPreferenceChangeListener changeAdvancedTextEditListener = new Preference.OnPreferenceChangeListener() { public boolean onPreferenceChange(Preference preference, Object newValue) { preference.setSummary(getString(R.string.account_current_value_label) + (CharSequence)newValue); - mAccountList.get(preference.getKey()).put(advancedDetailKeys.get(preference.getOrder()).mKey, ((CharSequence)newValue).toString()); + mAccountList.get(preference.getKey()).preferenceMap.put(advancedDetailKeys.get(preference.getOrder()).mKey, ((CharSequence)newValue).toString()); return true; } }; @@ -246,7 +248,7 @@ public class AccountManagementFragment extends PreferenceFragment defaultAccountCat.setTitle(R.string.default_account_category); mRoot.addPreference(defaultAccountCat); - mRoot.addPreference(getAccountPreferenceScreen(DEFAULT_ACCOUNT_ID)); + mRoot.addPreference(createAccountPreferenceScreen(DEFAULT_ACCOUNT_ID).mScreen); // Account list category PreferenceCategory accountListCat = new PreferenceCategory(currentContext); @@ -259,50 +261,58 @@ public class AccountManagementFragment extends PreferenceFragment createNewAccount.setIntent(new Intent().setClass(getActivity(), AccountCreationActivity.class)); mRoot.addPreference(createNewAccount); - for(String s : accountList) - mRoot.addPreference(getAccountPreferenceScreen(s)); + for(String s : accountList) { + // mRoot.addPreference(getAccountPreferenceScreen(s)); + mRoot.addPreference(createAccountPreferenceScreen(s).mScreen); + } return mRoot; } - public PreferenceCategory createPreferenceSection(PreferenceScreen root, Context context, int titleId, ArrayList<AccountDetail.PreferenceEntry> detailEntries, - String accountID, HashMap<String, String> map) - { - // Inline preference - PreferenceCategory accountPrefCat = new PreferenceCategory(context); - accountPrefCat.setTitle(titleId); - root.addPreference(accountPrefCat); + AccountPreferenceScreen createAccountPreferenceScreen(String accountID) { + AccountPreferenceScreen preference = new AccountPreferenceScreen(getPreferenceManager(), getActivity(), accountID); + mAccountList.put(accountID, preference); - for(AccountDetail.PreferenceEntry entry : detailEntries) - { - EditTextPreference accountPref = new EditTextPreference(context); - accountPref.setDialogTitle(entry.mLabelId); - accountPref.setPersistent(false); - accountPref.setTitle(entry.mLabelId); - accountPref.setSummary(getString(R.string.account_current_value_label) + map.get(entry.mKey)); - accountPref.setOnPreferenceChangeListener(changeBasicTextEditListener); - accountPref.setKey(accountID); - accountPrefCat.addPreference(accountPref); - } - - return accountPrefCat; + return preference; } - public PreferenceScreen getAccountPreferenceScreen(String accountID) + private class AccountPreferenceScreen { - Activity currentContext = getActivity(); + public PreferenceScreen mScreen; + public HashMap<String, String> preferenceMap; - HashMap<String,String> map = getAccountDetails(accountID); - mAccountList.put(accountID, map); + public AccountPreferenceScreen(PreferenceManager prefManager, Context context, String accountID) + { + mScreen = prefManager.createPreferenceScreen(context); + preferenceMap = getAccountDetails(accountID); - PreferenceScreen root = getPreferenceManager().createPreferenceScreen(currentContext); - root.setTitle(map.get(ServiceConstants.CONFIG_ACCOUNT_ALIAS)); + mScreen.setTitle(preferenceMap.get(ServiceConstants.CONFIG_ACCOUNT_ALIAS)); - createPreferenceSection(root, currentContext, R.string.account_preferences_basic, basicDetailKeys, accountID, map); - createPreferenceSection(root, currentContext, R.string.account_preferences_advanced, advancedDetailKeys, accountID, map); - createPreferenceSection(root, currentContext, R.string.account_preferences_srtp, srtpDetailKeys, accountID, map); - createPreferenceSection(root, currentContext, R.string.account_preferences_tls, tlsDetailKeys, accountID, map); + createPreferenceSection(mScreen, context, R.string.account_preferences_basic, basicDetailKeys, accountID, preferenceMap); + createPreferenceSection(mScreen, context, R.string.account_preferences_advanced, advancedDetailKeys, accountID, preferenceMap); + createPreferenceSection(mScreen, context, R.string.account_preferences_srtp, srtpDetailKeys, accountID, preferenceMap); + createPreferenceSection(mScreen, context, R.string.account_preferences_tls, tlsDetailKeys, accountID, preferenceMap); + } - return root; + public void createPreferenceSection(PreferenceScreen root, Context context, int titleId, ArrayList<AccountDetail.PreferenceEntry> detailEntries, + String accountID, HashMap<String, String> map) + { + // Inline preference + PreferenceCategory accountPrefCat = new PreferenceCategory(context); + accountPrefCat.setTitle(titleId); + root.addPreference(accountPrefCat); + + for(AccountDetail.PreferenceEntry entry : detailEntries) + { + EditTextPreference accountPref = new EditTextPreference(context); + accountPref.setDialogTitle(entry.mLabelId); + accountPref.setPersistent(false); + accountPref.setTitle(entry.mLabelId); + accountPref.setSummary(getString(R.string.account_current_value_label) + map.get(entry.mKey)); + accountPref.setOnPreferenceChangeListener(changeBasicTextEditListener); + accountPref.setKey(accountID); + accountPrefCat.addPreference(accountPref); + } + } } }