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
This commit is contained in:
@@ -554,16 +554,15 @@ public class ScreenshotController {
|
||||
// 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 @@ public class ScreenshotController {
|
||||
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) {
|
||||
|
||||
@@ -204,6 +204,10 @@ public class ScreenshotView extends FrameLayout implements
|
||||
mSwipeDismissHandler = new SwipeDismissHandler();
|
||||
}
|
||||
|
||||
public void hideScrollChip() {
|
||||
mScrollChip.setVisibility(View.GONE);
|
||||
}
|
||||
|
||||
/**
|
||||
* Called to display the scroll action chip when support is detected.
|
||||
*
|
||||
|
||||
Reference in New Issue
Block a user