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

* #25117 Better call management

parent 85992119
No related branches found
No related tags found
No related merge requests found
...@@ -60,7 +60,7 @@ public class CallListAdapter extends BaseAdapter { ...@@ -60,7 +60,7 @@ public class CallListAdapter extends BaseAdapter {
SipCall tmp = calls.get(position); SipCall tmp = calls.get(position);
((TextView)rowView.findViewById(R.id.call_title)).setText(tmp.getContacts().get(0).getmDisplayName()); ((TextView)rowView.findViewById(R.id.call_title)).setText(tmp.getContacts().get(0).getmDisplayName());
((TextView)rowView.findViewById(R.id.call_status)).setText(""+tmp.getmCallState()); ((TextView)rowView.findViewById(R.id.call_status)).setText(""+tmp.getCallStateString());
......
...@@ -33,6 +33,7 @@ ...@@ -33,6 +33,7 @@
package com.savoirfairelinux.sflphone.client; package com.savoirfairelinux.sflphone.client;
import java.util.HashMap;
import java.util.concurrent.ExecutorService; import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors; import java.util.concurrent.Executors;
...@@ -72,6 +73,8 @@ public class CallActivity extends Activity implements CallInterface, CallFragmen ...@@ -72,6 +73,8 @@ public class CallActivity extends Activity implements CallInterface, CallFragmen
private ExecutorService infos_fetcher = Executors.newCachedThreadPool(); private ExecutorService infos_fetcher = Executors.newCachedThreadPool();
CallReceiver receiver; CallReceiver receiver;
SlidingPaneLayout slidingPaneLayout;
CallListFragment mCallsFragment; CallListFragment mCallsFragment;
CallFragment mCurrentCallFragment; CallFragment mCurrentCallFragment;
...@@ -99,7 +102,7 @@ public class CallActivity extends Activity implements CallInterface, CallFragmen ...@@ -99,7 +102,7 @@ public class CallActivity extends Activity implements CallInterface, CallFragmen
getFragmentManager().beginTransaction().replace(R.id.calllist_pane, mCallsFragment).commit(); getFragmentManager().beginTransaction().replace(R.id.calllist_pane, mCallsFragment).commit();
final SlidingPaneLayout slidingPaneLayout = (SlidingPaneLayout) findViewById(R.id.slidingpanelayout); slidingPaneLayout = (SlidingPaneLayout) findViewById(R.id.slidingpanelayout);
slidingPaneLayout.setPanelSlideListener(new SlidingPaneLayout.PanelSlideListener() { slidingPaneLayout.setPanelSlideListener(new SlidingPaneLayout.PanelSlideListener() {
@Override @Override
...@@ -216,6 +219,20 @@ public class CallActivity extends Activity implements CallInterface, CallFragmen ...@@ -216,6 +219,20 @@ public class CallActivity extends Activity implements CallInterface, CallFragmen
mCallsFragment.update(); mCallsFragment.update();
mCurrentCallFragment.changeCallState(callID, newState);
HashMap<String, SipCall> map;
try {
map = (HashMap<String, SipCall>) service.getCallList();
if(map.size() == 0){
finish();
}
} catch (RemoteException e) {
Log.e(TAG, e.toString());
}
// if (newState.equals("INCOMING")) { // if (newState.equals("INCOMING")) {
// fr.changeCallState(SipCall.state.CALL_STATE_INCOMING); // fr.changeCallState(SipCall.state.CALL_STATE_INCOMING);
// //
...@@ -279,6 +296,8 @@ public class CallActivity extends Activity implements CallInterface, CallFragmen ...@@ -279,6 +296,8 @@ public class CallActivity extends Activity implements CallInterface, CallFragmen
mCurrentCallFragment.setArguments(b); mCurrentCallFragment.setArguments(b);
getFragmentManager().beginTransaction().replace(R.id.ongoingcall_pane, mCurrentCallFragment).commit(); getFragmentManager().beginTransaction().replace(R.id.ongoingcall_pane, mCurrentCallFragment).commit();
slidingPaneLayout.openPane();
} }
@Override @Override
......
...@@ -73,12 +73,18 @@ public class CallFragment extends Fragment { ...@@ -73,12 +73,18 @@ public class CallFragment extends Fragment {
private TextView contact_name_txt; private TextView contact_name_txt;
CallContact myself = CallContact.ContactBuilder.buildUserContact("Me");
@Override @Override
public void onCreate(Bundle savedBundle) { public void onCreate(Bundle savedBundle) {
super.onCreate(savedBundle); super.onCreate(savedBundle);
model = new BubbleModel(getResources().getDisplayMetrics().density); model = new BubbleModel(getResources().getDisplayMetrics().density);
metrics = getResources().getDisplayMetrics(); metrics = getResources().getDisplayMetrics();
screenCenter = new PointF(metrics.widthPixels / 2, metrics.heightPixels / 3); screenCenter = new PointF(metrics.widthPixels / 2, metrics.heightPixels / 3);
Bundle b = getArguments();
mCall = b.getParcelable("CallInfo");
} }
/** /**
...@@ -86,8 +92,6 @@ public class CallFragment extends Fragment { ...@@ -86,8 +92,6 @@ public class CallFragment extends Fragment {
*/ */
private static Callbacks sDummyCallbacks = new Callbacks() { private static Callbacks sDummyCallbacks = new Callbacks() {
@Override @Override
public void onSendMessage(SipCall call, String msg) { public void onSendMessage(SipCall call, String msg) {
...@@ -138,6 +142,12 @@ public class CallFragment extends Fragment { ...@@ -138,6 +142,12 @@ public class CallFragment extends Fragment {
// TODO Auto-generated method stub // TODO Auto-generated method stub
} }
@Override
public ISipService getService() {
// TODO Auto-generated method stub
return null;
}
}; };
/** /**
...@@ -146,6 +156,8 @@ public class CallFragment extends Fragment { ...@@ -146,6 +156,8 @@ public class CallFragment extends Fragment {
*/ */
public interface Callbacks { public interface Callbacks {
public ISipService getService();
public void callContact(SipCall call); public void callContact(SipCall call);
public void onCallAccepted(SipCall call); public void onCallAccepted(SipCall call);
...@@ -189,32 +201,46 @@ public class CallFragment extends Fragment { ...@@ -189,32 +201,46 @@ public class CallFragment extends Fragment {
view = (BubblesView) rootView.findViewById(R.id.main_view); view = (BubblesView) rootView.findViewById(R.id.main_view);
view.setModel(model); view.setModel(model);
Bundle b = getArguments();
mCall = b.getParcelable("CallInfo");
Log.i(TAG, "Starting fragment for call " + mCall.getCallId()); Log.i(TAG, "Starting fragment for call " + mCall.getCallId());
mCall.printCallInfo(); mCall.printCallInfo();
String pendingAction = b.getString("action"); if (mCall.isRinging()) {
if (pendingAction != null && pendingAction.contentEquals("call")) { initOutGoingCallDisplay();
callContact(mCall); }
} else if (pendingAction.contentEquals(CallManagerCallBack.INCOMING_CALL)) { if (mCall.isIncoming() && mCall.isRinging()) {
callIncoming(); initIncomingCallDisplay();
}
try {
if (mCall.isOutGoing() && mCallbacks.getService().getCall(mCall.getCallId()) == null) {
mCallbacks.getService().placeCall(mCall);
initOutGoingCallDisplay();
} else if(mCall.isOutGoing() && mCall.isRinging()){
initOutGoingCallDisplay();
}
} catch (RemoteException e) {
Log.e(TAG, e.toString());
}
if(mCall.isOngoing()){
initNormalStateDisplay();
} }
return rootView; return rootView;
} }
private void callContact(SipCall infos) { private void initNormalStateDisplay() {
Log.i(TAG, "Start normal display");
// TODO off-thread image loading // TODO off-thread image loading
Bubble contact_bubble; Bubble contact_bubble, me;
if (infos.getContacts().get(0).getPhoto_id() > 0) { if (mCall.getContacts().get(0).getPhoto_id() > 0) {
Bitmap photo = ContactPictureLoader.loadContactPhoto(getActivity().getContentResolver(), infos.getContacts().get(0).getId()); Bitmap photo = ContactPictureLoader.loadContactPhoto(getActivity().getContentResolver(), mCall.getContacts().get(0).getId());
contact_bubble = new Bubble(getActivity(), screenCenter.x, screenCenter.y, 150, photo); contact_bubble = new Bubble(getActivity(), screenCenter.x, screenCenter.y, 150, photo);
} else { } else {
contact_bubble = new Bubble(getActivity(), screenCenter.x, screenCenter.y, 150, R.drawable.ic_contact_picture); contact_bubble = new Bubble(getActivity(), screenCenter.x, screenCenter.y / 2 , 150, R.drawable.ic_contact_picture);
} }
me = new Bubble(getActivity(), screenCenter.x, screenCenter.y * 3 / 2, 150, R.drawable.ic_contact_picture);
model.attractors.clear(); model.attractors.clear();
model.attractors.add(new Attractor(new PointF(metrics.widthPixels / 2, metrics.heightPixels * .8f), new Attractor.Callback() { model.attractors.add(new Attractor(new PointF(metrics.widthPixels / 2, metrics.heightPixels * .8f), new Attractor.Callback() {
@Override @Override
...@@ -224,15 +250,17 @@ public class CallFragment extends Fragment { ...@@ -224,15 +250,17 @@ public class CallFragment extends Fragment {
} }
})); }));
contact_bubble.contact = infos.getContacts().get(0); contact_bubble.contact = mCall.getContacts().get(0);
me.contact = myself;
model.listBubbles.add(contact_bubble); model.listBubbles.add(contact_bubble);
contacts.put(infos.getContacts().get(0), contact_bubble); model.listBubbles.add(me);
contacts.put(mCall.getContacts().get(0), contact_bubble);
mCallbacks.callContact(infos); contacts.put(myself, me);
} }
private void callIncoming() { private void initIncomingCallDisplay() {
Log.i(TAG, "Start incoming display");
model.attractors.clear(); model.attractors.clear();
model.attractors.add(new Attractor(new PointF(3 * metrics.widthPixels / 4, metrics.heightPixels / 4), new Attractor.Callback() { model.attractors.add(new Attractor(new PointF(3 * metrics.widthPixels / 4, metrics.heightPixels / 4), new Attractor.Callback() {
@Override @Override
...@@ -246,12 +274,44 @@ public class CallFragment extends Fragment { ...@@ -246,12 +274,44 @@ public class CallFragment extends Fragment {
mCallbacks.onCallRejected(mCall); mCallbacks.onCallRejected(mCall);
} }
})); }));
}
private void initOutGoingCallDisplay() {
Log.i(TAG, "Start outgoing display");
// TODO off-thread image loading
Bubble contact_bubble;
if (mCall.getContacts().get(0).getPhoto_id() > 0) {
Bitmap photo = ContactPictureLoader.loadContactPhoto(getActivity().getContentResolver(), mCall.getContacts().get(0).getId());
contact_bubble = new Bubble(getActivity(), screenCenter.x, screenCenter.y, 150, photo);
} else {
contact_bubble = new Bubble(getActivity(), screenCenter.x, screenCenter.y, 150, R.drawable.ic_contact_picture);
}
model.attractors.clear();
model.attractors.add(new Attractor(new PointF(metrics.widthPixels / 2, metrics.heightPixels * .8f), new Attractor.Callback() {
@Override
public void onBubbleSucked(Bubble b) {
Log.w(TAG, "Bubble sucked ! ");
mCallbacks.onCallEnded(mCall);
}
}));
contact_bubble.contact = mCall.getContacts().get(0);
model.listBubbles.add(contact_bubble);
contacts.put(mCall.getContacts().get(0), contact_bubble);
} }
public void changeCallState(int callState) { public void changeCallState(String callID, String newState) {
mCall.setCallState(callState); Log.w(TAG, "Changing call state of "+callID);
mCall.printCallInfo();
if(callID != mCall.getCallId())
return;
mCall.setCallState(newState);
if(mCall.isOngoing()){
initNormalStateDisplay();
}
} }
} }
...@@ -45,6 +45,7 @@ import android.view.ViewGroup; ...@@ -45,6 +45,7 @@ import android.view.ViewGroup;
import android.widget.AdapterView; import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener; import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView; import android.widget.ListView;
import android.widget.Toast;
import com.savoirfairelinux.sflphone.R; import com.savoirfairelinux.sflphone.R;
import com.savoirfairelinux.sflphone.adapters.CallListAdapter; import com.savoirfairelinux.sflphone.adapters.CallListAdapter;
...@@ -138,6 +139,7 @@ public class CallListFragment extends Fragment { ...@@ -138,6 +139,7 @@ public class CallListFragment extends Fragment {
@Override @Override
public void onItemClick(AdapterView<?> arg0, View view, int pos, long arg3) { public void onItemClick(AdapterView<?> arg0, View view, int pos, long arg3) {
Toast.makeText(getActivity(), "ItemClicked", Toast.LENGTH_SHORT).show();
mCallbacks.onCallSelected(mAdapter.getItem(pos)); mCallbacks.onCallSelected(mAdapter.getItem(pos));
} }
......
...@@ -109,6 +109,7 @@ public class DialingFragment extends Fragment implements LoaderCallbacks<ArrayLi ...@@ -109,6 +109,7 @@ public class DialingFragment extends Fragment implements LoaderCallbacks<ArrayLi
} }
mCallbacks = (Callbacks) activity; mCallbacks = (Callbacks) activity;
} }
@Override @Override
...@@ -183,11 +184,17 @@ public class DialingFragment extends Fragment implements LoaderCallbacks<ArrayLi ...@@ -183,11 +184,17 @@ public class DialingFragment extends Fragment implements LoaderCallbacks<ArrayLi
}); });
isReady = true; isReady = true;
return inflatedView;
}
@Override
public void onResume(){
super.onResume();
if (mCallbacks.getService() != null) { if (mCallbacks.getService() != null) {
onServiceSipBinded(mCallbacks.getService()); onServiceSipBinded(mCallbacks.getService());
} }
return inflatedView;
} }
@Override @Override
......
...@@ -159,6 +159,12 @@ public class CallContact implements Parcelable { ...@@ -159,6 +159,12 @@ public class CallContact implements Parcelable {
return new CallContact(-1, to, 0, phones, new ArrayList<CallContact.Phone>(), ""); return new CallContact(-1, to, 0, phones, new ArrayList<CallContact.Phone>(), "");
} }
public static CallContact buildUserContact(String displayName) {
ArrayList<Phone> phones = new ArrayList<Phone>();
return new CallContact(-1, displayName, 0, phones, new ArrayList<CallContact.Phone>(), "");
}
} }
@Override @Override
......
...@@ -93,7 +93,6 @@ public class SipCall implements Parcelable { ...@@ -93,7 +93,6 @@ public class SipCall implements Parcelable {
this.contacts = new ArrayList<CallContact>(c); this.contacts = new ArrayList<CallContact>(c);
} }
// public SipCall() { // public SipCall() {
// } // }
...@@ -173,6 +172,17 @@ public class SipCall implements Parcelable { ...@@ -173,6 +172,17 @@ public class SipCall implements Parcelable {
return mCallType; return mCallType;
} }
public String getCallTypeString() {
switch (mCallType) {
case state.CALL_TYPE_INCOMING:
return "CALL_TYPE_INCOMING";
case state.CALL_TYPE_OUTGOING:
return "CALL_TYPE_OUTGOING";
default:
return "CALL_TYPE_UNDETERMINED";
}
}
public void setCallState(int callState) { public void setCallState(int callState) {
mCallState = callState; mCallState = callState;
} }
...@@ -213,14 +223,6 @@ public class SipCall implements Parcelable { ...@@ -213,14 +223,6 @@ public class SipCall implements Parcelable {
this.mCallType = mCallType; this.mCallType = mCallType;
} }
public int getmCallState() {
return mCallState;
}
public void setmCallState(int mCallState) {
this.mCallState = mCallState;
}
public int getmMediaState() { public int getmMediaState() {
return mMediaState; return mMediaState;
} }
...@@ -273,7 +275,6 @@ public class SipCall implements Parcelable { ...@@ -273,7 +275,6 @@ public class SipCall implements Parcelable {
return mMediaState; return mMediaState;
} }
public static class SipCallBuilder { public static class SipCallBuilder {
private String bCallID = ""; private String bCallID = "";
...@@ -284,8 +285,6 @@ public class SipCall implements Parcelable { ...@@ -284,8 +285,6 @@ public class SipCall implements Parcelable {
private int bCallState = state.CALL_STATE_NONE; private int bCallState = state.CALL_STATE_NONE;
private int bMediaState = state.MEDIA_STATE_NONE; private int bMediaState = state.MEDIA_STATE_NONE;
public SipCallBuilder setCallType(int bCallType) { public SipCallBuilder setCallType(int bCallType) {
this.bCallType = bCallType; this.bCallType = bCallType;
return this; return this;
...@@ -339,7 +338,6 @@ public class SipCall implements Parcelable { ...@@ -339,7 +338,6 @@ public class SipCall implements Parcelable {
return new SipCallBuilder(); return new SipCallBuilder();
} }
} }
public void printCallInfo() { public void printCallInfo() {
...@@ -361,5 +359,55 @@ public class SipCall implements Parcelable { ...@@ -361,5 +359,55 @@ public class SipCall implements Parcelable {
} }
public boolean isOutGoing() {
if (mCallType == state.CALL_TYPE_OUTGOING)
return true;
return false;
}
public boolean isRinging() {
if (mCallState == state.CALL_STATE_RINGING || mCallState == state.CALL_STATE_NONE)
return true;
return false;
}
public boolean isIncoming() {
if (mCallType == state.CALL_TYPE_INCOMING)
return true;
return false;
}
public void setCallState(String newState) {
if (newState.equals("INCOMING")) {
setCallState(SipCall.state.CALL_STATE_INCOMING);
} else if (newState.equals("RINGING")) {
setCallState(SipCall.state.CALL_STATE_RINGING);
} else if (newState.equals("CURRENT")) {
setCallState(SipCall.state.CALL_STATE_CURRENT);
} else if (newState.equals("HUNGUP")) {
setCallState(SipCall.state.CALL_STATE_HUNGUP);
} else if (newState.equals("BUSY")) {
setCallState(SipCall.state.CALL_STATE_BUSY);
} else if (newState.equals("FAILURE")) {
setCallState(SipCall.state.CALL_STATE_FAILURE);
} else if (newState.equals("HOLD")) {
setCallState(SipCall.state.CALL_STATE_HOLD);
} else if (newState.equals("UNHOLD")) {
setCallState(SipCall.state.CALL_STATE_CURRENT);
} else {
setCallState(SipCall.state.CALL_STATE_NONE);
}
}
public boolean isOngoing() {
if (mCallState == state.CALL_STATE_RINGING || mCallState == state.CALL_STATE_NONE || mCallState == state.CALL_STATE_FAILURE || mCallState == state.CALL_STATE_BUSY || mCallState == state.CALL_STATE_HUNGUP)
return false;
return true;
}
} }
...@@ -50,4 +50,9 @@ interface ISipService { ...@@ -50,4 +50,9 @@ interface ISipService {
List getParticipantList(in String confID); List getParticipantList(in String confID);
String getConferenceId(in String callID); String getConferenceId(in String callID);
Map getConferenceDetails(in String callID); Map getConferenceDetails(in String callID);
/* */
SipCall getCall(String callID);
} }
...@@ -73,7 +73,6 @@ public class SipService extends Service { ...@@ -73,7 +73,6 @@ public class SipService extends Service {
HashMap<String, SipCall> current_calls = new HashMap<String, SipCall>(); HashMap<String, SipCall> current_calls = new HashMap<String, SipCall>();
private BroadcastReceiver IncomingReceiver = new BroadcastReceiver() { private BroadcastReceiver IncomingReceiver = new BroadcastReceiver() {
@Override @Override
...@@ -93,7 +92,8 @@ public class SipService extends Service { ...@@ -93,7 +92,8 @@ public class SipService extends Service {
Bundle b = intent.getBundleExtra("com.savoirfairelinux.sflphone.service.newcall"); Bundle b = intent.getBundleExtra("com.savoirfairelinux.sflphone.service.newcall");
SipCall.SipCallBuilder callBuilder = SipCall.SipCallBuilder.getInstance(); SipCall.SipCallBuilder callBuilder = SipCall.SipCallBuilder.getInstance();
callBuilder.startCallCreation(b.getString("CallID")).setAccountID(b.getString("AccountID")).setCallType(SipCall.state.CALL_TYPE_OUTGOING); callBuilder.startCallCreation(b.getString("CallID")).setAccountID(b.getString("AccountID"))
.setCallState(SipCall.state.CALL_STATE_RINGING).setCallType(SipCall.state.CALL_TYPE_INCOMING);
callBuilder.addContact(CallContact.ContactBuilder.buildUnknownContact(b.getString("From"))); callBuilder.addContact(CallContact.ContactBuilder.buildUnknownContact(b.getString("From")));
Intent toSend = new Intent(CallManagerCallBack.INCOMING_CALL); Intent toSend = new Intent(CallManagerCallBack.INCOMING_CALL);
...@@ -106,17 +106,16 @@ public class SipService extends Service { ...@@ -106,17 +106,16 @@ public class SipService extends Service {
Log.e(TAG, e.toString()); Log.e(TAG, e.toString());
} }
} else if (intent.getAction().contentEquals(CallManagerCallBack.CALL_STATE_CHANGED)) { } else if (intent.getAction().contentEquals(CallManagerCallBack.CALL_STATE_CHANGED)) {
Bundle b = intent.getBundleExtra("com.savoirfairelinux.sflphone.service.newstate"); Bundle b = intent.getBundleExtra("com.savoirfairelinux.sflphone.service.newstate");
String newState = b.getString("State"); String newState = b.getString("State");
if (newState.equals("INCOMING")) { if (newState.equals("INCOMING")) {
current_calls.get(b.getString("CallID")).setmCallState(SipCall.state.CALL_STATE_INCOMING); current_calls.get(b.getString("CallID")).setCallState(SipCall.state.CALL_STATE_INCOMING);
} else if (newState.equals("RINGING")) { } else if (newState.equals("RINGING")) {
current_calls.get(b.getString("CallID")).setmCallState(SipCall.state.CALL_STATE_RINGING); current_calls.get(b.getString("CallID")).setCallState(SipCall.state.CALL_STATE_RINGING);
} else if (newState.equals("CURRENT")) { } else if (newState.equals("CURRENT")) {
current_calls.get(b.getString("CallID")).setmCallState(SipCall.state.CALL_STATE_CURRENT); current_calls.get(b.getString("CallID")).setCallState(SipCall.state.CALL_STATE_CURRENT);
} else if (newState.equals("HUNGUP")) { } else if (newState.equals("HUNGUP")) {
current_calls.remove(b.getString("CallID")); current_calls.remove(b.getString("CallID"));
} else if (newState.equals("BUSY")) { } else if (newState.equals("BUSY")) {
...@@ -124,11 +123,11 @@ public class SipService extends Service { ...@@ -124,11 +123,11 @@ public class SipService extends Service {
} else if (newState.equals("FAILURE")) { } else if (newState.equals("FAILURE")) {
current_calls.remove(b.getString("CallID")); current_calls.remove(b.getString("CallID"));
} else if (newState.equals("HOLD")) { } else if (newState.equals("HOLD")) {
current_calls.get(b.getString("CallID")).setmCallState(SipCall.state.CALL_STATE_HOLD); current_calls.get(b.getString("CallID")).setCallState(SipCall.state.CALL_STATE_HOLD);
} else if (newState.equals("UNHOLD")) { } else if (newState.equals("UNHOLD")) {
current_calls.get(b.getString("CallID")).setmCallState(SipCall.state.CALL_STATE_CURRENT); current_calls.get(b.getString("CallID")).setCallState(SipCall.state.CALL_STATE_CURRENT);
} else { } else {
current_calls.get(b.getString("CallID")).setmCallState(SipCall.state.CALL_STATE_NONE); current_calls.get(b.getString("CallID")).setCallState(SipCall.state.CALL_STATE_NONE);
} }
sendBroadcast(intent); sendBroadcast(intent);
...@@ -590,7 +589,6 @@ public class SipService extends Service { ...@@ -590,7 +589,6 @@ public class SipService extends Service {
}); });
} }
@Override @Override
public ArrayList<HashMap<String, String>> getHistory() throws RemoteException { public ArrayList<HashMap<String, String>> getHistory() throws RemoteException {
class History extends SipRunnableWithReturn { class History extends SipRunnableWithReturn {
...@@ -929,5 +927,10 @@ public class SipService extends Service { ...@@ -929,5 +927,10 @@ public class SipService extends Service {
return current_calls; return current_calls;
} }
@Override
public SipCall getCall(String callID) throws RemoteException {
return current_calls.get(callID);
}
}; };
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment