Skip to content
Snippets Groups Projects
Commit a4325153 authored by alision's avatar alision
Browse files

Added custom adapter for AccountSelectionSpinner and async details loading

parent d9e29446
No related branches found
No related tags found
No related merge requests found
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<TextView
android:id="@+id/account_alias"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:textAppearance="?android:attr/textAppearanceLarge" />
<TextView
android:id="@+id/account_host"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_below="@+id/account_alias"
android:textAppearance="?android:attr/textAppearanceSmall" />
<RadioButton
android:id="@+id/account_checked"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:focusable="false"
android:clickable="false"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"/>
</RelativeLayout>
\ No newline at end of file
......@@ -32,23 +32,26 @@ package com.savoirfairelinux.sflphone.account;
import java.util.ArrayList;
import com.savoirfairelinux.sflphone.client.receiver.AccountListReceiver;
import android.content.Context;
import android.util.AttributeSet;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.RadioButton;
import android.widget.Spinner;
import android.widget.TextView;
import com.savoirfairelinux.sflphone.R;
import com.savoirfairelinux.sflphone.adapters.AccountSelectionAdapter;
import com.savoirfairelinux.sflphone.client.receiver.AccountListReceiver;
import com.savoirfairelinux.sflphone.service.ISipService;
public class AccountSelectionSpinner extends Spinner implements AccountManagementUI {
private static final String TAG = "AccountSelectionButton";
private static final String TAG = AccountSelectionSpinner.class.getSimpleName();
public static final String DEFAULT_ACCOUNT_ID = "IP2IP";
private Context mContext;
private ArrayList<String> mList = new ArrayList<String>();
private AccountListReceiver mAccountList = null;
ArrayAdapter mListAdapter;
AccountSelectionAdapter mAdapter;
ISipService serviceRef;
public AccountSelectionSpinner(Context context) {
super(context);
......@@ -60,27 +63,26 @@ public class AccountSelectionSpinner extends Spinner implements AccountManagemen
super(context, attrs);
mContext = context;
}
public AccountSelectionSpinner(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
mContext = context;
mListAdapter = new ArrayAdapter(mContext, android.R.layout.simple_expandable_list_item_1, mList.toArray());
setOnItemSelectedListener(onClick);
setAdapter(mListAdapter);
}
private AdapterView.OnItemSelectedListener onClick = new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> arg0, View view, int arg2, long arg3) {
public void onItemSelected(AdapterView<?> arg0, View view, int pos, long arg3) {
// public void onClick(DialogInterface dialog, int which) {
Log.i(TAG, "Selected Account: " + ((TextView) view).getText());
// mButton.setText(((TextView)view).getText());
accountSelectedNotifyAccountList(((TextView) view).getText().toString());
Log.i(TAG, "Selected Account: " + mAdapter.getItem(pos));
if (null != view) {
((RadioButton) view.findViewById(R.id.account_checked)).toggle();
}
mAdapter.setSelectedAccount(pos);
accountSelectedNotifyAccountList(mAdapter.getItem(pos));
// setSelection(cursor.getPosition(),true);
}
......@@ -93,16 +95,23 @@ public class AccountSelectionSpinner extends Spinner implements AccountManagemen
};
public void populate(ISipService service, ArrayList<String> accountList) {
Log.i(TAG, "populate");
serviceRef = service;
mAdapter = new AccountSelectionAdapter(mContext, serviceRef, accountList);
setOnItemSelectedListener(onClick);
setAdapter(mAdapter);
}
/****************************************
* AccountManagementUI Interface
****************************************/
@Override
public void setAccountList(AccountListReceiver accountList) {
Log.i(TAG,"setAccountList");
Log.i(TAG, "setAccountList");
mAccountList = accountList;
}
@Override
......@@ -115,16 +124,15 @@ public class AccountSelectionSpinner extends Spinner implements AccountManagemen
@Override
public void setSelectedAccount(String accountID) {
Log.i(TAG,"Account Selected");
Log.i(TAG, "Account Selected");
// setText(accountID);
}
@Override
public void accountAdded(ArrayList<String> newList) {
mListAdapter = new ArrayAdapter(mContext, android.R.layout.simple_expandable_list_item_1, newList.toArray());
mAdapter = new AccountSelectionAdapter(mContext, serviceRef, newList);
setOnItemSelectedListener(onClick);
setAdapter(mListAdapter);
setAdapter(mAdapter);
// Log.i(TAG, "Account added");
// mList = newList;
//
......@@ -135,11 +143,12 @@ public class AccountSelectionSpinner extends Spinner implements AccountManagemen
@Override
public void accountRemoved() {
Log.i(TAG,"Account Removed");
Log.i(TAG, "Account Removed");
}
@Override
public void accountUpdated() {
Log.i(TAG,"Account Updated");
Log.i(TAG, "Account Updated");
}
}
package com.savoirfairelinux.sflphone.adapters;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Stack;
import android.app.Activity;
import android.content.Context;
import android.net.Uri;
import android.os.RemoteException;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.RadioButton;
import android.widget.TextView;
import com.savoirfairelinux.sflphone.R;
import com.savoirfairelinux.sflphone.account.AccountDetailBasic;
import com.savoirfairelinux.sflphone.service.ISipService;
public class AccountSelectionAdapter extends BaseAdapter {
private static final String TAG = AccountSelectionAdapter.class.getSimpleName();
ArrayList<String> accountIDs;
Context mContext;
AccountManager accManager;
ISipService service;
int selectedAccount = 0;
public AccountSelectionAdapter(Context cont, ISipService s, ArrayList<String> newList) {
super();
accountIDs = newList;
mContext = cont;
service = s;
accManager = new AccountManager(mContext);
}
@Override
public int getCount() {
return accountIDs.size();
}
@Override
public String getItem(int pos) {
return accountIDs.get(pos);
}
@Override
public long getItemId(int pos) {
return 0;
}
@Override
public View getView(int pos, View convertView, ViewGroup parent) {
View rowView = convertView;
AccountView entryView = null;
if (rowView == null) {
LayoutInflater inflater = LayoutInflater.from(mContext);
rowView = inflater.inflate(R.layout.item_account, null);
entryView = new AccountView();
entryView.alias = (TextView) rowView.findViewById(R.id.account_alias);
entryView.host = (TextView) rowView.findViewById(R.id.account_host);
entryView.select = (RadioButton) rowView.findViewById(R.id.account_checked);
rowView.setTag(entryView);
} else {
entryView = (AccountView) rowView.getTag();
}
accManager.displayAccountDetails(accountIDs.get(pos), entryView);
if(pos == selectedAccount){
entryView.select.setChecked(true);
}
return rowView;
}
/*********************
* ViewHolder Pattern
*********************/
public class AccountView {
public TextView alias;
public TextView host;
public RadioButton select;
}
/**
* Asynchronous account details retriever
*/
public class AccountManager {
// private static final String TAG = ImageManager.class.getSimpleName();
private HashMap<String, HashMap<String, String>> accountMap = new HashMap<String, HashMap<String, String>>();
private AccountQueue accountQueue = new AccountQueue();
private Thread accountLoaderThread = new Thread(new AccountQueueManager());
public AccountManager(Context context) {
accountLoaderThread.setPriority(Thread.NORM_PRIORITY - 1);
}
public void displayAccountDetails(String id, AccountView account) {
if (accountMap.containsKey(id)) {
HashMap<String, String> details = accountMap.get(id);
account.alias.setText(details.get(AccountDetailBasic.CONFIG_ACCOUNT_ALIAS));
account.host.setText(details.get(AccountDetailBasic.CONFIG_ACCOUNT_HOSTNAME));
} else {
queueAccount(id, account);
}
}
private void queueAccount(String id, AccountView row) {
// This ImageView might have been used for other images, so we clear
// the queue of old tasks before starting.
accountQueue.Clean(row);
AccountRef p = new AccountRef(id, row);
synchronized (accountQueue.accountRefsStack) {
accountQueue.accountRefsStack.push(p);
accountQueue.accountRefsStack.notifyAll();
}
// Start thread if it's not started yet
if (accountLoaderThread.getState() == Thread.State.NEW) {
accountLoaderThread.start();
}
}
/** Classes **/
private class AccountRef {
public String accountID;
public AccountView row;
public AccountRef(String u, AccountView i) {
accountID = u;
row = i;
}
}
private class AccountQueue {
private Stack<AccountRef> accountRefsStack = new Stack<AccountRef>();
// removes all instances of this account
public void Clean(AccountView view) {
for (int i = 0; i < accountRefsStack.size();) {
if (accountRefsStack.get(i).row == view)
accountRefsStack.remove(i);
else
++i;
}
}
}
private class AccountQueueManager implements Runnable {
@Override
public void run() {
try {
while (true) {
// Thread waits until there are accountsID in the queue to be retrieved
if (accountQueue.accountRefsStack.size() == 0) {
synchronized (accountQueue.accountRefsStack) {
accountQueue.accountRefsStack.wait();
}
}
// When we have accounts to load
if (accountQueue.accountRefsStack.size() != 0) {
AccountRef accountToLoad;
synchronized (accountQueue.accountRefsStack) {
accountToLoad = accountQueue.accountRefsStack.pop();
}
HashMap<String, String> details = (HashMap<String, String>) service.getAccountDetails(accountToLoad.accountID);
accountMap.put(accountToLoad.accountID, details);
AccountDisplayer accDisplayer = new AccountDisplayer(details, accountToLoad.row);
Activity a = (Activity) mContext;
a.runOnUiThread(accDisplayer);
}
if (Thread.interrupted())
break;
}
} catch (InterruptedException e) {
Log.e(TAG, e.toString());
} catch (RemoteException e) {
Log.e(TAG, e.toString());
}
}
}
// Used to display details in the UI thread
private class AccountDisplayer implements Runnable {
HashMap<String, String> displayDetails;
AccountView displayRow;
public AccountDisplayer(HashMap<String, String> details, AccountView row) {
displayRow = row;
displayDetails = details;
}
public void run() {
displayRow.alias.setText(displayDetails.get(AccountDetailBasic.CONFIG_ACCOUNT_ALIAS));
displayRow.host.setText(displayDetails.get(AccountDetailBasic.CONFIG_ACCOUNT_HOSTNAME));
}
}
public void removeFromCache(Uri uri) {
if (accountMap.containsKey(uri)) {
accountMap.remove(uri);
}
}
}
public void setSelectedAccount(int pos) {
selectedAccount = pos;
}
}
package com.savoirfairelinux.sflphone.adapters;
import java.util.List;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.TextView;
import com.savoirfairelinux.sflphone.R;
import com.savoirfairelinux.sflphone.model.SipCall;
/**
* A CursorAdapter that creates and update call elements using corresponding contact infos. TODO: handle contact list separatly to allow showing
* synchronized contacts on Call cards with multiple contacts etc.
*/
public class CallElementAdapter extends ArrayAdapter {
private ExecutorService infos_fetcher = Executors.newCachedThreadPool();
private Context mContext;
private final List mCallList;
private static final String CURRENT_STATE_LABEL = " CURRENT STATE: ";
public CallElementAdapter(Context context, List callList) {
super(context, R.layout.item_contact, callList);
mContext = context;
mCallList = callList;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View rowView = convertView;
CallElementView entryView = null;
if (rowView == null) {
// Get a new instance of the row layout view
LayoutInflater inflater = LayoutInflater.from(mContext);
rowView = inflater.inflate(R.layout.item_contact, null);
// Hold the view objects in an object
// so they don't need to be re-fetched
entryView = new CallElementView();
entryView.toggleButton = (ImageButton) rowView.findViewById(R.id.toggleButton1);
entryView.button = (Button) rowView.findViewById(R.id.button2);
entryView.photo = (ImageView) rowView.findViewById(R.id.photo);
entryView.displayName = (TextView) rowView.findViewById(R.id.display_name);
entryView.phones = (TextView) rowView.findViewById(R.id.phones);
entryView.state = (TextView) rowView.findViewById(R.id.callstate);
// Cache the view obects in the tag
// so they can be re-accessed later
rowView.setTag(entryView);
} else {
entryView = (CallElementView) rowView.getTag();
}
// Transfer the stock data from the data object
// to the view objects
SipCall call = (SipCall) mCallList.get(position);
call.setAssociatedRowView(rowView);
entryView.displayName.setText(call.getDisplayName());
entryView.phones.setText(call.getPhone());
entryView.state.setText(CURRENT_STATE_LABEL + call.getCallStateString());
return rowView;
}
/*********************
* ViewHolder Pattern
*********************/
public class CallElementView {
protected ImageButton toggleButton;
protected Button button;
protected ImageView photo;
protected TextView displayName;
protected TextView phones;
public TextView state;
}
}
......@@ -263,9 +263,6 @@ public class SFLPhoneHomeActivity extends Activity implements ActionBar.TabListe
unbindService(mConnection);
mBound = false;
}
// Log.i(TAG, "onDestroy: stopping SipService...");
// stopService(new Intent(this, SipService.class));
// mApplication.setServiceRunning(false);
/* unregister broadcast receiver */
LocalBroadcastManager.getInstance(this).unregisterReceiver(mCallList);
......@@ -273,6 +270,8 @@ public class SFLPhoneHomeActivity extends Activity implements ActionBar.TabListe
super.onDestroy();
}
/** Defines callbacks for service binding, passed to bindService() */
private ServiceConnection mConnection = new ServiceConnection() {
......@@ -283,6 +282,7 @@ public class SFLPhoneHomeActivity extends Activity implements ActionBar.TabListe
mApplication.setSipService(service);
mBound = true;
mAccountList.setSipService(service);
mCallElementList.onServiceSipBinded(service);
Log.d(TAG, "Service connected service=" + service);
}
......@@ -294,25 +294,6 @@ public class SFLPhoneHomeActivity extends Activity implements ActionBar.TabListe
}
};
// private void startSipService() {
// Thread thread = new Thread("StartSFLphoneService") {
// public void run() {
// Intent sipServiceIntent = new Intent(SFLPhoneHome.this, SipService.class);
// //sipServiceIntent.putExtra(ServiceConstants.EXTRA_OUTGOING_ACTIVITY, new ComponentName(SFLPhoneHome.this, SFLPhoneHome.class));
// startService(sipServiceIntent);
// mApplication.setServiceRunning(true);
// };
// };
// try {
// thread.start();
// } catch (IllegalThreadStateException e) {
// AlertDialog.Builder builder = new AlertDialog.Builder(this);
// builder.setMessage("Cannot start SFLPhone SipService!");
// AlertDialog alert = builder.create();
// alert.show();
// finish();
// }
// }
@Override
public boolean onOptionsItemSelected(MenuItem item) {
......
......@@ -180,8 +180,24 @@ public class AccountManagementFragment extends PreferenceFragment {
} catch (RemoteException e) {
Log.e(TAG, "Cannot call service method", e);
}
}
private void setAccountDetails(String accountID, HashMap<String, String> accountDetails) {
try {
service.setAccountDetails(accountID, accountDetails);
} catch (RemoteException e) {
Log.e(TAG, "Cannot call service method", e);
}
}
private void deleteSelectedAccount(String accountID) {
Log.i(TAG, "DeleteSelectedAccount");
try {
service.removeAccount(accountID);
} catch (RemoteException e) {
Log.e(TAG, "Cannot call service method", e);
}
};
private BroadcastReceiver mMessageReceiver = new BroadcastReceiver() {
@Override
......@@ -256,14 +272,7 @@ public class AccountManagementFragment extends PreferenceFragment {
startActivityForResult(intent, ACCOUNT_EDIT_REQUEST);
}
private void deleteSelectedAccount(String accountID) {
Log.i(TAG, "DeleteSelectedAccount");
try {
service.removeAccount(accountID);
} catch (RemoteException e) {
Log.e(TAG, "Cannot call service method", e);
}
};
private ArrayList<String> getAccountList() {
ArrayList<String> accountList = null;
......@@ -290,13 +299,7 @@ public class AccountManagementFragment extends PreferenceFragment {
return accountDetails;
}
private void setAccountDetails(String accountID, HashMap<String, String> accountDetails) {
try {
service.setAccountDetails(accountID, accountDetails);
} catch (RemoteException e) {
Log.e(TAG, "Cannot call service method", e);
}
}
public PreferenceScreen getAccountListPreferenceScreen() {
Activity currentContext = getActivity();
......
......@@ -33,8 +33,6 @@ package com.savoirfairelinux.sflphone.fragments;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import android.app.Activity;
import android.app.AlertDialog;
......@@ -51,6 +49,7 @@ import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.os.Bundle;
import android.os.RemoteException;
import android.provider.ContactsContract;
import android.provider.ContactsContract.CommonDataKinds;
import android.provider.ContactsContract.CommonDataKinds.Phone;
......@@ -62,19 +61,14 @@ import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemLongClickListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import com.savoirfairelinux.sflphone.R;
import com.savoirfairelinux.sflphone.account.AccountSelectionSpinner;
import com.savoirfairelinux.sflphone.adapters.CallElementAdapter;
import com.savoirfairelinux.sflphone.client.SFLPhoneHomeActivity;
import com.savoirfairelinux.sflphone.client.SFLphoneApplication;
import com.savoirfairelinux.sflphone.client.receiver.AccountListReceiver;
import com.savoirfairelinux.sflphone.model.ContactManager;
import com.savoirfairelinux.sflphone.model.SipCall;
import com.savoirfairelinux.sflphone.service.ISipService;
......@@ -83,16 +77,19 @@ import com.savoirfairelinux.sflphone.service.ISipService;
*/
public class CallElementListFragment extends ListFragment implements LoaderManager.LoaderCallbacks<Cursor> {
private static final String TAG = CallElementListFragment.class.getSimpleName();
private static final String CURRENT_STATE_LABEL = " CURRENT STATE: ";
private ContactManager mContactManager;
// private ContactManager mContactManager;
private CallElementAdapter mAdapter;
private String mCurFilter;
private SFLPhoneHomeActivity sflphoneHome;
private SFLphoneApplication sflphoneApplication;
// private SFLphoneApplication sflphoneApplication;
private ISipService service;
private AccountSelectionSpinner mAccountSelectionButton;
private AccountSelectionSpinner mAccountSelectionSpinner;
private AccountListReceiver mAccountList;
private boolean isReady = false;
static final String[] CONTACTS_SUMMARY_PROJECTION = new String[] { Contacts._ID, Contacts.DISPLAY_NAME, Contacts.PHOTO_ID, Contacts.LOOKUP_KEY };
static final String[] CONTACTS_PHONES_PROJECTION = new String[] { Phone.NUMBER, Phone.TYPE };
static final String[] CONTACTS_SIP_PROJECTION = new String[] { SipAddress.SIP_ADDRESS, SipAddress.TYPE };
......@@ -170,69 +167,6 @@ public class CallElementListFragment extends ListFragment implements LoaderManag
}
}
/**
* A CursorAdapter that creates and update call elements using corresponding contact infos. TODO: handle contact list separatly to allow showing
* synchronized contacts on Call cards with multiple contacts etc.
*/
public static class CallElementAdapter extends ArrayAdapter {
private ExecutorService infos_fetcher = Executors.newCachedThreadPool();
private Context mContext;
private final List mCallList;
public CallElementAdapter(Context context, List callList) {
super(context, R.layout.item_contact, callList);
mContext = context;
mCallList = callList;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View rowView = convertView;
CallElementView entryView = null;
if (rowView == null) {
// Get a new instance of the row layout view
LayoutInflater inflater = LayoutInflater.from(mContext);
rowView = inflater.inflate(R.layout.item_contact, null);
// Hold the view objects in an object
// so they don't need to be re-fetched
entryView = new CallElementView();
entryView.toggleButton = (ImageButton) rowView.findViewById(R.id.toggleButton1);
entryView.button = (Button) rowView.findViewById(R.id.button2);
entryView.photo = (ImageView) rowView.findViewById(R.id.photo);
entryView.displayName = (TextView) rowView.findViewById(R.id.display_name);
entryView.phones = (TextView) rowView.findViewById(R.id.phones);
entryView.state = (TextView) rowView.findViewById(R.id.callstate);
// Cache the view obects in the tag
// so they can be re-accessed later
rowView.setTag(entryView);
} else {
entryView = (CallElementView) rowView.getTag();
}
// Transfer the stock data from the data object
// to the view objects
SipCall call = (SipCall) mCallList.get(position);
call.setAssociatedRowView(rowView);
entryView.displayName.setText(call.getDisplayName());
entryView.phones.setText(call.getPhone());
entryView.state.setText(CURRENT_STATE_LABEL + call.getCallStateString());
return rowView;
}
};
public static class CallElementView {
protected ImageButton toggleButton;
protected Button button;
protected ImageView photo;
protected TextView displayName;
protected TextView phones;
public TextView state;
}
public CallElementListFragment() {
super();
}
......@@ -282,8 +216,8 @@ public class CallElementListFragment extends ListFragment implements LoaderManag
Log.i(TAG, "On Long Click");
final CharSequence[] items = { "Hang up Call", "Send Message", "Add to Conference" };
final SipCall call = (SipCall) mAdapter.getItem(pos);
// FIXME
service = sflphoneApplication.getSipService();
// // FIXME
// service = sflphoneApplication.getSipService();
AlertDialog.Builder builder = new AlertDialog.Builder(context);
builder.setTitle("Action to perform with " + call.mCallInfo.mDisplayName).setCancelable(true)
.setItems(items, new DialogInterface.OnClickListener() {
......@@ -318,12 +252,17 @@ public class CallElementListFragment extends ListFragment implements LoaderManag
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
Log.i(TAG, "onCreateView");
View inflatedView = inflater.inflate(R.layout.frag_call_element, container, false);
mAccountSelectionButton = (AccountSelectionSpinner) inflatedView.findViewById(R.id.account_selection_button);
mAccountList.addManagementUI(mAccountSelectionButton);
mAccountSelectionButton.setAccountList(mAccountList);
mAccountSelectionSpinner = (AccountSelectionSpinner) inflatedView.findViewById(R.id.account_selection_button);
mAccountList.addManagementUI(mAccountSelectionSpinner);
mAccountSelectionSpinner.setAccountList(mAccountList);
isReady = true;
if (service != null) {
onServiceSipBinded(service);
}
return inflatedView;
}
......@@ -340,7 +279,7 @@ public class CallElementListFragment extends ListFragment implements LoaderManag
@Override
public Loader<Cursor> onCreateLoader(int id, Bundle args) {
Log.i(TAG,"onCreateLoader");
Log.i(TAG, "onCreateLoader");
// return new CursorLoader(getActivity(), CommonDataKinds.Phone.CONTENT_URI, null,null,null, null);
// This is called when a new Loader needs to be created. This
......@@ -366,6 +305,7 @@ public class CallElementListFragment extends ListFragment implements LoaderManag
@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
Log.i(TAG, "onLoadFinished");
// Swap the new cursor in. (The framework will take care of closing the
// old cursor once we return.)
// mAdapter.swapCursor(data);
......@@ -383,4 +323,25 @@ public class CallElementListFragment extends ListFragment implements LoaderManag
// longer using it.
// mAdapter.swapCursor(null);
}
/**
* Called by activity to pass a reference to sipservice to Fragment.
*
* @param isip
*/
public void onServiceSipBinded(ISipService isip) {
if (isReady) {
service = isip;
ArrayList<String> accountList;
try {
accountList = (ArrayList<String>) service.getAccountList();
mAccountSelectionSpinner.populate(service, accountList);
} catch (RemoteException e) {
Log.i(TAG, e.toString());
}
}
}
}
......@@ -30,21 +30,22 @@
*/
package com.savoirfairelinux.sflphone.model;
import java.util.ArrayList;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.os.Parcelable;
import android.os.Parcel;
import android.os.Parcelable;
import android.os.RemoteException;
import android.util.Log;
import android.view.View;
import java.util.ArrayList;
import com.savoirfairelinux.sflphone.service.ISipService;
import com.savoirfairelinux.sflphone.adapters.CallElementAdapter.CallElementView;
import com.savoirfairelinux.sflphone.client.CallActivity;
import com.savoirfairelinux.sflphone.client.SFLPhoneHomeActivity;
import com.savoirfairelinux.sflphone.fragments.CallElementListFragment;
import com.savoirfairelinux.sflphone.fragments.CallElementListFragment.CallElementView;
import com.savoirfairelinux.sflphone.service.ISipService;
public class SipCall
{
......
......@@ -32,7 +32,8 @@ public class ConfigurationManagerCallback extends ConfigurationCallback {
private Context mContext;
static public final String SIGNAL_NAME = "signal-name";
static public final String ACCOUNTS_CHANGED = "accounts-changed";
static public final String ACCOUNTS_LOADED = "accounts-loaded";
static public final String ACCOUNTS_CHANGED = "accounts-changed";
static public final String ACCOUNT_STATE_CHANGED = "account-state-changed";
public ConfigurationManagerCallback(Context context) {
......
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