Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit da72d6da authored by Matt Casey's avatar Matt Casey
Browse files

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
parent 825d39e0
Loading
Loading
Loading
Loading
+16 −7
Original line number Diff line number Diff line
@@ -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) {
+4 −0
Original line number Diff line number Diff line
@@ -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.
     *