Implement account state change broadcast signal sender and receiver
diff --git a/src/com/savoirfairelinux/sflphone/client/AccountManagementFragment.java b/src/com/savoirfairelinux/sflphone/client/AccountManagementFragment.java
index 2975aae..2f71c51 100644
--- a/src/com/savoirfairelinux/sflphone/client/AccountManagementFragment.java
+++ b/src/com/savoirfairelinux/sflphone/client/AccountManagementFragment.java
@@ -32,8 +32,10 @@
 package com.savoirfairelinux.sflphone.client;
 
 import android.app.Activity;
+import android.content.BroadcastReceiver;
 import android.content.Context;
 import android.content.Intent;
+import android.content.IntentFilter;
 import android.preference.EditTextPreference;
 import android.preference.Preference;
 import android.preference.PreferenceCategory;
@@ -42,10 +44,13 @@
 import android.preference.ListPreference;
 import android.os.Bundle;
 import android.os.RemoteException;
+import android.support.v4.content.LocalBroadcastManager;
 import android.util.Log;
 import android.view.View;
 import android.widget.ArrayAdapter;
 import android.widget.ListView;
+
+import java.util.Set;
 import java.util.HashMap;
 import java.util.ArrayList;
 
@@ -76,6 +81,7 @@
     AccountDetailAdvanced advancedDetails;
     AccountDetailSrtp srtpDetails;
     AccountDetailTls tlsDetails;
+    PreferenceScreen mRoot;
 
     Activity context = getActivity();
 
@@ -102,6 +108,8 @@
         Log.i(TAG, "Create Account Management Fragment");
 
         setPreferenceScreen(getAccountListPreferenceScreen());
+
+        LocalBroadcastManager.getInstance(getActivity()).registerReceiver(mMessageReceiver, new IntentFilter("accounts-changed"));
     }
 
     @Override
@@ -128,10 +136,9 @@
     @Override
     public void onDestroy()
     {
+        LocalBroadcastManager.getInstance(getActivity()).unregisterReceiver(mMessageReceiver);
         super.onDestroy();
         Log.i(TAG, "onDestroy");
-
-        
     }
 
     @Override
@@ -140,6 +147,22 @@
         }
     }
 
+    private BroadcastReceiver mMessageReceiver = new BroadcastReceiver() {
+        @Override
+        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();
+            for(String s : newList) {
+                if(!currentList.contains(s)) {
+                    Log.i("receiver", "ADDING ACCOUNT!!!!!! " + s);
+                    mRoot.addPreference(getAccountPreferenceScreen(s));
+                }
+            }
+        }
+    };
+
 
     Preference.OnPreferenceChangeListener changeBasicTextEditListener = new Preference.OnPreferenceChangeListener() {
         public boolean onPreferenceChange(Preference preference, Object newValue) {
@@ -216,30 +239,30 @@
         ArrayList<String> accountList = getAccountList();
         // Log.i(TAG, "GetAccountList: " + mAccountList);
 
-        PreferenceScreen root = getPreferenceManager().createPreferenceScreen(currentContext);
+        mRoot = getPreferenceManager().createPreferenceScreen(currentContext);
 
         // Default account category
         PreferenceCategory defaultAccountCat = new PreferenceCategory(currentContext);
         defaultAccountCat.setTitle(R.string.default_account_category);
-        root.addPreference(defaultAccountCat);
+        mRoot.addPreference(defaultAccountCat);
 
-        root.addPreference(getAccountPreferenceScreen(DEFAULT_ACCOUNT_ID));
+        mRoot.addPreference(getAccountPreferenceScreen(DEFAULT_ACCOUNT_ID));
 
         // Account list category
         PreferenceCategory accountListCat = new PreferenceCategory(currentContext);
         accountListCat.setTitle(R.string.default_account_category);
-        root.addPreference(accountListCat);
+        mRoot.addPreference(accountListCat);
 
         Preference createNewAccount = new Preference(currentContext);
         createNewAccount.setTitle("Touch to Create New Account");
         createNewAccount.setOnPreferenceClickListener(launchAccountCreationOnClick);
         createNewAccount.setIntent(new Intent().setClass(getActivity(), AccountCreationActivity.class));
-        root.addPreference(createNewAccount);
+        mRoot.addPreference(createNewAccount);
 
         for(String s : accountList)
-            root.addPreference(getAccountPreferenceScreen(s));
+            mRoot.addPreference(getAccountPreferenceScreen(s));
          
-        return root;
+        return mRoot;
     }
 
     public PreferenceCategory createPreferenceSection(PreferenceScreen root, Context context, int titleId, ArrayList<AccountDetail.PreferenceEntry> detailEntries, 
diff --git a/src/com/savoirfairelinux/sflphone/service/ConfigurationManagerCallback.java b/src/com/savoirfairelinux/sflphone/service/ConfigurationManagerCallback.java
index b2c7e84..787447b 100644
--- a/src/com/savoirfairelinux/sflphone/service/ConfigurationManagerCallback.java
+++ b/src/com/savoirfairelinux/sflphone/service/ConfigurationManagerCallback.java
@@ -22,13 +22,29 @@
  */
 package com.savoirfairelinux.sflphone.service;
 
+import android.content.Context;
+import android.content.Intent;
+import android.support.v4.content.LocalBroadcastManager;
 import android.util.Log;
 
 public class ConfigurationManagerCallback extends ConfigurationCallback {
-    private static final String TAG = "ConfigurationManagerCallback"; 
+    private static final String TAG = "ConfigurationManagerCallback";
+    Context mContext; 
+
+    ConfigurationManagerCallback(Context context) {
+        mContext = context;
+    }
 
     @Override
     public void on_account_state_changed() {
         Log.i(TAG, "on_account_state_changed ninja!!!!!!!!!!!!!!");
+        sendAccountsChangedMessage();
+    }
+
+    private void sendAccountsChangedMessage() {
+        Log.d("sender", "Boradcasting message");
+        Intent intent = new Intent("accounts-changed");
+        intent.putExtra("message", "Accounts Changed");
+        LocalBroadcastManager.getInstance(mContext).sendBroadcast(intent);
     }
 }
diff --git a/src/com/savoirfairelinux/sflphone/service/SipService.java b/src/com/savoirfairelinux/sflphone/service/SipService.java
index ddf1614..14c39bf 100644
--- a/src/com/savoirfairelinux/sflphone/service/SipService.java
+++ b/src/com/savoirfairelinux/sflphone/service/SipService.java
@@ -60,6 +60,7 @@
     private ConfigurationManagerCallback configurationManagerCallback;
     private ManagerImpl managerImpl;
     private boolean isPjSipStackStarted = false;
+    
 
     /* Implement public interface for the service */
     private final ISipService.Stub mBinder = new ISipService.Stub() {
@@ -372,7 +373,7 @@
         SFLPhoneservice.setCallbackObject(callManagerCallBack);
 
         configurationManagerJNI = new ConfigurationManagerJNI();
-        configurationManagerCallback = new ConfigurationManagerCallback();
+        configurationManagerCallback = new ConfigurationManagerCallback(this);
         SFLPhoneservice.setConfigurationCallbackObject(configurationManagerCallback);
 
         managerImpl.init("");