pip: fix issue with preview overlay

pip mode now displays normally. Issues with aspect ratio will be fixed in another patch.

Change-Id: I7eec74cd94b847181a9600c76f5563ae30f10666
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 747ee60..7e98c6f 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 @@
 
     private MenuItem dialPadBtn = null;
     private boolean restartVideo = false;
+    private boolean restartPreview = false;
     private PowerManager.WakeLock mScreenWakeLock;
     private int mCurrentOrientation = 0;
 
@@ -242,8 +243,13 @@
     @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 @@
         if (binding.videoSurface.getVisibility() == View.VISIBLE) {
             restartVideo = true;
         }
+        if (binding.previewContainer.getVisibility() == View.VISIBLE) {
+            restartPreview = true;
+        }
     }
 
     @Nullable
@@ -449,10 +458,9 @@
     }
 
     @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 492f98c..da27b6b 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 @@
     }
 
     @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 @@
             //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 6b80fd7..bae5ae7 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 @@
     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 @@
             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 @@
         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 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 2b06cf9..4fd3a3f 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 @@
 
     void displayContactBubble(boolean display);
 
-    void displayVideoSurface(boolean display);
+    void displayVideoSurface(boolean displayVideoSurface, boolean displayPreviewContainer);
 
     void displayPreviewSurface(boolean display);