diff --git a/app/src/main/java/com/nynja/mobile/communicator/mvp/presenters/ConferenceCallPresenter.java b/app/src/main/java/com/nynja/mobile/communicator/mvp/presenters/ConferenceCallPresenter.java index 0e76c780474cd758cc4abbd8af242fdbb029b88c..ce146e11bdb1e4120a0d229f908d2c2d61ec4438 100644 --- a/app/src/main/java/com/nynja/mobile/communicator/mvp/presenters/ConferenceCallPresenter.java +++ b/app/src/main/java/com/nynja/mobile/communicator/mvp/presenters/ConferenceCallPresenter.java @@ -446,6 +446,10 @@ public class ConferenceCallPresenter extends ConferenceSDKPresenter if (getAttachedViews().size() == 0) return; ActiveConferenceCall call = mDataManager.getConferenceSDK().getActiveConference(); if (call != null && !mDataManager.getConferenceSDK().isP2P()) { + if (isCameraRunning()) { + getViewState().showStopOwnCameraFirstgAlert(); + return; + } if (/*!call.isModerator() &&*/ !isScreenSharing() && hasRemoteScreenShare()) { getViewState().showFirstStopScreenSharingWarning(call); return; @@ -464,6 +468,23 @@ public class ConferenceCallPresenter extends ConferenceSDKPresenter } } + public void stopCameraAndContinueWithScreenshare() { + if (getAttachedViews().size() == 0) return; + if (!isScreenSharing()) { + stopCameraCapture(); + //startScreenCapture(); + getViewState().continueWithScreenshare(); + } + } + + public void continueWithScreenshare() { + if (getAttachedViews().size() == 0) return; + if (!isScreenSharing()) { + startScreenCapture(); + getViewState().setScreenShareOn(true); + } + } + public String getInvitationLink() { return mDataManager.getConferenceSDK().getActiveConferenceJoinLink(); } @@ -555,11 +576,22 @@ public class ConferenceCallPresenter extends ConferenceSDKPresenter } } + public void tryStartCameraCapture() { + if (getAttachedViews().size() == 0) return; + ActiveConferenceCall call = mDataManager.getConferenceSDK().getActiveConference(); + if (call != null && !mDataManager.getConferenceSDK().isP2P()) { + if (!isScreenSharing()) { + mDataManager.getConferenceSDK().startCameraCapture(); + return; + } + } + getViewState().showStopScreenShareFirstAlert(); + } + public void startCameraCapture() { mDataManager.getConferenceSDK().startCameraCapture(); } - public void stopCameraCapture() { mDataManager.getConferenceSDK().stopCameraCapture(); } diff --git a/app/src/main/java/com/nynja/mobile/communicator/mvp/view/CallView.java b/app/src/main/java/com/nynja/mobile/communicator/mvp/view/CallView.java index d718d095ffe79e3494a69ddd827a6afee6314c79..c2c9ea0f0fe0bd5a1ace837d206eeb494d65fe7e 100644 --- a/app/src/main/java/com/nynja/mobile/communicator/mvp/view/CallView.java +++ b/app/src/main/java/com/nynja/mobile/communicator/mvp/view/CallView.java @@ -83,4 +83,11 @@ public interface CallView extends ErrorMvpView { void setScreenShareOn(boolean shareOn); void showFirstStopScreenSharingWarning(ActiveConferenceCall call); + + void showStopOwnCameraFirstgAlert(); + + void showStopScreenShareFirstAlert(); + + void continueWithScreenshare(); + } diff --git a/app/src/main/java/com/nynja/mobile/communicator/ui/fragments/conference/ConferenceCallFragment.java b/app/src/main/java/com/nynja/mobile/communicator/ui/fragments/conference/ConferenceCallFragment.java index 00e46d5ecc234d8973d968803785a8a761e5b839..3441886a6b38f1b7c9bd73ad3fdc2ecbc3d541ad 100644 --- a/app/src/main/java/com/nynja/mobile/communicator/ui/fragments/conference/ConferenceCallFragment.java +++ b/app/src/main/java/com/nynja/mobile/communicator/ui/fragments/conference/ConferenceCallFragment.java @@ -373,7 +373,7 @@ public class ConferenceCallFragment extends BaseFragment implements CallView, .subscribe(permission -> { if (permission.granted) { videoOnOf.setChecked(true); - mConferencePresenter.startCameraCapture(); + mConferencePresenter.tryStartCameraCapture(); } else if (!permission.shouldShowRequestPermissionRationale) { PermissionHelper.getInstance().showPermissionDialog(getActivity(), mConferencePresenter.getPermissionDialogListener(), Manifest.permission.CAMERA); @@ -1602,6 +1602,9 @@ public class ConferenceCallFragment extends BaseFragment implements CallView, @Override public void showFirstStopScreenSharingWarning(ActiveConferenceCall call){ + if (getActivity() == null || !isAdded() || audioSpeaker == null) { + return; + } if (call == null) return; final String msg = getString(R.string.call_ask_to_stop_ss_first, call.getConferenceSSOwner()); getActivity().runOnUiThread(() -> DialogFactory.showAlert(getActivity(), @@ -1609,6 +1612,38 @@ public class ConferenceCallFragment extends BaseFragment implements CallView, getString(R.string.call_conference_alert_title), null)); } + + @Override + public void showStopOwnCameraFirstgAlert() { + if (getActivity() == null || !isAdded() || audioSpeaker == null) { + return; + } + DialogFactory.showAlert(getActivity(), getString(R.string.call_conference_alert_title), + getString(R.string.call_start_conference_ss_alert), + getString(R.string.call_continue_button), getString(R.string.cancel), + (dialog, which) -> mConferencePresenter.stopCameraAndContinueWithScreenshare(), + null); + } + + @Override + public void showStopScreenShareFirstAlert() { + if (getActivity() == null || !isAdded() || audioSpeaker == null) { + return; + } + videoOnOf.setChecked(false); + DialogFactory.showAlert(getActivity(), + getString(R.string.call_start_conference_camera_alert), + getString(R.string.call_conference_alert_title), null); + } + + @Override + public void continueWithScreenshare() { + new Handler(Looper.getMainLooper()).postDelayed(() -> { + videoOnOf.setChecked(false); + mConferencePresenter.continueWithScreenshare(); + }, Consts.DELAY_300); + } + @Override public void onBluetoothDeviceDisconnected() { //mConferencePresenter.bluetoothDisconnected(); diff --git a/app/src/main/res/values-en/strings.xml b/app/src/main/res/values-en/strings.xml index 7c4abf80194ca6538139e2bf5e7c2c5c067a9a00..4b8c7a2ef62afcd0871ab972d4c5234d6ba40b44 100644 --- a/app/src/main/res/values-en/strings.xml +++ b/app/src/main/res/values-en/strings.xml @@ -1337,4 +1337,8 @@ Cannot start screen share because it has been already started by another participant Start camera is not available for groups + To share your screen, you need to stop your camera first. Tap \"Continue\" below and we will stop your camera for you and start screen sharing. + To start your camera, you need to stop screen sharing first. + Continue + diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index bf1a90442a94532e32da8e8818de54b21a222cc4..a93d6de9c0065509c19642db2785d60894cecef2 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -1336,4 +1336,8 @@ Cannot start screen share because it has been already started by another participant Start camera is not available for groups + To share your screen, you need to stop your camera first. Tap \"Continue\" below and we will stop your camera for you and start screen sharing. + To start your camera, you need to stop screen sharing first. + Continue + diff --git a/app/src/main/res/values-ko/strings.xml b/app/src/main/res/values-ko/strings.xml index c13526f956d6aaf5007e71a5a85c4057d135df5e..3fb29a0c692d48716fa723198251cb3c45944326 100644 --- a/app/src/main/res/values-ko/strings.xml +++ b/app/src/main/res/values-ko/strings.xml @@ -1336,4 +1336,8 @@ Cannot start screen share because it has been already started by another participant Start camera is not available for groups + To share your screen, you need to stop your camera first. Tap \"Continue\" below and we will stop your camera for you and start screen sharing. + To start your camera, you need to stop screen sharing first. + Continue + diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 355a75c596315f1d028833774587c7d919f9ae17..4716478128cd8713aa676fa53c4df514a509cfac 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -1336,4 +1336,8 @@ Cannot start screen share because it has been already started by another participant Start camera is not available for groups + To share your screen, you need to stop your camera first. Tap \"Continue\" below and we will stop your camera for you and start screen sharing. + To start your camera, you need to stop screen sharing first. + Continue + diff --git a/app/src/main/res/values-zh/strings.xml b/app/src/main/res/values-zh/strings.xml index 355a75c596315f1d028833774587c7d919f9ae17..4716478128cd8713aa676fa53c4df514a509cfac 100644 --- a/app/src/main/res/values-zh/strings.xml +++ b/app/src/main/res/values-zh/strings.xml @@ -1336,4 +1336,8 @@ Cannot start screen share because it has been already started by another participant Start camera is not available for groups + To share your screen, you need to stop your camera first. Tap \"Continue\" below and we will stop your camera for you and start screen sharing. + To start your camera, you need to stop screen sharing first. + Continue + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 398d5866d8d849f76f925c7fa576a6b013f35ed5..d18544ed30fecdf3ed420eb97e5ff3aae882f39b 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1338,4 +1338,8 @@ Cannot start screen share because it has been already started by another participant Start camera is not available for groups + To share your screen, you need to stop your camera first. Tap \"Continue\" below and we will stop your camera for you and start screen sharing. + To start your camera, you need to stop screen sharing first. + Continue +