Skip to content
Snippets Groups Projects
Commit bb6f1875 authored by Alexandre Savard's avatar Alexandre Savard
Browse files

#17195: Add AccountList class to manage account list and propagate account status

parent a76fa3d2
No related branches found
No related tags found
No related merge requests found
......@@ -68,6 +68,7 @@ import java.util.ArrayList;
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 @@ public class CallElementList extends ListFragment implements LoaderManager.Loade
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 class CallElementList extends ListFragment implements LoaderManager.Loade
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 @@ public class CallElementList extends ListFragment implements LoaderManager.Loade
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;
}
......
......@@ -78,6 +78,8 @@ import java.util.ArrayList;
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 @@ public class ContactListFragment extends ListFragment implements OnQueryTextList
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 @@ public class ContactListFragment extends ListFragment implements OnQueryTextList
service = s;
}
public void setAccountList(AccountList accountList) {
mAccountList = accountList;
}
@Override
public void onActivityCreated(Bundle savedInstanceState)
{
......@@ -270,6 +278,8 @@ public class ContactListFragment extends ListFragment implements OnQueryTextList
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;
}
......
......@@ -72,6 +72,7 @@ import com.savoirfairelinux.sflphone.service.ISipService;
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 @@ public class SFLPhoneHome extends Activity implements ActionBar.TabListener, OnC
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 @@ public class SFLPhoneHome extends Activity implements ActionBar.TabListener, OnC
mBound = true;
mContactListFragment.setService(service);
mCallElementList.setService(service);
mAccountList.setSipService(service);
Log.d(TAG, "Service connected");
}
......@@ -357,11 +362,13 @@ public class SFLPhoneHome extends Activity implements ActionBar.TabListener, OnC
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:
......
......@@ -31,6 +31,10 @@ public class ConfigurationManagerCallback extends ConfigurationCallback {
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 @@ public class ConfigurationManagerCallback extends ConfigurationCallback {
}
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);
}
}
......@@ -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 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()) {
}
}
}
......@@ -42,56 +42,56 @@ import com.savoirfairelinux.sflphone.service.ISipService;
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();
}
catch (RemoteException e) {
Log.e(TAG, "Remote exception", e);
if(newList.size() == 1) {
setText(newList.get(0));
}
}
public void accountRemoved() {
}
public void accountUpdated() {
return list;
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment