diff --git a/src/com/savoirfairelinux/sflphone/client/CallActivity.java b/src/com/savoirfairelinux/sflphone/client/CallActivity.java index 4bf65b7189cc24a25418209dc67f6533912a67d9..8693482e5880258e72478ca51587d5a6fc857453 100644 --- a/src/com/savoirfairelinux/sflphone/client/CallActivity.java +++ b/src/com/savoirfairelinux/sflphone/client/CallActivity.java @@ -90,6 +90,8 @@ public class CallActivity extends Activity implements OnClickListener findViewById(R.id.buttonanswer).setOnClickListener(this); findViewById(R.id.buttonhangup).setOnClickListener(this); + findViewById(R.id.buttonhold).setOnClickListener(this); + findViewById(R.id.buttonunhold).setOnClickListener(this); setCallStateDisplay(mCall.getCallStateString()); @@ -129,7 +131,6 @@ public class CallActivity extends Activity implements OnClickListener case R.id.buttonhangup: if((mCall.getCallStateInt() == SipCall.CALL_STATE_NONE) || (mCall.getCallStateInt() == SipCall.CALL_STATE_CURRENT)) { - mCall.notifyServiceHangup(service); finish(); } @@ -138,6 +139,18 @@ public class CallActivity extends Activity implements OnClickListener finish(); } break; + case R.id.buttonhold: + Log.i(TAG, "HOLDBUTTONCLICK call state " + mCall.getCallStateString()); + if(mCall.getCallStateInt() == SipCall.CALL_STATE_CURRENT) { + mCall.notifyServiceHold(service); + } + break; + case R.id.buttonunhold: + Log.i(TAG, "UNHOLDBUTTONCLICK call state " + mCall.getCallStateString()); + if(mCall.getCallStateInt() == SipCall.CALL_STATE_HOLD) { + mCall.notifyServiceUnhold(service); + } + break; default: Log.e(TAG, "Invalid button clicked"); } @@ -149,21 +162,29 @@ public class CallActivity extends Activity implements OnClickListener String newState = bundle.getString("State"); if(newState.equals("INCOMING")) { + mCall.setCallState(SipCall.CALL_STATE_INCOMING); setCallStateDisplay(newState); } else if(newState.equals("RINGING")) { + mCall.setCallState(SipCall.CALL_STATE_RINGING); setCallStateDisplay(newState); } else if(newState.equals("CURRENT")) { + mCall.setCallState(SipCall.CALL_STATE_CURRENT); setCallStateDisplay(newState); } else if(newState.equals("HUNGUP")) { + mCall.setCallState(SipCall.CALL_STATE_HUNGUP); setCallStateDisplay(newState); finish(); } else if(newState.equals("BUSY")) { + mCall.setCallState(SipCall.CALL_STATE_BUSY); setCallStateDisplay(newState); } else if(newState.equals("FAILURE")) { + mCall.setCallState(SipCall.CALL_STATE_FAILURE); setCallStateDisplay(newState); } else if(newState.equals("HOLD")) { + mCall.setCallState(SipCall.CALL_STATE_HOLD); setCallStateDisplay(newState); } else if(newState.equals("UNHOLD")) { + mCall.setCallState(SipCall.CALL_STATE_UNHOLD); setCallStateDisplay(newState); } } diff --git a/src/com/savoirfairelinux/sflphone/client/SipCall.java b/src/com/savoirfairelinux/sflphone/client/SipCall.java index 3895b979cb8313b29816d216291c4302347dfc27..6ca7d386d3f24378096d52b9f70ba7f358da9a00 100644 --- a/src/com/savoirfairelinux/sflphone/client/SipCall.java +++ b/src/com/savoirfairelinux/sflphone/client/SipCall.java @@ -332,6 +332,23 @@ public class SipCall } } + public void notifyServiceHold(ISipService service) + { + try { + service.hold(mCallInfo.mCallID); + } catch (RemoteException e) { + Log.e(TAG, "Cannot call service method", e); + } + } + + public void notifyServiceUnhold(ISipService service) + { + try { + service.unhold(mCallInfo.mCallID); + } catch (RemoteException e) { + Log.e(TAG, "Cannot call service method", e); + } + } public void addToConference() { diff --git a/src/com/savoirfairelinux/sflphone/service/ISipService.aidl b/src/com/savoirfairelinux/sflphone/service/ISipService.aidl index 98dfc75ebb2d07eb882bc1842f8fd8bd8283124c..1bcf4b52a7f554ba06875d1f17a027df70b2d5e7 100644 --- a/src/com/savoirfairelinux/sflphone/service/ISipService.aidl +++ b/src/com/savoirfairelinux/sflphone/service/ISipService.aidl @@ -5,6 +5,8 @@ interface ISipService { void refuse(in String callID); void accept(in String callID); void hangUp(in String callID); + void hold(in String callID); + void unhold(in String callID); List getAccountList(); String addAccount(in Map accountDetails); void removeAccount(in String accoundId); diff --git a/src/com/savoirfairelinux/sflphone/service/SipService.java b/src/com/savoirfairelinux/sflphone/service/SipService.java index 3eb275850b9f003e9600a8c8f2920b3c3057ed31..c619970a940b53787ba419034a0166e757d3f998 100644 --- a/src/com/savoirfairelinux/sflphone/service/SipService.java +++ b/src/com/savoirfairelinux/sflphone/service/SipService.java @@ -109,6 +109,28 @@ public class SipService extends Service { }); } + @Override + public void hold(final String callID) { + getExecutor().execute(new SipRunnable() { + @Override + protected void doRun() throws SameThreadException { + Log.i(TAG, "SipService.hold() thread running..."); + callManagerJNI.hold(callID); + } + }); + } + + @Override + public void unhold(final String callID) { + getExecutor().execute(new SipRunnable() { + @Override + protected void doRun() throws SameThreadException { + Log.i(TAG, "SipService.unhold() thread running..."); + callManagerJNI.unhold(callID); + } + }); + } + @Override public void setAudioPlugin(final String audioPlugin) { getExecutor().execute(new SipRunnable() {