#17195: Add AccountList class to manage account list and propagate account status
diff --git a/src/com/savoirfairelinux/sflphone/client/CallElementList.java b/src/com/savoirfairelinux/sflphone/client/CallElementList.java
index e36882b..cb2f249 100644
--- a/src/com/savoirfairelinux/sflphone/client/CallElementList.java
+++ b/src/com/savoirfairelinux/sflphone/client/CallElementList.java
@@ -68,6 +68,7 @@
 import com.savoirfairelinux.sflphone.R;
 import com.savoirfairelinux.sflphone.service.ISipService;
 import com.savoirfairelinux.sflphone.utils.AccountSelectionButton;
+import com.savoirfairelinux.sflphone.utils.AccountList;
 
 /**
  * Main list of Call Elements.
@@ -83,6 +84,7 @@
     private SFLPhoneHome sflphoneHome;
     private ISipService service;
     private AccountSelectionButton mAccountSelectionButton;
+    private AccountList mAccountList;
 
     static final String[] CONTACTS_SUMMARY_PROJECTION = new String[] { Contacts._ID, Contacts.DISPLAY_NAME,
                                                                        Contacts.PHOTO_ID, Contacts.LOOKUP_KEY };
@@ -246,7 +248,10 @@
     public void setService(ISipService s)
     {
         service = s;
-        mAccountSelectionButton.setSipService(service, (Context)getActivity());
+    }
+
+    public void setAccountList(AccountList accountList) {
+        mAccountList = accountList;
     }
 
     public void addCall(SipCall c)
@@ -333,6 +338,7 @@
         View inflatedView = inflater.inflate(R.layout.call_element_list, container, false);
 
         mAccountSelectionButton = (AccountSelectionButton) inflatedView.findViewById(R.id.account_selection_button);
+        mAccountList.addManagementUI(mAccountSelectionButton);
 
         return inflatedView;
     }
diff --git a/src/com/savoirfairelinux/sflphone/client/ContactListFragment.java b/src/com/savoirfairelinux/sflphone/client/ContactListFragment.java
index d705ccb..2e870b9 100644
--- a/src/com/savoirfairelinux/sflphone/client/ContactListFragment.java
+++ b/src/com/savoirfairelinux/sflphone/client/ContactListFragment.java
@@ -78,6 +78,8 @@
 
 import com.savoirfairelinux.sflphone.R;
 import com.savoirfairelinux.sflphone.service.ISipService;
+import com.savoirfairelinux.sflphone.utils.AccountList;
+import com.savoirfairelinux.sflphone.utils.AccountSelectionButton;
 
 public class ContactListFragment extends ListFragment implements OnQueryTextListener, LoaderManager.LoaderCallbacks<Cursor>
 {
@@ -86,6 +88,8 @@
     Context mContext;
     String mCurFilter;
     private ISipService service;
+    private AccountSelectionButton mAccountSelectionButton;
+    private AccountList mAccountList;
 
     // These are the Contacts rows that we will retrieve.
     static final String[] CONTACTS_SUMMARY_PROJECTION = new String[] { Contacts._ID, Contacts.DISPLAY_NAME,
@@ -192,6 +196,10 @@
         service = s;
     }
 
+    public void setAccountList(AccountList accountList) {
+        mAccountList = accountList;
+    }
+
     @Override
     public void onActivityCreated(Bundle savedInstanceState)
     {
@@ -270,6 +278,8 @@
         View inflatedView = inflater.inflate(R.layout.call_element_list, container, false);
 
         // Button accountSelectionButton = (Button) inflatedView.findViewById(R.id.account_selection_button);
+        mAccountSelectionButton = (AccountSelectionButton) inflatedView.findViewById(R.id.account_selection_button);
+        mAccountList.addManagementUI(mAccountSelectionButton);
 
         return inflatedView;
     }
diff --git a/src/com/savoirfairelinux/sflphone/client/SFLPhoneHome.java b/src/com/savoirfairelinux/sflphone/client/SFLPhoneHome.java
index a3ead4b..8de08a2 100644
--- a/src/com/savoirfairelinux/sflphone/client/SFLPhoneHome.java
+++ b/src/com/savoirfairelinux/sflphone/client/SFLPhoneHome.java
@@ -72,6 +72,7 @@
 import com.savoirfairelinux.sflphone.service.SipService;
 import com.savoirfairelinux.sflphone.utils.AccountList;
 import com.savoirfairelinux.sflphone.utils.CallList;
+import com.savoirfairelinux.sflphone.utils.AccountList;
 
 import java.util.HashMap;
 
@@ -177,6 +178,9 @@
         LocalBroadcastManager.getInstance(this).registerReceiver(mCallList, new IntentFilter("call-state-changed"));
         LocalBroadcastManager.getInstance(this).registerReceiver(mCallList, new IntentFilter("incoming-call"));
 
+        LocalBroadcastManager.getInstance(this).registerReceiver(mAccountList, new IntentFilter("accounts-changed"));
+        LocalBroadcastManager.getInstance(this).registerReceiver(mAccountList, new IntentFilter("account-state-changed"));
+
         SipCall.setSFLPhoneHomeContext(this);
     }
 
@@ -236,6 +240,7 @@
             mBound = true;
             mContactListFragment.setService(service);
             mCallElementList.setService(service);
+            mAccountList.setSipService(service);
             Log.d(TAG, "Service connected");
         }
 
@@ -357,11 +362,13 @@
             switch (i) {
             case 0:
                 mContactListFragment = new ContactListFragment(service);
+                mContactListFragment.setAccountList(mAccountList);
                 fragment = mContactListFragment;
                 break;
             case 1:
                 mCallElementList = new CallElementList(service, mHome);
                 SipCall.setCallElementList(mCallElementList);
+                mCallElementList.setAccountList(mAccountList);
                 fragment = mCallElementList;
                 break;
             case 2: