#17105  AccountPreferenceActivity should not bind to SipService, add preference in Intent's bundle instead
diff --git a/src/com/savoirfairelinux/sflphone/client/AccountManagementFragment.java b/src/com/savoirfairelinux/sflphone/client/AccountManagementFragment.java
index 4cfa8a7..52c6430 100644
--- a/src/com/savoirfairelinux/sflphone/client/AccountManagementFragment.java
+++ b/src/com/savoirfairelinux/sflphone/client/AccountManagementFragment.java
@@ -75,8 +75,6 @@
     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 @@
     {
         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 @@
                     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 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 @@
                     }
                 }
             } 
-        }
-    };
-
-
-    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 @@
     {
         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 @@
     {
         Activity currentContext = getActivity();
 
-        ArrayList<String> accountList = getAccountList();
-        // Log.i(TAG, "GetAccountList: " + mAccountList);
-
         mRoot = getPreferenceManager().createPreferenceScreen(currentContext);
 
         // Default account category
@@ -314,6 +311,7 @@
         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 @@
 
     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 @@
         
         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 5703f5f..b53adf5 100644
--- a/src/com/savoirfairelinux/sflphone/client/AccountPreferenceActivity.java
+++ b/src/com/savoirfairelinux/sflphone/client/AccountPreferenceActivity.java
@@ -66,17 +66,23 @@
     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 @@
         }
     };
 
-    @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 @@
         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 @@
             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 6980f8c..42b5eb1 100644
--- a/src/com/savoirfairelinux/sflphone/client/SFLPhonePreferenceActivity.java
+++ b/src/com/savoirfairelinux/sflphone/client/SFLPhonePreferenceActivity.java
@@ -134,13 +134,6 @@
             actionBar.addTab(actionBar.newTab().setText(mPreferencesPagerAdapter.getPageTitle(i)).setTabListener(this));
         }
 
-        
-    }
-
-    @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);
@@ -149,17 +142,25 @@
     }
 
     @Override
+    protected void onStart() {
+        Log.i(TAG, "onStart");
+        super.onStart();
+    }
+
+    @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 86519b9..a133e97 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.StringMap;
 
 import java.util.ArrayList;
+import java.util.HashMap;
 
 public interface AccountDetail {
 
@@ -66,8 +67,12 @@
 
     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 0faa79a..d3bace1 100644
--- a/src/com/savoirfairelinux/sflphone/utils/AccountDetailAdvanced.java
+++ b/src/com/savoirfairelinux/sflphone/utils/AccountDetailAdvanced.java
@@ -139,6 +139,17 @@
         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 @@
         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 97e42e9..cb07474 100644
--- a/src/com/savoirfairelinux/sflphone/utils/AccountDetailBasic.java
+++ b/src/com/savoirfairelinux/sflphone/utils/AccountDetailBasic.java
@@ -113,6 +113,17 @@
         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 @@
         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 d205419..7cf8149 100644
--- a/src/com/savoirfairelinux/sflphone/utils/AccountDetailSrtp.java
+++ b/src/com/savoirfairelinux/sflphone/utils/AccountDetailSrtp.java
@@ -109,6 +109,17 @@
         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 @@
         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 bd2d6e5..1bbd504 100644
--- a/src/com/savoirfairelinux/sflphone/utils/AccountDetailTls.java
+++ b/src/com/savoirfairelinux/sflphone/utils/AccountDetailTls.java
@@ -121,6 +121,17 @@
         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 @@
         return value;
     }
 
+    public void setDetailString(int position, String newValue)
+    {
+        privateArray.get(position).mValue = newValue;
+    }
+
     public boolean getDetailBoolean()
     {
         return true;