Request scroll capture when the screen rotates.

Show/hide the scroll capture button based upon availability of
scrollable content in the underlying app.

Needed a little delay after rotation to allow the underlying app to
adjust to the new orientation (otherwise it was always not scrollable).

Bug: 185897865
Test: Take screenshot, observe capture more, rotate, tap capture more.
Test: Take screenshot of an activity that scrolls in portrait but not
      landcape, rotate the phone and observe the capture more button
      appearing and disappearing appropriately.
Change-Id: I0015adee77e576549509468486936c57ec62a2fd
diff --git a/packages/SystemUI/src/com/android/systemui/screenshot/ScreenshotController.java b/packages/SystemUI/src/com/android/systemui/screenshot/ScreenshotController.java
index 1f9221c..eaa6659 100644
--- a/packages/SystemUI/src/com/android/systemui/screenshot/ScreenshotController.java
+++ b/packages/SystemUI/src/com/android/systemui/screenshot/ScreenshotController.java
@@ -554,16 +554,15 @@
         // Wait until this window is attached to request because it is
         // the reference used to locate the target window (below).
         withWindowAttached(() -> {
-            mScrollCaptureClient.setHostWindowToken(mWindow.getDecorView().getWindowToken());
-            if (mLastScrollCaptureRequest != null) {
-                mLastScrollCaptureRequest.cancel(true);
-            }
-            mLastScrollCaptureRequest = mScrollCaptureClient.request(DEFAULT_DISPLAY);
-            mLastScrollCaptureRequest.addListener(() ->
-                    onScrollCaptureResponseReady(mLastScrollCaptureRequest), mMainExecutor);
+            requestScrollCapture();
             mWindow.peekDecorView().getViewRootImpl().setActivityConfigCallback(
                     (overrideConfig, newDisplayId) -> {
                         if (mConfigChanges.applyNewConfig(mContext.getResources())) {
+                            // Hide the scroll chip until we know it's available in this orientation
+                            mScreenshotView.hideScrollChip();
+                            // Delay scroll capture eval a bit to allow the underlying activity
+                            // to set up in the new orientation.
+                            mScreenshotHandler.postDelayed(this::requestScrollCapture, 150);
                             updateDisplayCutout();
                         }
                     });
@@ -593,6 +592,16 @@
         cancelTimeout(); // restarted after animation
     }
 
+    private void requestScrollCapture() {
+        mScrollCaptureClient.setHostWindowToken(mWindow.getDecorView().getWindowToken());
+        if (mLastScrollCaptureRequest != null) {
+            mLastScrollCaptureRequest.cancel(true);
+        }
+        mLastScrollCaptureRequest = mScrollCaptureClient.request(DEFAULT_DISPLAY);
+        mLastScrollCaptureRequest.addListener(() ->
+                onScrollCaptureResponseReady(mLastScrollCaptureRequest), mMainExecutor);
+    }
+
     private void onScrollCaptureResponseReady(Future<ScrollCaptureResponse> responseFuture) {
         try {
             if (mLastScrollCaptureResponse != null) {
diff --git a/packages/SystemUI/src/com/android/systemui/screenshot/ScreenshotView.java b/packages/SystemUI/src/com/android/systemui/screenshot/ScreenshotView.java
index facebee..77e1d15 100644
--- a/packages/SystemUI/src/com/android/systemui/screenshot/ScreenshotView.java
+++ b/packages/SystemUI/src/com/android/systemui/screenshot/ScreenshotView.java
@@ -204,6 +204,10 @@
         mSwipeDismissHandler = new SwipeDismissHandler();
     }
 
+    public void hideScrollChip() {
+        mScrollChip.setVisibility(View.GONE);
+    }
+
     /**
      * Called to display the scroll action chip when support is detected.
      *