From 833616f7e35fa016e2ad8f29c93f88569b8a2743 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandre.savard@savoirfairelinux.com> Date: Tue, 30 Oct 2012 16:02:30 -0400 Subject: [PATCH] #17105 AccountPreferenceActivity should not bind to SipService, add preference in Intent's bundle instead --- .../client/AccountManagementFragment.java | 147 +++++------------- .../client/AccountPreferenceActivity.java | 62 ++++---- .../client/SFLPhonePreferenceActivity.java | 21 +-- .../sflphone/utils/AccountDetail.java | 5 + .../sflphone/utils/AccountDetailAdvanced.java | 16 ++ .../sflphone/utils/AccountDetailBasic.java | 17 ++ .../sflphone/utils/AccountDetailSrtp.java | 17 ++ .../sflphone/utils/AccountDetailTls.java | 16 ++ 8 files changed, 152 insertions(+), 149 deletions(-) diff --git a/src/com/savoirfairelinux/sflphone/client/AccountManagementFragment.java b/src/com/savoirfairelinux/sflphone/client/AccountManagementFragment.java index 4cfa8a7e6..52c6430e8 100644 --- a/src/com/savoirfairelinux/sflphone/client/AccountManagementFragment.java +++ b/src/com/savoirfairelinux/sflphone/client/AccountManagementFragment.java @@ -75,8 +75,6 @@ public class AccountManagementFragment extends PreferenceFragment static final int ACCOUNT_EDIT_REQUEST = 2; private ISipService service; - // 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; @@ -112,20 +110,6 @@ public class AccountManagementFragment extends PreferenceFragment { super.onStop(); Log.i(TAG, "onStop"); - - ArrayList<String> accountList = getAccountList(); - - try { - for(String s : accountList) { - Log.i(TAG, " set details for " + s); - AccountPreferenceScreen accountPref = mAccountList.get(s); - if(accountPref != null) { - service.setAccountDetails(s, accountPref.preferenceMap); - } - } - } catch (RemoteException e) { - Log.e(TAG, "Cannot call service method", e); - } } @Override @@ -147,6 +131,23 @@ public class AccountManagementFragment extends PreferenceFragment Bundle bundle = data.getExtras(); String accountID = bundle.getString("AccountID"); Log.i(TAG, "Update account settings for " + accountID); + + AccountDetailBasic basicDetails = + new AccountDetailBasic(bundle.getStringArrayList(AccountDetailBasic.BUNDLE_TAG)); + AccountDetailAdvanced advancedDetails = + new AccountDetailAdvanced(bundle.getStringArrayList(AccountDetailAdvanced.BUNDLE_TAG)); + AccountDetailSrtp srtpDetails = + new AccountDetailSrtp(bundle.getStringArrayList(AccountDetailSrtp.BUNDLE_TAG)); + AccountDetailTls tlsDetails = + new AccountDetailTls(bundle.getStringArrayList(AccountDetailTls.BUNDLE_TAG)); + + HashMap<String, String> map = new HashMap<String, String>(); + map.putAll(basicDetails.getDetailsHashMap()); + map.putAll(advancedDetails.getDetailsHashMap()); + map.putAll(srtpDetails.getDetailsHashMap()); + map.putAll(tlsDetails.getDetailsHashMap()); + + setAccountDetails(accountID, map); } break; default: @@ -159,6 +160,7 @@ public class AccountManagementFragment extends PreferenceFragment public void onReceive(Context context, Intent intent) { String message = intent.getStringExtra("message"); Log.d("receiver", "Got message: " + message); + /* ArrayList<String> newList = (ArrayList<String>) getAccountList(); Set<String> currentList = (Set<String>) mAccountList.keySet(); currentList.remove(DEFAULT_ACCOUNT_ID); @@ -179,27 +181,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); - AccountPreferenceScreen accountPreference = mAccountList.get(preference.getKey()); - String preferenceKey = basicDetailKeys.get(preference.getOrder()).mKey; - accountPreference.preferenceMap.put(preferenceKey, ((CharSequence)newValue).toString()); - if(preferenceKey == AccountDetailBasic.CONFIG_ACCOUNT_ALIAS) - accountPreference.mScreen.setTitle(((CharSequence)newValue.toString())); - return true; - } - }; - - 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()).preferenceMap.put(advancedDetailKeys.get(preference.getOrder()).mKey, ((CharSequence)newValue).toString()); - return true; + */ } }; @@ -239,6 +221,24 @@ public class AccountManagementFragment extends PreferenceFragment { Log.i(TAG, "Launch account edit activity"); Intent intent = preference.getIntent(); + + Bundle bundle = intent.getExtras(); + String accountID = bundle.getString("AccountID"); + + HashMap<String, String> preferenceMap = getAccountDetails(accountID); + + AccountDetailBasic basicDetails = new AccountDetailBasic(preferenceMap); + AccountDetailAdvanced advancedDetails = new AccountDetailAdvanced(preferenceMap); + AccountDetailSrtp srtpDetails = new AccountDetailSrtp(preferenceMap); + AccountDetailTls tlsDetails = new AccountDetailTls(preferenceMap); + + bundle.putStringArrayList(AccountDetailBasic.BUNDLE_TAG, basicDetails.getValuesOnly()); + bundle.putStringArrayList(AccountDetailAdvanced.BUNDLE_TAG, advancedDetails.getValuesOnly()); + bundle.putStringArrayList(AccountDetailSrtp.BUNDLE_TAG, srtpDetails.getValuesOnly()); + bundle.putStringArrayList(AccountDetailTls.BUNDLE_TAG, tlsDetails.getValuesOnly()); + + intent.putExtras(bundle); + startActivityForResult(intent, ACCOUNT_EDIT_REQUEST); } @@ -291,9 +291,6 @@ public class AccountManagementFragment extends PreferenceFragment { Activity currentContext = getActivity(); - ArrayList<String> accountList = getAccountList(); - // Log.i(TAG, "GetAccountList: " + mAccountList); - mRoot = getPreferenceManager().createPreferenceScreen(currentContext); // Default account category @@ -314,6 +311,7 @@ public class AccountManagementFragment extends PreferenceFragment createNewAccount.setIntent(new Intent().setClass(getActivity(), AccountCreationActivity.class)); mRoot.addPreference(createNewAccount); + ArrayList<String> accountList = getAccountList(); for(String s : accountList) { // mRoot.addPreference(getAccountPreferenceScreen(s)); mRoot.addPreference(createAccountPreferenceScreen(s)); @@ -324,19 +322,8 @@ public class AccountManagementFragment extends PreferenceFragment Preference createAccountPreferenceScreen(String accountID) { - HashMap<String, String> preferenceMap = getAccountDetails(accountID); - - AccountDetailBasic basicDetails = new AccountDetailBasic(preferenceMap); - AccountDetailAdvanced advancedDetails = new AccountDetailAdvanced(preferenceMap); - AccountDetailSrtp srtpDetails = new AccountDetailSrtp(preferenceMap); - AccountDetailTls tlsDetails = new AccountDetailTls(preferenceMap); - Bundle bundle = new Bundle(); bundle.putString("AccountID", accountID); - bundle.putStringArrayList(AccountDetailBasic.BUNDLE_TAG, basicDetails.getValuesOnly()); - bundle.putStringArrayList(AccountDetailAdvanced.BUNDLE_TAG, advancedDetails.getValuesOnly()); - bundle.putStringArrayList(AccountDetailSrtp.BUNDLE_TAG, srtpDetails.getValuesOnly()); - bundle.putStringArrayList(AccountDetailTls.BUNDLE_TAG, tlsDetails.getValuesOnly()); Intent intent = new Intent().setClass(getActivity(), AccountPreferenceActivity.class); intent.putExtras(bundle); @@ -348,62 +335,4 @@ public class AccountManagementFragment extends PreferenceFragment return editAccount; } - - /* - AccountPreferenceScreen createAccountPreferenceScreen(String accountID) { - AccountPreferenceScreen preference = new AccountPreferenceScreen(getPreferenceManager(), getActivity(), accountID); - mAccountList.put(accountID, preference); - - return preference; - } - */ - - private class AccountPreferenceScreen - { - public PreferenceScreen mScreen; - public HashMap<String, String> preferenceMap; - - public AccountPreferenceScreen(PreferenceManager prefManager, Context context, String accountID) - { - mScreen = prefManager.createPreferenceScreen(context); - preferenceMap = getAccountDetails(accountID); - - mScreen.setTitle(preferenceMap.get(ServiceConstants.CONFIG_ACCOUNT_ALIAS)); - - if(accountID != DEFAULT_ACCOUNT_ID) { - Preference deleteThisAccount = new Preference(context); - deleteThisAccount.setTitle("Delete Account"); - deleteThisAccount.setKey(accountID); - deleteThisAccount.setOnPreferenceClickListener(removeSelectedAccountOnClick); - deleteThisAccount.setIntent(new Intent().setClass(getActivity(), AccountCreationActivity.class)); - mScreen.addPreference(deleteThisAccount); - } - - 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); - } - - 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); - } - } - } } diff --git a/src/com/savoirfairelinux/sflphone/client/AccountPreferenceActivity.java b/src/com/savoirfairelinux/sflphone/client/AccountPreferenceActivity.java index 5703f5f78..b53adf529 100644 --- a/src/com/savoirfairelinux/sflphone/client/AccountPreferenceActivity.java +++ b/src/com/savoirfairelinux/sflphone/client/AccountPreferenceActivity.java @@ -66,17 +66,23 @@ public class AccountPreferenceActivity extends PreferenceActivity public static final int ACCOUNT_MODIFIED = Activity.RESULT_FIRST_USER + 0; public static final int ACCOUNT_NOT_MODIFIED = Activity.RESULT_FIRST_USER + 1; - private AccountDetailBasic basicDetails; - private AccountDetailAdvanced advancedDetails; - private AccountDetailSrtp srtpDetails; - private AccountDetailTls tlsDetails; + private AccountDetailBasic basicDetails = null; + private AccountDetailAdvanced advancedDetails = null; + private AccountDetailSrtp srtpDetails = null; + private AccountDetailTls tlsDetails = null; private PreferenceManager mPreferenceManager; private HashMap<String, String> mPreferenceMap; private String mAccountID; - Preference.OnPreferenceChangeListener changeNewAccountPreferenceListener = new Preference.OnPreferenceChangeListener() { + Preference.OnPreferenceChangeListener changeBasicPreferenceListener = new Preference.OnPreferenceChangeListener() { public boolean onPreferenceChange(Preference preference, Object newValue) { - preference.setSummary(getString(R.string.account_current_value_label) + (CharSequence)newValue); + preference.setSummary(getString(R.string.account_current_value_label)+(CharSequence)newValue); + + // String preferenceKey = basicDetailKeys.get(preference.getOrder()).mKey; + // accountPreference.preferenceMap.put(preferenceKey, ((CharSequence)newValue).toString()); + basicDetails.setDetailString(preference.getOrder(), ((CharSequence)newValue).toString()); + // if(preferenceKey == AccountDetailBasic.CONFIG_ACCOUNT_ALIAS) + // accountPreference.mScreen.setTitle(((CharSequence)newValue.toString())); return true; } }; @@ -87,12 +93,7 @@ public class AccountPreferenceActivity extends PreferenceActivity } }; - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - - addPreferencesFromResource(R.xml.account_creation_preferences); - mPreferenceManager = getPreferenceManager(); + private void init() { Bundle b = getIntent().getExtras(); mAccountID = b.getString("AccountID"); @@ -107,6 +108,14 @@ public class AccountPreferenceActivity extends PreferenceActivity tlsDetails = new AccountDetailTls(tlsPreferenceList); setPreferenceDetails(basicDetails); + setPreferenceDetails(advancedDetails); + setPreferenceDetails(srtpDetails); + setPreferenceDetails(tlsDetails); + + addPreferenceListener(basicDetails); + addPreferenceListener(advancedDetails); + addPreferenceListener(srtpDetails); + addPreferenceListener(tlsDetails); } private void setPreferenceDetails(AccountDetail details) { @@ -127,37 +136,30 @@ public class AccountPreferenceActivity extends PreferenceActivity Preference pref = mPreferenceManager.findPreference(p.mKey); if(pref != null) { if(!p.isTwoState) { - pref.setOnPreferenceChangeListener(changeNewAccountPreferenceListener); + pref.setOnPreferenceChangeListener(changeBasicPreferenceListener); } } } } + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + addPreferencesFromResource(R.xml.account_creation_preferences); + mPreferenceManager = getPreferenceManager(); + + init(); + } + @Override protected void onStart() { super.onStart(); - - addPreferenceListener(basicDetails); - addPreferenceListener(advancedDetails); - addPreferenceListener(srtpDetails); - addPreferenceListener(tlsDetails); } @Override protected void onStop() { super.onStop(); - - Bundle bundle = new Bundle(); - bundle.putString("AccountID", mAccountID); - bundle.putStringArrayList(AccountDetailBasic.BUNDLE_TAG, basicDetails.getValuesOnly()); - bundle.putStringArrayList(AccountDetailAdvanced.BUNDLE_TAG, advancedDetails.getValuesOnly()); - bundle.putStringArrayList(AccountDetailSrtp.BUNDLE_TAG, srtpDetails.getValuesOnly()); - bundle.putStringArrayList(AccountDetailTls.BUNDLE_TAG, tlsDetails.getValuesOnly()); - - Intent resultIntent = new Intent(); - resultIntent.putExtras(bundle); - - setResult(ACCOUNT_MODIFIED, resultIntent); } @Override diff --git a/src/com/savoirfairelinux/sflphone/client/SFLPhonePreferenceActivity.java b/src/com/savoirfairelinux/sflphone/client/SFLPhonePreferenceActivity.java index 6980f8c1c..42b5eb13f 100644 --- a/src/com/savoirfairelinux/sflphone/client/SFLPhonePreferenceActivity.java +++ b/src/com/savoirfairelinux/sflphone/client/SFLPhonePreferenceActivity.java @@ -134,32 +134,33 @@ public class SFLPhonePreferenceActivity extends Activity implements ActionBar.Ta actionBar.addTab(actionBar.newTab().setText(mPreferencesPagerAdapter.getPageTitle(i)).setTabListener(this)); } - + if(!mBound) { + Log.i(TAG, "onStart: Binding service..."); + Intent intent = new Intent(this, SipService.class); + bindService(intent, mConnection, Context.BIND_AUTO_CREATE); + } } @Override protected void onStart() { Log.i(TAG, "onStart"); super.onStart(); - if(!mBound) { - Log.i(TAG, "onStart: Binding service..."); - Intent intent = new Intent(this, SipService.class); - bindService(intent, mConnection, Context.BIND_AUTO_CREATE); - } } @Override protected void onStop() { super.onStop(); - if(mBound) { - unbindService(mConnection); - mBound = false; - } } @Override protected void onDestroy() { Log.i(TAG, "onDestroy: stopping SipService..."); + + if(mBound) { + unbindService(mConnection); + mBound = false; + } + stopService(new Intent(this, SipService.class)); serviceIsOn = false; super.onDestroy(); diff --git a/src/com/savoirfairelinux/sflphone/utils/AccountDetail.java b/src/com/savoirfairelinux/sflphone/utils/AccountDetail.java index 86519b96e..a133e975f 100644 --- a/src/com/savoirfairelinux/sflphone/utils/AccountDetail.java +++ b/src/com/savoirfairelinux/sflphone/utils/AccountDetail.java @@ -27,6 +27,7 @@ import com.savoirfairelinux.sflphone.service.ServiceConstants; import com.savoirfairelinux.sflphone.service.StringMap; import java.util.ArrayList; +import java.util.HashMap; public interface AccountDetail { @@ -66,8 +67,12 @@ public interface AccountDetail { public ArrayList<String> getValuesOnly(); + public HashMap<String, String> getDetailsHashMap(); + public String getDetailString(String key); + public void setDetailString(int position, String newValue); + public boolean getDetailBoolean(); } diff --git a/src/com/savoirfairelinux/sflphone/utils/AccountDetailAdvanced.java b/src/com/savoirfairelinux/sflphone/utils/AccountDetailAdvanced.java index 0faa79a9b..d3bace151 100644 --- a/src/com/savoirfairelinux/sflphone/utils/AccountDetailAdvanced.java +++ b/src/com/savoirfairelinux/sflphone/utils/AccountDetailAdvanced.java @@ -139,6 +139,17 @@ public class AccountDetailAdvanced implements AccountDetail { return valueList; } + public HashMap<String, String> getDetailsHashMap() + { + HashMap<String, String> map = new HashMap<String, String>(); + + for(AccountDetail.PreferenceEntry p : privateArray) { + map.put(p.mKey, p.mValue); + } + + return map; + } + public String getDetailString(String key) { String value = ""; @@ -153,6 +164,11 @@ public class AccountDetailAdvanced implements AccountDetail { return value; } + public void setDetailString(int position, String newValue) + { + privateArray.get(position).mValue = newValue; + } + public boolean getDetailBoolean() { return true; diff --git a/src/com/savoirfairelinux/sflphone/utils/AccountDetailBasic.java b/src/com/savoirfairelinux/sflphone/utils/AccountDetailBasic.java index 97e42e905..cb07474fc 100644 --- a/src/com/savoirfairelinux/sflphone/utils/AccountDetailBasic.java +++ b/src/com/savoirfairelinux/sflphone/utils/AccountDetailBasic.java @@ -113,6 +113,17 @@ public class AccountDetailBasic implements AccountDetail { return valueList; } + public HashMap<String, String> getDetailsHashMap() + { + HashMap<String, String> map = new HashMap<String, String>(); + + for(AccountDetail.PreferenceEntry p : privateArray) { + map.put(p.mKey, p.mValue); + } + + return map; + } + public String getDetailString(String key) { String value = ""; @@ -127,6 +138,12 @@ public class AccountDetailBasic implements AccountDetail { return value; } + public void setDetailString(int position, String newValue) + { + privateArray.get(position).mValue = newValue; + } + + public boolean getDetailBoolean() { return true; diff --git a/src/com/savoirfairelinux/sflphone/utils/AccountDetailSrtp.java b/src/com/savoirfairelinux/sflphone/utils/AccountDetailSrtp.java index d20541957..7cf814948 100644 --- a/src/com/savoirfairelinux/sflphone/utils/AccountDetailSrtp.java +++ b/src/com/savoirfairelinux/sflphone/utils/AccountDetailSrtp.java @@ -109,6 +109,17 @@ public class AccountDetailSrtp implements AccountDetail{ return valueList; } + public HashMap<String, String> getDetailsHashMap() + { + HashMap<String, String> map = new HashMap<String, String>(); + + for(AccountDetail.PreferenceEntry p : privateArray) { + map.put(p.mKey, p.mValue); + } + + return map; + } + public String getDetailString(String key) { String value = ""; @@ -123,6 +134,12 @@ public class AccountDetailSrtp implements AccountDetail{ return value; } + public void setDetailString(int position, String newValue) + { + privateArray.get(position).mValue = newValue; + } + + public boolean getDetailBoolean() { return true; diff --git a/src/com/savoirfairelinux/sflphone/utils/AccountDetailTls.java b/src/com/savoirfairelinux/sflphone/utils/AccountDetailTls.java index bd2d6e5eb..1bbd50481 100644 --- a/src/com/savoirfairelinux/sflphone/utils/AccountDetailTls.java +++ b/src/com/savoirfairelinux/sflphone/utils/AccountDetailTls.java @@ -121,6 +121,17 @@ public class AccountDetailTls implements AccountDetail { return valueList; } + public HashMap<String, String> getDetailsHashMap() + { + HashMap<String, String> map = new HashMap<String, String>(); + + for(AccountDetail.PreferenceEntry p : privateArray) { + map.put(p.mKey, p.mValue); + } + + return map; + } + public String getDetailString(String key) { String value = ""; @@ -135,6 +146,11 @@ public class AccountDetailTls implements AccountDetail { return value; } + public void setDetailString(int position, String newValue) + { + privateArray.get(position).mValue = newValue; + } + public boolean getDetailBoolean() { return true; -- GitLab