#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:
diff --git a/src/com/savoirfairelinux/sflphone/service/ConfigurationManagerCallback.java b/src/com/savoirfairelinux/sflphone/service/ConfigurationManagerCallback.java
index cea5732..ab9fbbf 100644
--- a/src/com/savoirfairelinux/sflphone/service/ConfigurationManagerCallback.java
+++ b/src/com/savoirfairelinux/sflphone/service/ConfigurationManagerCallback.java
@@ -31,6 +31,10 @@
private static final String TAG = "ConfigurationManagerCallback";
private Context mContext;
+ static public final String SIGNAL_NAME = "signal-name";
+ static public final String ACCOUNTS_CHANGED = "accounts-changed";
+ static public final String ACCOUNT_STATE_CHANGED = "account-state-changed";
+
public ConfigurationManagerCallback(Context context) {
mContext = context;
}
@@ -41,9 +45,18 @@
}
private void sendAccountsChangedMessage() {
- Log.d("sender", "Boradcasting message");
- Intent intent = new Intent("accounts-changed");
+ Log.d(TAG, "Broadcast Accounts Changed signal");
+ Intent intent = new Intent(ACCOUNTS_CHANGED);
+ intent.putExtra(SIGNAL_NAME, ACCOUNTS_CHANGED);
intent.putExtra("message", "Accounts Changed");
LocalBroadcastManager.getInstance(mContext).sendBroadcast(intent);
}
+
+ private void sendAccountStateChangedMessage() {
+ Log.d(TAG, "Broadcast Account State Changed signal");
+ Intent intent = new Intent(ACCOUNT_STATE_CHANGED);
+ intent.putExtra(SIGNAL_NAME, ACCOUNTS_CHANGED);
+ intent.putExtra("message", "Account State Changed");
+ LocalBroadcastManager.getInstance(mContext).sendBroadcast(intent);
+ }
}
diff --git a/src/com/savoirfairelinux/sflphone/utils/AccountList.java b/src/com/savoirfairelinux/sflphone/utils/AccountList.java
index 27604c5..016c049 100644
--- a/src/com/savoirfairelinux/sflphone/utils/AccountList.java
+++ b/src/com/savoirfairelinux/sflphone/utils/AccountList.java
@@ -31,13 +31,94 @@
package com.savoirfairelinux.sflphone.utils;
-public class AccountList
+import android.content.BroadcastReceiver;
+import android.content.Intent;
+import android.content.Context;
+import android.os.RemoteException;
+import android.util.Log;
+
+import java.util.ArrayList;
+
+import com.savoirfairelinux.sflphone.service.ConfigurationManagerCallback;
+import com.savoirfairelinux.sflphone.service.ISipService;
+
+public class AccountList extends BroadcastReceiver
{
static final String TAG = "AccountList";
- public String currentAccountID = "Account:1345153770";
+ private String currentAccountID = "";
+ private ArrayList<String> mList = new ArrayList<String>();
+ private ArrayList<AccountManagementUI> mUserInterfaceList = new ArrayList<AccountManagementUI>();
+ private ISipService mService;
// private HashMap<String, AccountPreferenceScreen> mAccountList = new HashMap<String, AccountPreferenceScreen>();
- public AccountList() {
+ public static final String DEFAULT_ACCOUNT_ID = "IP2IP";
+ public AccountList() {
+ }
+
+ public void setSipService(ISipService service) {
+ mService = service;
+ mList = getAccountListFromService();
+ }
+
+
+ public void addManagementUI(AccountManagementUI ui) {
+ mUserInterfaceList.add(ui);
+ }
+
+ @Override
+ public void onReceive(Context context, Intent intent)
+ {
+ String signalName = intent.getStringExtra(ConfigurationManagerCallback.SIGNAL_NAME);
+ Log.d(TAG, "Signal received: " + signalName);
+
+ if(signalName.equals(ConfigurationManagerCallback.ACCOUNTS_CHANGED)) {
+ processAccountsChangedSignal(intent);
+ } else if(signalName.equals(ConfigurationManagerCallback.ACCOUNT_STATE_CHANGED)) {
+ processAccountStateChanged(intent);
+ }
+ }
+
+ private ArrayList<String> getAccountListFromService() {
+ ArrayList<String> list = null;
+
+ try {
+ list = (ArrayList<String>)mService.getAccountList();
+ }
+ catch (RemoteException e) {
+ Log.e(TAG, "Remote exception", e);
+ }
+
+ list.remove(DEFAULT_ACCOUNT_ID);
+
+ return list;
+ }
+
+
+ private void processAccountsChangedSignal(Intent intent) {
+ ArrayList<String> newList = getAccountListFromService();
+
+ Log.i(TAG, "Process AccountsChanged signal in AccountList");
+
+ newList.remove(DEFAULT_ACCOUNT_ID);
+
+ if(!mUserInterfaceList.isEmpty()) {
+
+ if(newList.size() > mList.size()) {
+ for(AccountManagementUI ui : mUserInterfaceList) {
+ Log.i(TAG, "UPDATE UI");
+ ui.accountAdded(newList);
+ }
+ }
+ } else {
+ Log.i(TAG, "UI LIST IS EMPTY");
+ }
+
+ mList = newList;
+ }
+
+ private void processAccountStateChanged(Intent intent) {
+ if(!mUserInterfaceList.isEmpty()) {
+ }
}
}
diff --git a/src/com/savoirfairelinux/sflphone/utils/AccountSelectionButton.java b/src/com/savoirfairelinux/sflphone/utils/AccountSelectionButton.java
index 01b99a7..1049ed8 100644
--- a/src/com/savoirfairelinux/sflphone/utils/AccountSelectionButton.java
+++ b/src/com/savoirfairelinux/sflphone/utils/AccountSelectionButton.java
@@ -42,56 +42,56 @@
import java.util.ArrayList;
-public class AccountSelectionButton extends Button
+public class AccountSelectionButton extends Button implements AccountManagementUI
{
private static final String TAG = "AccountSelectionButton";
private ISipService mService;
private Context mContext;
+ private ArrayList<String> mList = new ArrayList<String>();
public AccountSelectionButton(Context context) {
super(context);
+ mContext = context;
+ init();
}
public AccountSelectionButton(Context context, AttributeSet attrs) {
super(context, attrs);
+ mContext = context;
+ init();
}
public AccountSelectionButton(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
+ mContext = context;
+ init();
}
- public void setSipService(ISipService service, Context context) {
- mService = service;
- mContext = context;
+ private void init() {
final AccountSelectionButton b = this;
- ArrayList<String> list = getAccountList();
- if(list.size() > 1) {
- list.remove("IP2IP");
- setText(list.get(0));
- } else {
- setText("IP2IP");
- }
-
setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
- ArrayList<String> list = getAccountList();
- AccountSelectionDialog accountSelectionDialog = new AccountSelectionDialog(mContext, list, b);
+ AccountSelectionDialog accountSelectionDialog = new AccountSelectionDialog(mContext, mList, b);
accountSelectionDialog.show();
}
});
}
- public ArrayList<String> getAccountList() {
- ArrayList<String> list = null;
+ public void accountAdded(ArrayList<String> newList) {
+ Log.i(TAG, "Account added");
+ mList = newList;
- try {
- list = (ArrayList<String>)mService.getAccountList();
+ if(newList.size() == 1) {
+ setText(newList.get(0));
}
- catch (RemoteException e) {
- Log.e(TAG, "Remote exception", e);
- }
+ }
- return list;
+ public void accountRemoved() {
+
+ }
+
+ public void accountUpdated() {
+
}
}