Merge "Fix for button flickering issue when video call screen rotates"
am: 890dcce1a5

Change-Id: I5312fe5725cf8c7055f34fdda1149e940b535c38
diff --git a/java/com/android/incallui/VideoCallPresenter.java b/java/com/android/incallui/VideoCallPresenter.java
index 1700d53..0d1d1a5 100644
--- a/java/com/android/incallui/VideoCallPresenter.java
+++ b/java/com/android/incallui/VideoCallPresenter.java
@@ -431,6 +431,11 @@
     InCallPresenter.getInstance().getInCallCameraManager().onCameraPermissionGranted();
   }
 
+  @Override
+  public boolean isFullscreen() {
+    return InCallPresenter.getInstance().isFullscreen();
+  }
+
   /**
    * Called when the user interacts with the UI. If a fullscreen timer is pending then we start the
    * timer from scratch to avoid having the UI disappear while the user is interacting with it.
diff --git a/java/com/android/incallui/video/impl/VideoCallFragment.java b/java/com/android/incallui/video/impl/VideoCallFragment.java
index 3a355c4..edfc17c 100644
--- a/java/com/android/incallui/video/impl/VideoCallFragment.java
+++ b/java/com/android/incallui/video/impl/VideoCallFragment.java
@@ -306,6 +306,30 @@
             updatePreviewOffView();
           }
         });
+
+    controls.addOnLayoutChangeListener(
+        new OnLayoutChangeListener() {
+          @Override
+          public void onLayoutChange(
+              View v,
+              int left,
+              int top,
+              int right,
+              int bottom,
+              int oldLeft,
+              int oldTop,
+              int oldRight,
+              int oldBottom) {
+            LogUtil.i("VideoCallFragment.onLayoutChange", "controls layout changed");
+            if (getActivity() != null && getView() != null) {
+              controls.removeOnLayoutChangeListener(this);
+              if (isInFullscreenMode) {
+                enterFullscreenMode();
+              }
+            }
+          }
+        });
+
     return view;
   }
 
@@ -334,6 +358,12 @@
     inCallButtonUiDelegate.onInCallButtonUiReady(this);
 
     view.setOnSystemUiVisibilityChangeListener(this);
+
+    if (videoCallScreenDelegate.isFullscreen()) {
+        controls.setVisibility(View.INVISIBLE);
+        contactGridManager.getContainerView().setVisibility(View.INVISIBLE);
+        endCallButton.setVisibility(View.INVISIBLE);
+    }
   }
 
   @Override
@@ -420,6 +450,13 @@
         .translationY(0)
         .setInterpolator(linearOutSlowInInterpolator)
         .alpha(1)
+        .withStartAction(
+            new Runnable() {
+              @Override
+              public void run() {
+                controls.setVisibility(View.VISIBLE);
+              }
+            })
         .start();
 
     // Animate onHold to the shown state.
diff --git a/java/com/android/incallui/video/protocol/VideoCallScreenDelegate.java b/java/com/android/incallui/video/protocol/VideoCallScreenDelegate.java
index 55ea23f..9dd5450 100644
--- a/java/com/android/incallui/video/protocol/VideoCallScreenDelegate.java
+++ b/java/com/android/incallui/video/protocol/VideoCallScreenDelegate.java
@@ -48,4 +48,6 @@
   void setSurfaceViews(SurfaceView preview, SurfaceView remote);
 
   int getDeviceOrientation();
+
+  boolean isFullscreen();
 }