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

Commit f317b2fb authored by Melody Hsu's avatar Melody Hsu Committed by Android (Google) Code Review
Browse files

Merge "Remove deleteCaptureDisplay flags" into main

parents 5c8ea95b 43722df2
Loading
Loading
Loading
Loading
+19 −59
Original line number Diff line number Diff line
@@ -35,7 +35,6 @@ import static android.view.accessibility.AccessibilityNodeInfo.ACTION_CLICK;
import static android.view.accessibility.AccessibilityNodeInfo.ACTION_LONG_CLICK;

import static com.android.server.pm.UserManagerService.enforceCurrentUserIfVisibleBackgroundEnabled;
import static com.android.window.flags.Flags.deleteCaptureDisplay;

import android.accessibilityservice.AccessibilityGestureEvent;
import android.accessibilityservice.AccessibilityService;
@@ -62,7 +61,6 @@ import android.graphics.ParcelableColorSpace;
import android.graphics.Region;
import android.hardware.HardwareBuffer;
import android.hardware.display.DisplayManager;
import android.hardware.display.DisplayManagerInternal;
import android.hardware.usb.UsbDevice;
import android.os.Binder;
import android.os.Build;
@@ -104,7 +102,6 @@ import com.android.internal.inputmethod.IRemoteAccessibilityInputConnection;
import com.android.internal.os.SomeArgs;
import com.android.internal.util.DumpUtils;
import com.android.internal.util.function.pooled.PooledLambda;
import com.android.server.LocalServices;
import com.android.server.accessibility.AccessibilityWindowManager.RemoteAccessibilityConnection;
import com.android.server.accessibility.magnification.MagnificationProcessor;
import com.android.server.wm.WindowManagerInternal;
@@ -1513,7 +1510,6 @@ abstract class AbstractAccessibilityServiceConnection extends IAccessibilityServ
            return;
        }
        final long identity = Binder.clearCallingIdentity();
        if (deleteCaptureDisplay()) {
        try {
            ScreenCapture.ScreenCaptureListener screenCaptureListener = new
                    ScreenCapture.ScreenCaptureListener(
@@ -1534,28 +1530,10 @@ abstract class AbstractAccessibilityServiceConnection extends IAccessibilityServ
        } finally {
            Binder.restoreCallingIdentity(identity);
        }
        } else {
            try {
                mMainHandler.post(PooledLambda.obtainRunnable((nonArg) -> {
                    final ScreenshotHardwareBuffer screenshotBuffer = LocalServices
                            .getService(DisplayManagerInternal.class).userScreenshot(displayId);
                    if (screenshotBuffer != null) {
                        sendScreenshotSuccess(screenshotBuffer, callback);
                    } else {
                        sendScreenshotFailure(
                                AccessibilityService.ERROR_TAKE_SCREENSHOT_INVALID_DISPLAY,
                                callback);
                    }
                }, null).recycleOnUse());
            } finally {
                Binder.restoreCallingIdentity(identity);
            }
        }
    }

    private void sendScreenshotSuccess(ScreenshotHardwareBuffer screenshotBuffer,
            RemoteCallback callback) {
        if (deleteCaptureDisplay()) {
        mMainHandler.post(PooledLambda.obtainRunnable((nonArg) -> {
            final HardwareBuffer hardwareBuffer = screenshotBuffer.getHardwareBuffer();
            final ParcelableColorSpace colorSpace =
@@ -1574,24 +1552,6 @@ abstract class AbstractAccessibilityServiceConnection extends IAccessibilityServ
            callback.sendResult(payload);
            hardwareBuffer.close();
        }, null).recycleOnUse());
        } else {
            final HardwareBuffer hardwareBuffer = screenshotBuffer.getHardwareBuffer();
            final ParcelableColorSpace colorSpace =
                    new ParcelableColorSpace(screenshotBuffer.getColorSpace());

            final Bundle payload = new Bundle();
            payload.putInt(KEY_ACCESSIBILITY_SCREENSHOT_STATUS,
                    AccessibilityService.TAKE_SCREENSHOT_SUCCESS);
            payload.putParcelable(KEY_ACCESSIBILITY_SCREENSHOT_HARDWAREBUFFER,
                    hardwareBuffer);
            payload.putParcelable(KEY_ACCESSIBILITY_SCREENSHOT_COLORSPACE, colorSpace);
            payload.putLong(KEY_ACCESSIBILITY_SCREENSHOT_TIMESTAMP,
                    SystemClock.uptimeMillis());

            // Send back the result.
            callback.sendResult(payload);
            hardwareBuffer.close();
        }
    }

    private void sendScreenshotFailure(@AccessibilityService.ScreenshotErrorCode int errorCode,
+1 −31
Original line number Diff line number Diff line
@@ -32,7 +32,6 @@ import static com.android.server.wm.SurfaceAnimator.ANIMATION_TYPE_SCREEN_ROTATI
import static com.android.server.wm.WindowManagerDebugConfig.TAG_WITH_CLASS_NAME;
import static com.android.server.wm.WindowManagerDebugConfig.TAG_WM;
import static com.android.server.wm.utils.CoordinateTransforms.computeRotationMatrix;
import static com.android.window.flags.Flags.deleteCaptureDisplay;

import android.animation.ArgbEvaluator;
import android.content.Context;
@@ -41,11 +40,9 @@ import android.graphics.Matrix;
import android.graphics.Point;
import android.graphics.Rect;
import android.hardware.HardwareBuffer;
import android.os.IBinder;
import android.os.Trace;
import android.util.Slog;
import android.util.proto.ProtoOutputStream;
import android.view.DisplayAddress;
import android.view.DisplayInfo;
import android.view.Surface;
import android.view.Surface.OutOfResourcesException;
@@ -58,7 +55,6 @@ import android.window.ScreenCapture;
import com.android.internal.R;
import com.android.internal.policy.TransitionAnimation;
import com.android.internal.protolog.ProtoLog;
import com.android.server.display.DisplayControl;
import com.android.server.wm.SurfaceAnimator.AnimationType;
import com.android.server.wm.SurfaceAnimator.OnAnimationFinishedCallback;

@@ -171,33 +167,7 @@ class ScreenRotationAnimation {

        try {
            final ScreenCapture.ScreenshotHardwareBuffer screenshotBuffer;
            if (isSizeChanged && !deleteCaptureDisplay()) {
                final DisplayAddress address = displayInfo.address;
                if (!(address instanceof DisplayAddress.Physical)) {
                    Slog.e(TAG, "Display does not have a physical address: " + displayId);
                    return;
                }
                final DisplayAddress.Physical physicalAddress =
                        (DisplayAddress.Physical) address;
                final IBinder displayToken = DisplayControl.getPhysicalDisplayToken(
                        physicalAddress.getPhysicalDisplayId());
                if (displayToken == null) {
                    Slog.e(TAG, "Display token is null.");
                    return;
                }
                // Temporarily not skip screenshot for the rounded corner overlays and screenshot
                // the whole display to include the rounded corner overlays.
                setSkipScreenshotForRoundedCornerOverlays(false, t);
                mRoundedCornerOverlay = displayContent.findRoundedCornerOverlays();
                final ScreenCapture.DisplayCaptureArgs captureArgs =
                        new ScreenCapture.DisplayCaptureArgs.Builder(displayToken)
                                .setSourceCrop(new Rect(0, 0, width, height))
                                .setAllowProtected(true)
                                .setCaptureSecureLayers(true)
                                .setHintForSeamlessTransition(true)
                                .build();
                screenshotBuffer = ScreenCapture.captureDisplay(captureArgs);
            } else if (isSizeChanged) {
            if (isSizeChanged) {
                // Temporarily not skip screenshot for the rounded corner overlays and screenshot
                // the whole display to include the rounded corner overlays.
                setSkipScreenshotForRoundedCornerOverlays(false, t);