From 1724555a8cc1b54995e6cf83fc8618871ee44f67 Mon Sep 17 00:00:00 2001 From: Guillaume Beraudo Date: Thu, 13 Oct 2011 15:57:31 +0200 Subject: [PATCH] Try to resume call, enter conf on URI picker return. --- src/org/linphone/ConferenceActivity.java | 34 ++++++++++++++++++++---- 1 file changed, 29 insertions(+), 5 deletions(-) diff --git a/src/org/linphone/ConferenceActivity.java b/src/org/linphone/ConferenceActivity.java index 5fe7de921..78e4d1bf3 100644 --- a/src/org/linphone/ConferenceActivity.java +++ b/src/org/linphone/ConferenceActivity.java @@ -101,11 +101,11 @@ public class ConferenceActivity extends ListActivity implements WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS); } -// private void pauseCurrentCallOrLeaveConference() { -// LinphoneCall call = lc().getCurrentCall(); -// if (call != null) lc().pauseCall(call); -// lc().leaveConference(); -// } + private void pauseCurrentCallOrLeaveConference() { + LinphoneCall call = lc().getCurrentCall(); + if (call != null) lc().pauseCall(call); + lc().leaveConference(); + } private LinphoneManagerWaitHelper waitHelper; private ToggleButton mMuteMicButton; @@ -261,7 +261,12 @@ public class ConferenceActivity extends ListActivity implements // v.setText(inConf ? R.string.in_conf : R.string.out_conf); } + private LinphoneCall activateCallOnReturnFromUriPicker; + private boolean enterConferenceOnReturnFromUriPicker; private void openUriPicker(String pickerType, int requestCode) { + activateCallOnReturnFromUriPicker = lc().getCurrentCall(); + enterConferenceOnReturnFromUriPicker = lc().isInConference(); + pauseCurrentCallOrLeaveConference(); Intent intent = new Intent().setClass(this, UriPickerActivity.class); intent.putExtra(UriPickerActivity.EXTRA_PICKER_TYPE, pickerType); startActivityForResult(intent, requestCode); @@ -693,6 +698,7 @@ public class ConferenceActivity extends ListActivity implements if (resultCode != RESULT_OK) { callToTransfer = null; Toast.makeText(this, R.string.uri_picking_canceled, Toast.LENGTH_LONG).show(); + eventuallyResumeConfOrCallOnPickerReturn(true); return; } @@ -701,6 +707,7 @@ public class ConferenceActivity extends ListActivity implements case ID_ADD_CALL: try { lc().invite(uri); + eventuallyResumeConfOrCallOnPickerReturn(false); } catch (LinphoneCoreException e) { Log.e(e); Toast.makeText(this, R.string.error_adding_new_call, Toast.LENGTH_LONG).show(); @@ -708,6 +715,11 @@ public class ConferenceActivity extends ListActivity implements break; case ID_TRANSFER_CALL: lc().transferCall(callToTransfer, uri); + // don't re-enter conference if call to transfer from conference + boolean doResume = !callToTransfer.isInConference(); + // don't resume call if it is the call to transfer + doResume &= activateCallOnReturnFromUriPicker != callToTransfer; + eventuallyResumeConfOrCallOnPickerReturn(doResume); Toast.makeText(this, R.string.transfer_started, Toast.LENGTH_LONG).show(); break; default: @@ -715,6 +727,18 @@ public class ConferenceActivity extends ListActivity implements } } + private void eventuallyResumeConfOrCallOnPickerReturn(boolean doCallConfResuming) { + if (doCallConfResuming) { + if (activateCallOnReturnFromUriPicker != null) { + lc().resumeCall(activateCallOnReturnFromUriPicker); + } else if (enterConferenceOnReturnFromUriPicker) { + lc().enterConference(); + } + } + activateCallOnReturnFromUriPicker = null; + enterConferenceOnReturnFromUriPicker = false; + } + @Override public boolean onKeyUp(int keyCode, KeyEvent event) { if (LinphoneUtils.onKeyBackGoHome(this, keyCode)) return true;