Merge "Set ScreenshotSurface secure if any secure content is shown."

This commit is contained in:
Craig Mautner
2014-03-24 14:31:38 +00:00
committed by Gerrit Code Review
2 changed files with 22 additions and 4 deletions

View File

@ -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();

View File

@ -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);
} }
} }