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