Loading core/jni/android_view_SurfaceControl.cpp +5 −3 Original line number Diff line number Diff line Loading @@ -171,9 +171,10 @@ static jobject nativeScreenshotToBuffer(JNIEnv* env, jclass clazz, maxLayer = INT32_MAX; } sp<GraphicBuffer> buffer; bool capturedSecureLayers = false; status_t res = ScreenshotClient::capture(displayToken, sourceCrop, width, height, minLayer, maxLayer, useIdentityTransform, rotation, captureSecureLayers, &buffer); rotation, captureSecureLayers, &buffer, capturedSecureLayers); if (res != NO_ERROR) { return NULL; } Loading @@ -184,7 +185,8 @@ static jobject nativeScreenshotToBuffer(JNIEnv* env, jclass clazz, buffer->getHeight(), buffer->getPixelFormat(), (jint)buffer->getUsage(), (jlong)buffer.get()); (jlong)buffer.get(), capturedSecureLayers); } static jobject nativeScreenshotBitmap(JNIEnv* env, jclass clazz, Loading Loading @@ -1082,7 +1084,7 @@ int register_android_view_SurfaceControl(JNIEnv* env) jclass graphicsBufferClazz = FindClassOrDie(env, "android/graphics/GraphicBuffer"); gGraphicBufferClassInfo.clazz = MakeGlobalRefOrDie(env, graphicsBufferClazz); gGraphicBufferClassInfo.builder = GetStaticMethodIDOrDie(env, graphicsBufferClazz, "createFromExisting", "(IIIIJ)Landroid/graphics/GraphicBuffer;"); "createFromExisting", "(IIIIJZ)Landroid/graphics/GraphicBuffer;"); return err; } Loading graphics/java/android/graphics/GraphicBuffer.java +33 −4 Original line number Diff line number Diff line Loading @@ -52,6 +52,7 @@ public class GraphicBuffer implements Parcelable { private final int mHeight; private final int mFormat; private final int mUsage; private final boolean mCapturedSecureLayers; // Note: do not rename, this field is used by native code private final long mNativeObject; Loading Loading @@ -82,14 +83,23 @@ public class GraphicBuffer implements Parcelable { } /** * Private use only. See {@link #create(int, int, int, int)}. * Private use only. See {@link #create(int, int, int, int, boolean)}. */ private GraphicBuffer(int width, int height, int format, int usage, long nativeObject) { private GraphicBuffer(int width, int height, int format, int usage, long nativeObject, boolean capturedSecureLayers) { mWidth = width; mHeight = height; mFormat = format; mUsage = usage; mNativeObject = nativeObject; mCapturedSecureLayers = capturedSecureLayers; } /** * Private use only. See {@link #create(int, int, int, int)}. */ private GraphicBuffer(int width, int height, int format, int usage, long nativeObject) { this(width, height, format, usage, nativeObject, false); } /** Loading @@ -97,14 +107,33 @@ public class GraphicBuffer implements Parcelable { * @hide */ public static GraphicBuffer createFromExisting(int width, int height, int format, int usage, long unwrappedNativeObject) { int format, int usage, long unwrappedNativeObject, boolean capturedSecureLayers) { long nativeObject = nWrapGraphicBuffer(unwrappedNativeObject); if (nativeObject != 0) { return new GraphicBuffer(width, height, format, usage, nativeObject); return new GraphicBuffer(width, height, format, usage, nativeObject, capturedSecureLayers); } return null; } /** * For SurfaceControl JNI. Provides and ignored value for capturedSecureLayers for backwards * compatibility * @hide */ public static GraphicBuffer createFromExisting(int width, int height, int format, int usage, long unwrappedNativeObject) { return createFromExisting(width, height, format, usage, unwrappedNativeObject, false); } /** * Returns true if the buffer contains visible secure layers. */ public boolean doesContainSecureLayers() { return mCapturedSecureLayers; } /** * Returns the width of this buffer in pixels. */ Loading services/core/java/com/android/server/wm/ScreenRotationAnimation.java +6 −0 Original line number Diff line number Diff line Loading @@ -295,6 +295,12 @@ class ScreenRotationAnimation { } catch (RuntimeException e) { Slog.w(TAG, "Failed to attach screenshot - " + e.getMessage()); } // If the screenshot contains secure layers, we have to make sure the // screenshot surface we display it in also has FLAG_SECURE so that // the user can not screenshot secure layers via the screenshot surface. if (gb.doesContainSecureLayers()) { t.setSecure(mSurfaceControl, true); } t.setLayer(mSurfaceControl, SCREEN_FREEZE_LAYER_SCREENSHOT); t.setAlpha(mSurfaceControl, 0); t.show(mSurfaceControl); Loading Loading
core/jni/android_view_SurfaceControl.cpp +5 −3 Original line number Diff line number Diff line Loading @@ -171,9 +171,10 @@ static jobject nativeScreenshotToBuffer(JNIEnv* env, jclass clazz, maxLayer = INT32_MAX; } sp<GraphicBuffer> buffer; bool capturedSecureLayers = false; status_t res = ScreenshotClient::capture(displayToken, sourceCrop, width, height, minLayer, maxLayer, useIdentityTransform, rotation, captureSecureLayers, &buffer); rotation, captureSecureLayers, &buffer, capturedSecureLayers); if (res != NO_ERROR) { return NULL; } Loading @@ -184,7 +185,8 @@ static jobject nativeScreenshotToBuffer(JNIEnv* env, jclass clazz, buffer->getHeight(), buffer->getPixelFormat(), (jint)buffer->getUsage(), (jlong)buffer.get()); (jlong)buffer.get(), capturedSecureLayers); } static jobject nativeScreenshotBitmap(JNIEnv* env, jclass clazz, Loading Loading @@ -1082,7 +1084,7 @@ int register_android_view_SurfaceControl(JNIEnv* env) jclass graphicsBufferClazz = FindClassOrDie(env, "android/graphics/GraphicBuffer"); gGraphicBufferClassInfo.clazz = MakeGlobalRefOrDie(env, graphicsBufferClazz); gGraphicBufferClassInfo.builder = GetStaticMethodIDOrDie(env, graphicsBufferClazz, "createFromExisting", "(IIIIJ)Landroid/graphics/GraphicBuffer;"); "createFromExisting", "(IIIIJZ)Landroid/graphics/GraphicBuffer;"); return err; } Loading
graphics/java/android/graphics/GraphicBuffer.java +33 −4 Original line number Diff line number Diff line Loading @@ -52,6 +52,7 @@ public class GraphicBuffer implements Parcelable { private final int mHeight; private final int mFormat; private final int mUsage; private final boolean mCapturedSecureLayers; // Note: do not rename, this field is used by native code private final long mNativeObject; Loading Loading @@ -82,14 +83,23 @@ public class GraphicBuffer implements Parcelable { } /** * Private use only. See {@link #create(int, int, int, int)}. * Private use only. See {@link #create(int, int, int, int, boolean)}. */ private GraphicBuffer(int width, int height, int format, int usage, long nativeObject) { private GraphicBuffer(int width, int height, int format, int usage, long nativeObject, boolean capturedSecureLayers) { mWidth = width; mHeight = height; mFormat = format; mUsage = usage; mNativeObject = nativeObject; mCapturedSecureLayers = capturedSecureLayers; } /** * Private use only. See {@link #create(int, int, int, int)}. */ private GraphicBuffer(int width, int height, int format, int usage, long nativeObject) { this(width, height, format, usage, nativeObject, false); } /** Loading @@ -97,14 +107,33 @@ public class GraphicBuffer implements Parcelable { * @hide */ public static GraphicBuffer createFromExisting(int width, int height, int format, int usage, long unwrappedNativeObject) { int format, int usage, long unwrappedNativeObject, boolean capturedSecureLayers) { long nativeObject = nWrapGraphicBuffer(unwrappedNativeObject); if (nativeObject != 0) { return new GraphicBuffer(width, height, format, usage, nativeObject); return new GraphicBuffer(width, height, format, usage, nativeObject, capturedSecureLayers); } return null; } /** * For SurfaceControl JNI. Provides and ignored value for capturedSecureLayers for backwards * compatibility * @hide */ public static GraphicBuffer createFromExisting(int width, int height, int format, int usage, long unwrappedNativeObject) { return createFromExisting(width, height, format, usage, unwrappedNativeObject, false); } /** * Returns true if the buffer contains visible secure layers. */ public boolean doesContainSecureLayers() { return mCapturedSecureLayers; } /** * Returns the width of this buffer in pixels. */ Loading
services/core/java/com/android/server/wm/ScreenRotationAnimation.java +6 −0 Original line number Diff line number Diff line Loading @@ -295,6 +295,12 @@ class ScreenRotationAnimation { } catch (RuntimeException e) { Slog.w(TAG, "Failed to attach screenshot - " + e.getMessage()); } // If the screenshot contains secure layers, we have to make sure the // screenshot surface we display it in also has FLAG_SECURE so that // the user can not screenshot secure layers via the screenshot surface. if (gb.doesContainSecureLayers()) { t.setSecure(mSurfaceControl, true); } t.setLayer(mSurfaceControl, SCREEN_FREEZE_LAYER_SCREENSHOT); t.setAlpha(mSurfaceControl, 0); t.show(mSurfaceControl); Loading