From d3ad765b047cdc6d62d51c6eb28be3140f494f86 Mon Sep 17 00:00:00 2001 From: Mark Renouf Date: Thu, 18 Mar 2021 11:44:57 -0400 Subject: [PATCH] Fix long screenshot to only trigger when available Only show the scroll chip when response.isConnected() Previously the client only returned a response if available. It's now returned in any case with more information available in the negative case. Bug: 183107714 Test: Open non-scrollable activity, take screenshot Change-Id: I1258510d6fabab845e68f04861bb0f2b190069c7 --- .../systemui/screenshot/ScreenshotController.java | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/packages/SystemUI/src/com/android/systemui/screenshot/ScreenshotController.java b/packages/SystemUI/src/com/android/systemui/screenshot/ScreenshotController.java index 798a063f15b94..c1ae29230e616 100644 --- a/packages/SystemUI/src/com/android/systemui/screenshot/ScreenshotController.java +++ b/packages/SystemUI/src/com/android/systemui/screenshot/ScreenshotController.java @@ -25,6 +25,7 @@ import static com.android.systemui.screenshot.LogConfig.DEBUG_ANIM; import static com.android.systemui.screenshot.LogConfig.DEBUG_CALLBACK; import static com.android.systemui.screenshot.LogConfig.DEBUG_DISMISS; import static com.android.systemui.screenshot.LogConfig.DEBUG_INPUT; +import static com.android.systemui.screenshot.LogConfig.DEBUG_SCROLL; import static com.android.systemui.screenshot.LogConfig.DEBUG_UI; import static com.android.systemui.screenshot.LogConfig.DEBUG_WINDOW; import static com.android.systemui.screenshot.LogConfig.logTag; @@ -90,6 +91,7 @@ import com.android.systemui.util.DeviceConfigProxy; import com.google.common.util.concurrent.ListenableFuture; import java.util.List; +import java.util.concurrent.CancellationException; import java.util.concurrent.ExecutionException; import java.util.concurrent.Executor; import java.util.concurrent.ExecutorService; @@ -570,6 +572,15 @@ public class ScreenshotController { mLastScrollCaptureResponse.close(); } mLastScrollCaptureResponse = responseFuture.get(); + if (!mLastScrollCaptureResponse.isConnected()) { + // No connection means that the target window wasn't found + // or that it cannot support scroll capture. + Log.d(TAG, "ScrollCapture: " + mLastScrollCaptureResponse.getDescription() + " [" + + mLastScrollCaptureResponse.getWindowTitle() + "]"); + return; + } + Log.d(TAG, "ScrollCapture: connected to window [" + + mLastScrollCaptureResponse.getWindowTitle() + "]"); final Intent intent = new Intent(mContext, LongScreenshotActivity.class); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP); intent.putExtra(LongScreenshotActivity.EXTRA_CAPTURE_RESPONSE, @@ -580,6 +591,8 @@ public class ScreenshotController { mContext.startActivity(intent); dismissScreenshot(false); }); + } catch (CancellationException e) { + // Ignore } catch (InterruptedException | ExecutionException e) { Log.e(TAG, "requestScrollCapture failed", e); }