Merge "Set ScreenshotSurface secure if any secure content is shown."
This commit is contained in:
@ -199,7 +199,8 @@ class ScreenRotationAnimation {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public ScreenRotationAnimation(Context context, DisplayContent displayContent,
|
public ScreenRotationAnimation(Context context, DisplayContent displayContent,
|
||||||
SurfaceSession session, boolean inTransaction, boolean forceDefaultOrientation) {
|
SurfaceSession session, boolean inTransaction, boolean forceDefaultOrientation,
|
||||||
|
boolean isSecure) {
|
||||||
mContext = context;
|
mContext = context;
|
||||||
mDisplayContent = displayContent;
|
mDisplayContent = displayContent;
|
||||||
displayContent.getLogicalDisplayRect(mOriginalDisplayRect);
|
displayContent.getLogicalDisplayRect(mOriginalDisplayRect);
|
||||||
@ -241,16 +242,21 @@ class ScreenRotationAnimation {
|
|||||||
|
|
||||||
try {
|
try {
|
||||||
try {
|
try {
|
||||||
|
int flags = SurfaceControl.HIDDEN;
|
||||||
|
if (isSecure) {
|
||||||
|
flags |= SurfaceControl.SECURE;
|
||||||
|
}
|
||||||
|
|
||||||
if (WindowManagerService.DEBUG_SURFACE_TRACE) {
|
if (WindowManagerService.DEBUG_SURFACE_TRACE) {
|
||||||
mSurfaceControl = new SurfaceTrace(session, "ScreenshotSurface",
|
mSurfaceControl = new SurfaceTrace(session, "ScreenshotSurface",
|
||||||
mWidth, mHeight,
|
mWidth, mHeight,
|
||||||
PixelFormat.OPAQUE, SurfaceControl.HIDDEN);
|
PixelFormat.OPAQUE, flags);
|
||||||
Slog.w(TAG, "ScreenRotationAnimation ctor: displayOffset="
|
Slog.w(TAG, "ScreenRotationAnimation ctor: displayOffset="
|
||||||
+ mOriginalDisplayRect.toShortString());
|
+ mOriginalDisplayRect.toShortString());
|
||||||
} else {
|
} else {
|
||||||
mSurfaceControl = new SurfaceControl(session, "ScreenshotSurface",
|
mSurfaceControl = new SurfaceControl(session, "ScreenshotSurface",
|
||||||
mWidth, mHeight,
|
mWidth, mHeight,
|
||||||
PixelFormat.OPAQUE, SurfaceControl.HIDDEN);
|
PixelFormat.OPAQUE, flags);
|
||||||
}
|
}
|
||||||
// capture a screenshot into the surface we just created
|
// capture a screenshot into the surface we just created
|
||||||
Surface sur = new Surface();
|
Surface sur = new Surface();
|
||||||
|
@ -9921,9 +9921,21 @@ public class WindowManagerService extends IWindowManager.Stub
|
|||||||
screenRotationAnimation.kill();
|
screenRotationAnimation.kill();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Check whether the current screen contains any secure content.
|
||||||
|
boolean isSecure = false;
|
||||||
|
final WindowList windows = getDefaultWindowListLocked();
|
||||||
|
final int N = windows.size();
|
||||||
|
for (int i = 0; i < N; i++) {
|
||||||
|
WindowState ws = windows.get(i);
|
||||||
|
if (ws.isOnScreen() && (ws.mAttrs.flags & FLAG_SECURE) != 0) {
|
||||||
|
isSecure = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// TODO(multidisplay): rotation on main screen only.
|
// TODO(multidisplay): rotation on main screen only.
|
||||||
screenRotationAnimation = new ScreenRotationAnimation(mContext, displayContent,
|
screenRotationAnimation = new ScreenRotationAnimation(mContext, displayContent,
|
||||||
mFxSession, inTransaction, mPolicy.isDefaultOrientationForced());
|
mFxSession, inTransaction, mPolicy.isDefaultOrientationForced(), isSecure);
|
||||||
mAnimator.setScreenRotationAnimationLocked(displayId, screenRotationAnimation);
|
mAnimator.setScreenRotationAnimationLocked(displayId, screenRotationAnimation);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user