diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/common/ScreenshotUtils.java b/libs/WindowManager/Shell/src/com/android/wm/shell/common/ScreenshotUtils.java index e59845c2a068b..32575fa7ece04 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/common/ScreenshotUtils.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/common/ScreenshotUtils.java @@ -32,11 +32,12 @@ public class ScreenshotUtils { * @param t the transaction used to set changes on the resulting screenshot. * @param sc the SurfaceControl to take a screenshot of * @param crop the crop to use when capturing the screenshot + * @param layer the layer to place the screenshot * * @return A SurfaceControl where the screenshot will be attached, or null if failed. */ public static SurfaceControl takeScreenshot(SurfaceControl.Transaction t, SurfaceControl sc, - Rect crop) { + Rect crop, int layer) { final SurfaceControl.ScreenshotHardwareBuffer buffer = SurfaceControl.captureLayers( new SurfaceControl.LayerCaptureArgs.Builder(sc) .setSourceCrop(crop) @@ -60,7 +61,7 @@ public class ScreenshotUtils { t.setBuffer(screenshot, graphicBuffer); t.setColorSpace(screenshot, buffer.getColorSpace()); t.reparent(screenshot, sc); - t.setLayer(screenshot, Integer.MAX_VALUE); + t.setLayer(screenshot, layer); t.show(screenshot); t.apply(); return screenshot; diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipTaskOrganizer.java b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipTaskOrganizer.java index fe6476929265a..00494611420d3 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipTaskOrganizer.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipTaskOrganizer.java @@ -1159,8 +1159,11 @@ public class PipTaskOrganizer implements ShellTaskOrganizer.TaskListener, preResizeBounds.offsetTo(0, 0); final Rect snapshotDest = new Rect(0, 0, destinationBounds.width(), destinationBounds.height()); + // Note: Put this at layer=MAX_VALUE-2 since the input consumer for PIP is placed at + // MAX_VALUE-1 final SurfaceControl snapshotSurface = ScreenshotUtils.takeScreenshot( - mSurfaceControlTransactionFactory.getTransaction(), mLeash, preResizeBounds); + mSurfaceControlTransactionFactory.getTransaction(), mLeash, preResizeBounds, + Integer.MAX_VALUE - 2); if (snapshotSurface != null) { mSyncTransactionQueue.queue(wct); mSyncTransactionQueue.runInSync(t -> {