Merge "Disallow long screenshots on low-memory devices" into sc-dev

This commit is contained in:
Matt Casey
2021-06-28 19:10:55 +00:00
committed by Android (Google) Code Review

View File

@@ -33,6 +33,7 @@ import static java.util.Objects.requireNonNull;
import android.animation.Animator; import android.animation.Animator;
import android.animation.AnimatorListenerAdapter; import android.animation.AnimatorListenerAdapter;
import android.annotation.Nullable; import android.annotation.Nullable;
import android.app.ActivityManager;
import android.app.ActivityOptions; import android.app.ActivityOptions;
import android.app.ExitTransitionCoordinator; import android.app.ExitTransitionCoordinator;
import android.app.ExitTransitionCoordinator.ExitTransitionCallbacks; import android.app.ExitTransitionCoordinator.ExitTransitionCallbacks;
@@ -253,6 +254,7 @@ public class ScreenshotController {
private final DisplayManager mDisplayManager; private final DisplayManager mDisplayManager;
private final ScrollCaptureController mScrollCaptureController; private final ScrollCaptureController mScrollCaptureController;
private final LongScreenshotData mLongScreenshotHolder; private final LongScreenshotData mLongScreenshotHolder;
private final boolean mIsLowRamDevice;
private ScreenshotView mScreenshotView; private ScreenshotView mScreenshotView;
private Bitmap mScreenBitmap; private Bitmap mScreenBitmap;
@@ -297,7 +299,8 @@ public class ScreenshotController {
ImageExporter imageExporter, ImageExporter imageExporter,
@Main Executor mainExecutor, @Main Executor mainExecutor,
ScrollCaptureController scrollCaptureController, ScrollCaptureController scrollCaptureController,
LongScreenshotData longScreenshotHolder) { LongScreenshotData longScreenshotHolder,
ActivityManager activityManager) {
mScreenshotSmartActions = screenshotSmartActions; mScreenshotSmartActions = screenshotSmartActions;
mNotificationsController = screenshotNotificationsController; mNotificationsController = screenshotNotificationsController;
mScrollCaptureClient = scrollCaptureClient; mScrollCaptureClient = scrollCaptureClient;
@@ -306,6 +309,7 @@ public class ScreenshotController {
mMainExecutor = mainExecutor; mMainExecutor = mainExecutor;
mScrollCaptureController = scrollCaptureController; mScrollCaptureController = scrollCaptureController;
mLongScreenshotHolder = longScreenshotHolder; mLongScreenshotHolder = longScreenshotHolder;
mIsLowRamDevice = activityManager.isLowRamDevice();
mBgExecutor = Executors.newSingleThreadExecutor(); mBgExecutor = Executors.newSingleThreadExecutor();
mDisplayManager = requireNonNull(context.getSystemService(DisplayManager.class)); mDisplayManager = requireNonNull(context.getSystemService(DisplayManager.class));
@@ -621,6 +625,10 @@ public class ScreenshotController {
} }
private void requestScrollCapture() { private void requestScrollCapture() {
if (!allowLongScreenshots()) {
Log.d(TAG, "Long screenshots not supported on this device");
return;
}
mScrollCaptureClient.setHostWindowToken(mWindow.getDecorView().getWindowToken()); mScrollCaptureClient.setHostWindowToken(mWindow.getDecorView().getWindowToken());
if (mLastScrollCaptureRequest != null) { if (mLastScrollCaptureRequest != null) {
mLastScrollCaptureRequest.cancel(true); mLastScrollCaptureRequest.cancel(true);
@@ -982,6 +990,10 @@ public class ScreenshotController {
return mDisplayManager.getDisplay(DEFAULT_DISPLAY); return mDisplayManager.getDisplay(DEFAULT_DISPLAY);
} }
private boolean allowLongScreenshots() {
return !mIsLowRamDevice;
}
/** Does the aspect ratio of the bitmap with insets removed match the bounds. */ /** Does the aspect ratio of the bitmap with insets removed match the bounds. */
private static boolean aspectRatiosMatch(Bitmap bitmap, Insets bitmapInsets, private static boolean aspectRatiosMatch(Bitmap bitmap, Insets bitmapInsets,
Rect screenBounds) { Rect screenBounds) {