Loading core/java/android/view/SurfaceControl.java +17 −5 Original line number Original line Diff line number Diff line Loading @@ -785,12 +785,14 @@ public final class SurfaceControl implements Parcelable { private final HardwareBuffer mHardwareBuffer; private final HardwareBuffer mHardwareBuffer; private final ColorSpace mColorSpace; private final ColorSpace mColorSpace; private final boolean mContainsSecureLayers; private final boolean mContainsSecureLayers; private final boolean mContainsHdrLayers; public ScreenshotHardwareBuffer(HardwareBuffer hardwareBuffer, ColorSpace colorSpace, public ScreenshotHardwareBuffer(HardwareBuffer hardwareBuffer, ColorSpace colorSpace, boolean containsSecureLayers) { boolean containsSecureLayers, boolean containsHdrLayers) { mHardwareBuffer = hardwareBuffer; mHardwareBuffer = hardwareBuffer; mColorSpace = colorSpace; mColorSpace = colorSpace; mContainsSecureLayers = containsSecureLayers; mContainsSecureLayers = containsSecureLayers; mContainsHdrLayers = containsHdrLayers; } } /** /** Loading @@ -798,13 +800,15 @@ public final class SurfaceControl implements Parcelable { * @param hardwareBuffer The existing HardwareBuffer object * @param hardwareBuffer The existing HardwareBuffer object * @param namedColorSpace Integer value of a named color space {@link ColorSpace.Named} * @param namedColorSpace Integer value of a named color space {@link ColorSpace.Named} * @param containsSecureLayers Indicates whether this graphic buffer contains captured * @param containsSecureLayers Indicates whether this graphic buffer contains captured * contents * contents of secure layers, in which case the screenshot * of secure layers, in which case the screenshot should not be persisted. * should not be persisted. * @param containsHdrLayers Indicates whether this graphic buffer contains HDR content. */ */ private static ScreenshotHardwareBuffer createFromNative(HardwareBuffer hardwareBuffer, private static ScreenshotHardwareBuffer createFromNative(HardwareBuffer hardwareBuffer, int namedColorSpace, boolean containsSecureLayers) { int namedColorSpace, boolean containsSecureLayers, boolean containsHdrLayers) { ColorSpace colorSpace = ColorSpace.get(ColorSpace.Named.values()[namedColorSpace]); ColorSpace colorSpace = ColorSpace.get(ColorSpace.Named.values()[namedColorSpace]); return new ScreenshotHardwareBuffer(hardwareBuffer, colorSpace, containsSecureLayers); return new ScreenshotHardwareBuffer( hardwareBuffer, colorSpace, containsSecureLayers, containsHdrLayers); } } public ColorSpace getColorSpace() { public ColorSpace getColorSpace() { Loading @@ -818,6 +822,14 @@ public final class SurfaceControl implements Parcelable { public boolean containsSecureLayers() { public boolean containsSecureLayers() { return mContainsSecureLayers; return mContainsSecureLayers; } } /** * Returns whether the screenshot contains at least one HDR layer. * This information may be useful for informing the display whether this screenshot * is allowed to be dimmed to SDR white. */ public boolean containsHdrLayers() { return mContainsHdrLayers; } /** /** * Copy content of ScreenshotHardwareBuffer into a hardware bitmap and return it. * Copy content of ScreenshotHardwareBuffer into a hardware bitmap and return it. Loading core/jni/android_view_SurfaceControl.cpp +3 −2 Original line number Original line Diff line number Diff line Loading @@ -322,7 +322,8 @@ public: env->CallStaticObjectMethod(gScreenshotHardwareBufferClassInfo.clazz, env->CallStaticObjectMethod(gScreenshotHardwareBufferClassInfo.clazz, gScreenshotHardwareBufferClassInfo.builder, gScreenshotHardwareBufferClassInfo.builder, jhardwareBuffer, namedColorSpace, jhardwareBuffer, namedColorSpace, captureResults.capturedSecureLayers); captureResults.capturedSecureLayers, captureResults.capturedHdrLayers); env->CallVoidMethod(screenCaptureListenerObject, env->CallVoidMethod(screenCaptureListenerObject, gScreenCaptureListenerClassInfo.onScreenCaptureComplete, gScreenCaptureListenerClassInfo.onScreenCaptureComplete, screenshotHardwareBuffer); screenshotHardwareBuffer); Loading Loading @@ -2399,7 +2400,7 @@ int register_android_view_SurfaceControl(JNIEnv* env) MakeGlobalRefOrDie(env, screenshotGraphicsBufferClazz); MakeGlobalRefOrDie(env, screenshotGraphicsBufferClazz); gScreenshotHardwareBufferClassInfo.builder = gScreenshotHardwareBufferClassInfo.builder = GetStaticMethodIDOrDie(env, screenshotGraphicsBufferClazz, "createFromNative", GetStaticMethodIDOrDie(env, screenshotGraphicsBufferClazz, "createFromNative", "(Landroid/hardware/HardwareBuffer;IZ)Landroid/view/" "(Landroid/hardware/HardwareBuffer;IZZ)Landroid/view/" "SurfaceControl$ScreenshotHardwareBuffer;"); "SurfaceControl$ScreenshotHardwareBuffer;"); jclass displayedContentSampleClazz = FindClassOrDie(env, jclass displayedContentSampleClazz = FindClassOrDie(env, Loading libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleExpandedView.java +5 −2 Original line number Original line Diff line number Diff line Loading @@ -454,8 +454,11 @@ public class BubbleExpandedView extends LinearLayout { p.beginRecording(mOverflowView.getWidth(), mOverflowView.getHeight())); p.beginRecording(mOverflowView.getWidth(), mOverflowView.getHeight())); p.endRecording(); p.endRecording(); Bitmap snapshot = Bitmap.createBitmap(p); Bitmap snapshot = Bitmap.createBitmap(p); return new SurfaceControl.ScreenshotHardwareBuffer(snapshot.getHardwareBuffer(), return new SurfaceControl.ScreenshotHardwareBuffer( snapshot.getColorSpace(), false /* containsSecureLayers */); snapshot.getHardwareBuffer(), snapshot.getColorSpace(), false /* containsSecureLayers */, false /* containsHdrLayers */); } } if (mTaskView == null || mTaskView.getSurfaceControl() == null) { if (mTaskView == null || mTaskView.getSurfaceControl() == null) { return null; return null; Loading services/core/java/com/android/server/wm/ScreenRotationAnimation.java +1 −1 Original line number Original line Diff line number Diff line Loading @@ -219,7 +219,7 @@ class ScreenRotationAnimation { // If hdr layers are on-screen, e.g. picture-in-picture mode, the screenshot of // If hdr layers are on-screen, e.g. picture-in-picture mode, the screenshot of // rotation animation is an sdr image containing tone-mapping hdr content, then // rotation animation is an sdr image containing tone-mapping hdr content, then // disable dimming effect to get avoid of hdr content being dimmed during animation. // disable dimming effect to get avoid of hdr content being dimmed during animation. t.setDimmingEnabled(mScreenshotLayer, false); t.setDimmingEnabled(mScreenshotLayer, !screenshotBuffer.containsHdrLayers()); t.setLayer(mBackColorSurface, -1); t.setLayer(mBackColorSurface, -1); t.setColor(mBackColorSurface, new float[]{mStartLuma, mStartLuma, mStartLuma}); t.setColor(mBackColorSurface, new float[]{mStartLuma, mStartLuma, mStartLuma}); t.setAlpha(mBackColorSurface, 1); t.setAlpha(mBackColorSurface, 1); Loading Loading
core/java/android/view/SurfaceControl.java +17 −5 Original line number Original line Diff line number Diff line Loading @@ -785,12 +785,14 @@ public final class SurfaceControl implements Parcelable { private final HardwareBuffer mHardwareBuffer; private final HardwareBuffer mHardwareBuffer; private final ColorSpace mColorSpace; private final ColorSpace mColorSpace; private final boolean mContainsSecureLayers; private final boolean mContainsSecureLayers; private final boolean mContainsHdrLayers; public ScreenshotHardwareBuffer(HardwareBuffer hardwareBuffer, ColorSpace colorSpace, public ScreenshotHardwareBuffer(HardwareBuffer hardwareBuffer, ColorSpace colorSpace, boolean containsSecureLayers) { boolean containsSecureLayers, boolean containsHdrLayers) { mHardwareBuffer = hardwareBuffer; mHardwareBuffer = hardwareBuffer; mColorSpace = colorSpace; mColorSpace = colorSpace; mContainsSecureLayers = containsSecureLayers; mContainsSecureLayers = containsSecureLayers; mContainsHdrLayers = containsHdrLayers; } } /** /** Loading @@ -798,13 +800,15 @@ public final class SurfaceControl implements Parcelable { * @param hardwareBuffer The existing HardwareBuffer object * @param hardwareBuffer The existing HardwareBuffer object * @param namedColorSpace Integer value of a named color space {@link ColorSpace.Named} * @param namedColorSpace Integer value of a named color space {@link ColorSpace.Named} * @param containsSecureLayers Indicates whether this graphic buffer contains captured * @param containsSecureLayers Indicates whether this graphic buffer contains captured * contents * contents of secure layers, in which case the screenshot * of secure layers, in which case the screenshot should not be persisted. * should not be persisted. * @param containsHdrLayers Indicates whether this graphic buffer contains HDR content. */ */ private static ScreenshotHardwareBuffer createFromNative(HardwareBuffer hardwareBuffer, private static ScreenshotHardwareBuffer createFromNative(HardwareBuffer hardwareBuffer, int namedColorSpace, boolean containsSecureLayers) { int namedColorSpace, boolean containsSecureLayers, boolean containsHdrLayers) { ColorSpace colorSpace = ColorSpace.get(ColorSpace.Named.values()[namedColorSpace]); ColorSpace colorSpace = ColorSpace.get(ColorSpace.Named.values()[namedColorSpace]); return new ScreenshotHardwareBuffer(hardwareBuffer, colorSpace, containsSecureLayers); return new ScreenshotHardwareBuffer( hardwareBuffer, colorSpace, containsSecureLayers, containsHdrLayers); } } public ColorSpace getColorSpace() { public ColorSpace getColorSpace() { Loading @@ -818,6 +822,14 @@ public final class SurfaceControl implements Parcelable { public boolean containsSecureLayers() { public boolean containsSecureLayers() { return mContainsSecureLayers; return mContainsSecureLayers; } } /** * Returns whether the screenshot contains at least one HDR layer. * This information may be useful for informing the display whether this screenshot * is allowed to be dimmed to SDR white. */ public boolean containsHdrLayers() { return mContainsHdrLayers; } /** /** * Copy content of ScreenshotHardwareBuffer into a hardware bitmap and return it. * Copy content of ScreenshotHardwareBuffer into a hardware bitmap and return it. Loading
core/jni/android_view_SurfaceControl.cpp +3 −2 Original line number Original line Diff line number Diff line Loading @@ -322,7 +322,8 @@ public: env->CallStaticObjectMethod(gScreenshotHardwareBufferClassInfo.clazz, env->CallStaticObjectMethod(gScreenshotHardwareBufferClassInfo.clazz, gScreenshotHardwareBufferClassInfo.builder, gScreenshotHardwareBufferClassInfo.builder, jhardwareBuffer, namedColorSpace, jhardwareBuffer, namedColorSpace, captureResults.capturedSecureLayers); captureResults.capturedSecureLayers, captureResults.capturedHdrLayers); env->CallVoidMethod(screenCaptureListenerObject, env->CallVoidMethod(screenCaptureListenerObject, gScreenCaptureListenerClassInfo.onScreenCaptureComplete, gScreenCaptureListenerClassInfo.onScreenCaptureComplete, screenshotHardwareBuffer); screenshotHardwareBuffer); Loading Loading @@ -2399,7 +2400,7 @@ int register_android_view_SurfaceControl(JNIEnv* env) MakeGlobalRefOrDie(env, screenshotGraphicsBufferClazz); MakeGlobalRefOrDie(env, screenshotGraphicsBufferClazz); gScreenshotHardwareBufferClassInfo.builder = gScreenshotHardwareBufferClassInfo.builder = GetStaticMethodIDOrDie(env, screenshotGraphicsBufferClazz, "createFromNative", GetStaticMethodIDOrDie(env, screenshotGraphicsBufferClazz, "createFromNative", "(Landroid/hardware/HardwareBuffer;IZ)Landroid/view/" "(Landroid/hardware/HardwareBuffer;IZZ)Landroid/view/" "SurfaceControl$ScreenshotHardwareBuffer;"); "SurfaceControl$ScreenshotHardwareBuffer;"); jclass displayedContentSampleClazz = FindClassOrDie(env, jclass displayedContentSampleClazz = FindClassOrDie(env, Loading
libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleExpandedView.java +5 −2 Original line number Original line Diff line number Diff line Loading @@ -454,8 +454,11 @@ public class BubbleExpandedView extends LinearLayout { p.beginRecording(mOverflowView.getWidth(), mOverflowView.getHeight())); p.beginRecording(mOverflowView.getWidth(), mOverflowView.getHeight())); p.endRecording(); p.endRecording(); Bitmap snapshot = Bitmap.createBitmap(p); Bitmap snapshot = Bitmap.createBitmap(p); return new SurfaceControl.ScreenshotHardwareBuffer(snapshot.getHardwareBuffer(), return new SurfaceControl.ScreenshotHardwareBuffer( snapshot.getColorSpace(), false /* containsSecureLayers */); snapshot.getHardwareBuffer(), snapshot.getColorSpace(), false /* containsSecureLayers */, false /* containsHdrLayers */); } } if (mTaskView == null || mTaskView.getSurfaceControl() == null) { if (mTaskView == null || mTaskView.getSurfaceControl() == null) { return null; return null; Loading
services/core/java/com/android/server/wm/ScreenRotationAnimation.java +1 −1 Original line number Original line Diff line number Diff line Loading @@ -219,7 +219,7 @@ class ScreenRotationAnimation { // If hdr layers are on-screen, e.g. picture-in-picture mode, the screenshot of // If hdr layers are on-screen, e.g. picture-in-picture mode, the screenshot of // rotation animation is an sdr image containing tone-mapping hdr content, then // rotation animation is an sdr image containing tone-mapping hdr content, then // disable dimming effect to get avoid of hdr content being dimmed during animation. // disable dimming effect to get avoid of hdr content being dimmed during animation. t.setDimmingEnabled(mScreenshotLayer, false); t.setDimmingEnabled(mScreenshotLayer, !screenshotBuffer.containsHdrLayers()); t.setLayer(mBackColorSurface, -1); t.setLayer(mBackColorSurface, -1); t.setColor(mBackColorSurface, new float[]{mStartLuma, mStartLuma, mStartLuma}); t.setColor(mBackColorSurface, new float[]{mStartLuma, mStartLuma, mStartLuma}); t.setAlpha(mBackColorSurface, 1); t.setAlpha(mBackColorSurface, 1); Loading