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.
*