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
This commit is contained in:
Miranda Kephart
2021-06-30 15:53:22 -04:00
parent 87d84d5e23
commit d9674b5892
2 changed files with 24 additions and 0 deletions

View File

@@ -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;
}

View File

@@ -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());
}