From c1532d4d517c7e0a2ffc2992facb5c52d7f6ed8c Mon Sep 17 00:00:00 2001 From: Rayan Osseiran <rayan.osseiran@savoirfairelinux.com> Date: Wed, 5 Jun 2019 13:17:53 -0400 Subject: [PATCH] pip: fix issue with preview overlay pip mode now displays normally. Issues with aspect ratio will be fixed in another patch. Change-Id: I7eec74cd94b847181a9600c76f5563ae30f10666 --- .../java/cx/ring/fragments/CallFragment.java | 20 +++++++++++++------ .../java/cx/ring/tv/call/TVCallFragment.java | 11 +++++----- .../main/java/cx/ring/call/CallPresenter.java | 14 ++++++++++--- .../src/main/java/cx/ring/call/CallView.java | 2 +- 4 files changed, 31 insertions(+), 16 deletions(-) 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 747ee6076..7e98c6f0f 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 492f98c06..da27b6b56 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 6b80fd765..bae5ae7b3 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 2b06cf9b9..4fd3a3f1f 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); -- GitLab