diff --git a/ring-android/app/src/main/java/cx/ring/fragments/CallFragment.java b/ring-android/app/src/main/java/cx/ring/fragments/CallFragment.java index 747ee6076c020fd30b3e0509e99ac03fc2313700..7e98c6f0f08bafcb86aeb8782e9b8861ff9cd147 100644 --- a/ring-android/app/src/main/java/cx/ring/fragments/CallFragment.java +++ b/ring-android/app/src/main/java/cx/ring/fragments/CallFragment.java @@ -111,6 +111,7 @@ public class CallFragment extends BaseSupportFragment<CallPresenter> implements private MenuItem dialPadBtn = null; private boolean restartVideo = false; + private boolean restartPreview = false; private PowerManager.WakeLock mScreenWakeLock; private int mCurrentOrientation = 0; @@ -242,8 +243,13 @@ public class CallFragment extends BaseSupportFragment<CallPresenter> implements @Override public void onStart() { super.onStart(); - if (restartVideo) { - displayVideoSurface(true); + if (restartVideo && restartPreview) { + displayVideoSurface(true, !presenter.isPipMode()); + restartVideo = false; + restartPreview = false; + } + else if (restartVideo) { + displayVideoSurface(true, false); restartVideo = false; } } @@ -254,6 +260,9 @@ public class CallFragment extends BaseSupportFragment<CallPresenter> implements if (binding.videoSurface.getVisibility() == View.VISIBLE) { restartVideo = true; } + if (binding.previewContainer.getVisibility() == View.VISIBLE) { + restartPreview = true; + } } @Nullable @@ -449,10 +458,9 @@ public class CallFragment extends BaseSupportFragment<CallPresenter> implements } @Override - public void displayVideoSurface(final boolean display) { - binding.videoSurface.setVisibility(display ? View.VISIBLE : View.GONE); - binding.previewContainer.setVisibility(mDeviceRuntimeService.hasVideoPermission() && display ? View.VISIBLE : View.GONE); - + public void displayVideoSurface(final boolean displayVideoSurface, final boolean displayPreviewContainer) { + binding.videoSurface.setVisibility(displayVideoSurface ? View.VISIBLE : View.GONE); + binding.previewContainer.setVisibility(displayPreviewContainer ? View.VISIBLE : View.GONE); updateMenu(); } diff --git a/ring-android/app/src/main/java/cx/ring/tv/call/TVCallFragment.java b/ring-android/app/src/main/java/cx/ring/tv/call/TVCallFragment.java index 492f98c0661fba8dc5fe34e3e25974d33f21e9fc..da27b6b5640a2fe0982549d8edfd3bf5a02e1763 100644 --- a/ring-android/app/src/main/java/cx/ring/tv/call/TVCallFragment.java +++ b/ring-android/app/src/main/java/cx/ring/tv/call/TVCallFragment.java @@ -262,9 +262,9 @@ public class TVCallFragment extends BaseFragment<CallPresenter> implements CallV } @Override - public void displayVideoSurface(final boolean display) { - binding.videoSurface.setVisibility(display ? View.VISIBLE : View.GONE); - binding.previewContainer.setVisibility(mDeviceRuntimeService.hasVideoPermission() && display ? View.VISIBLE : View.GONE); + public void displayVideoSurface(final boolean displayVideoSurface, final boolean displayPreviewContainer) { + binding.videoSurface.setVisibility(displayVideoSurface ? View.VISIBLE : View.GONE); + binding.previewContainer.setVisibility(displayPreviewContainer ? View.VISIBLE : View.GONE); } @Override @@ -274,9 +274,8 @@ public class TVCallFragment extends BaseFragment<CallPresenter> implements CallV //mVideoPreview.setZOrderMediaOverlay(true); binding.videoSurface.setZOrderMediaOverlay(false); } else { - binding.videoSurface.setZOrderMediaOverlay(false); - //mVideoSurface.setZOrderMediaOverlay(true); - //mVideoSurface.setZOrderOnTop(true); + binding.videoSurface.setZOrderMediaOverlay(true); + binding.videoSurface.setZOrderOnTop(true); } } diff --git a/ring-android/libringclient/src/main/java/cx/ring/call/CallPresenter.java b/ring-android/libringclient/src/main/java/cx/ring/call/CallPresenter.java index 6b80fd7653aa124ff6c01b65ac89603c36ac36ee..bae5ae7b3bea62d046c12d1d2137b49002236f02 100644 --- a/ring-android/libringclient/src/main/java/cx/ring/call/CallPresenter.java +++ b/ring-android/libringclient/src/main/java/cx/ring/call/CallPresenter.java @@ -53,6 +53,7 @@ public class CallPresenter extends RootPresenter<CallView> { private boolean mOnGoingCall = false; private boolean mAudioOnly = true; private boolean permissionChanged = false; + private boolean pipIsActive = false; private int videoWidth = -1; private int videoHeight = -1; @@ -298,7 +299,7 @@ public class CallPresenter extends RootPresenter<CallView> { view.updateMenu(); if (!mAudioOnly) { mHardwareService.setPreviewSettings(); - view.displayVideoSurface(true); + view.displayVideoSurface(true, mDeviceRuntimeService.hasVideoPermission()); if(permissionChanged) { mHardwareService.switchInput(mSipCall.getCallId(), permissionChanged); permissionChanged = false; @@ -339,9 +340,9 @@ public class CallPresenter extends RootPresenter<CallView> { Log.d(TAG, "VIDEO_EVENT: " + event.start + " " + event.callId + " " + event.w + "x" + event.h); if (event.start) { - getView().displayVideoSurface(true); + getView().displayVideoSurface(true, !isPipMode() && mDeviceRuntimeService.hasVideoPermission()); } else if (mSipCall != null && mSipCall.getCallId().equals(event.callId)) { - getView().displayVideoSurface(event.started); + getView().displayVideoSurface(event.started, event.started && !isPipMode() && mDeviceRuntimeService.hasVideoPermission()); if (event.started) { videoWidth = event.w; videoHeight = event.h; @@ -391,12 +392,19 @@ public class CallPresenter extends RootPresenter<CallView> { } } + public boolean isPipMode() { + return pipIsActive; + } + public void pipModeChanged(boolean pip) { + pipIsActive = pip; if (pip) { getView().displayHangupButton(false); getView().displayPreviewSurface(false); + getView().displayVideoSurface(true, false); } else { getView().displayPreviewSurface(true); + getView().displayVideoSurface(true, mDeviceRuntimeService.hasVideoPermission()); } } diff --git a/ring-android/libringclient/src/main/java/cx/ring/call/CallView.java b/ring-android/libringclient/src/main/java/cx/ring/call/CallView.java index 2b06cf9b959c53df6341ab1b2b2cdb03fc9c6959..4fd3a3f1f6b05cdf98cc30bfa2cd5c199e7dbe59 100644 --- a/ring-android/libringclient/src/main/java/cx/ring/call/CallView.java +++ b/ring-android/libringclient/src/main/java/cx/ring/call/CallView.java @@ -26,7 +26,7 @@ public interface CallView { void displayContactBubble(boolean display); - void displayVideoSurface(boolean display); + void displayVideoSurface(boolean displayVideoSurface, boolean displayPreviewContainer); void displayPreviewSurface(boolean display);