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

Commit d9674b58 authored by Miranda Kephart's avatar Miranda Kephart
Browse files

Restore non-scrolling UI on long screenshots crash

If the long screenshot capture process crashes, or the returned
long screenshot is of height zero, just restore the regular UI
(without the scroll button) and reset the timeout.

Bug: 189331695
Fix: 189331695
Test: manual
Change-Id: Icb9bc230a7151726865715722de0b670f8bf6ffb
parent 87d84d5e
Loading
Loading
Loading
Loading
+7 −0
Original line number Diff line number Diff line
@@ -662,12 +662,19 @@ public class ScreenshotController {
                            mScrollCaptureController.run(response);
                    future.addListener(() -> {
                        ScrollCaptureController.LongScreenshot longScreenshot;

                        try {
                            longScreenshot = future.get();
                        } catch (CancellationException
                                | InterruptedException
                                | ExecutionException e) {
                            Log.e(TAG, "Exception", e);
                            mScreenshotView.restoreNonScrollingUi();
                            return;
                        }

                        if (longScreenshot.getHeight() == 0) {
                            mScreenshotView.restoreNonScrollingUi();
                            return;
                        }

+17 −0
Original line number Diff line number Diff line
@@ -851,6 +851,23 @@ public class ScreenshotView extends FrameLayout implements
        anim.start();
    }

    void restoreNonScrollingUi() {
        mScrollChip.setVisibility(View.GONE);
        mScrollablePreview.setVisibility(View.GONE);
        mScrollingScrim.setVisibility(View.GONE);

        if (mAccessibilityManager.isEnabled()) {
            mDismissButton.setVisibility(View.VISIBLE);
        }
        mActionsContainer.setVisibility(View.VISIBLE);
        mBackgroundProtection.setVisibility(View.VISIBLE);
        mActionsContainerBackground.setVisibility(View.VISIBLE);
        mScreenshotPreviewBorder.setVisibility(View.VISIBLE);
        mScreenshotPreview.setVisibility(View.VISIBLE);
        // reset the timeout
        mCallbacks.onUserInteraction();
    }

    boolean isDismissing() {
        return (mDismissAnimation != null && mDismissAnimation.isRunning());
    }