From 8de060aab89af3d540b90a1d6272d3073d995746 Mon Sep 17 00:00:00 2001 From: Matt Casey Date: Tue, 15 Jun 2021 14:20:39 -0400 Subject: [PATCH] Disallow long screenshots on low-memory devices Bug: 191139781 Change-Id: I3c78a1fa903f40677e273bf1f5f61c1dd0d9c1cb --- .../systemui/screenshot/ScreenshotController.java | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/packages/SystemUI/src/com/android/systemui/screenshot/ScreenshotController.java b/packages/SystemUI/src/com/android/systemui/screenshot/ScreenshotController.java index 24cca91ea3f30..499af2f6f8699 100644 --- a/packages/SystemUI/src/com/android/systemui/screenshot/ScreenshotController.java +++ b/packages/SystemUI/src/com/android/systemui/screenshot/ScreenshotController.java @@ -33,6 +33,7 @@ import static java.util.Objects.requireNonNull; import android.animation.Animator; import android.animation.AnimatorListenerAdapter; import android.annotation.Nullable; +import android.app.ActivityManager; import android.app.ActivityOptions; import android.app.ExitTransitionCoordinator; import android.app.ExitTransitionCoordinator.ExitTransitionCallbacks; @@ -253,6 +254,7 @@ public class ScreenshotController { private final DisplayManager mDisplayManager; private final ScrollCaptureController mScrollCaptureController; private final LongScreenshotData mLongScreenshotHolder; + private final boolean mIsLowRamDevice; private ScreenshotView mScreenshotView; private Bitmap mScreenBitmap; @@ -297,7 +299,8 @@ public class ScreenshotController { ImageExporter imageExporter, @Main Executor mainExecutor, ScrollCaptureController scrollCaptureController, - LongScreenshotData longScreenshotHolder) { + LongScreenshotData longScreenshotHolder, + ActivityManager activityManager) { mScreenshotSmartActions = screenshotSmartActions; mNotificationsController = screenshotNotificationsController; mScrollCaptureClient = scrollCaptureClient; @@ -306,6 +309,7 @@ public class ScreenshotController { mMainExecutor = mainExecutor; mScrollCaptureController = scrollCaptureController; mLongScreenshotHolder = longScreenshotHolder; + mIsLowRamDevice = activityManager.isLowRamDevice(); mBgExecutor = Executors.newSingleThreadExecutor(); mDisplayManager = requireNonNull(context.getSystemService(DisplayManager.class)); @@ -621,6 +625,10 @@ public class ScreenshotController { } private void requestScrollCapture() { + if (!allowLongScreenshots()) { + Log.d(TAG, "Long screenshots not supported on this device"); + return; + } mScrollCaptureClient.setHostWindowToken(mWindow.getDecorView().getWindowToken()); if (mLastScrollCaptureRequest != null) { mLastScrollCaptureRequest.cancel(true); @@ -982,6 +990,10 @@ public class ScreenshotController { return mDisplayManager.getDisplay(DEFAULT_DISPLAY); } + private boolean allowLongScreenshots() { + return !mIsLowRamDevice; + } + /** Does the aspect ratio of the bitmap with insets removed match the bounds. */ private static boolean aspectRatiosMatch(Bitmap bitmap, Insets bitmapInsets, Rect screenBounds) {