diff options
author | Craig Mautner <cmautner@google.com> | 2014-03-24 14:38:37 +0000 |
---|---|---|
committer | Android Git Automerger <android-git-automerger@android.com> | 2014-03-24 14:38:37 +0000 |
commit | 3837ded2ff29b80ec218009c01ed67abec4d7076 (patch) | |
tree | 5b2d6aeb310099d3a4c84f0a09e3e660220ea9e8 /services | |
parent | 16578caea887c258510a885476c11a2a9bc29f71 (diff) | |
parent | 103ed3558764f1fd41c9a5399e2030baa4110bfb (diff) | |
download | frameworks_base-3837ded2ff29b80ec218009c01ed67abec4d7076.zip frameworks_base-3837ded2ff29b80ec218009c01ed67abec4d7076.tar.gz frameworks_base-3837ded2ff29b80ec218009c01ed67abec4d7076.tar.bz2 |
am 103ed355: am 557a93e1: Merge "Set ScreenshotSurface secure if any secure content is shown."
* commit '103ed3558764f1fd41c9a5399e2030baa4110bfb':
Set ScreenshotSurface secure if any secure content is shown.
Diffstat (limited to 'services')
-rw-r--r-- | services/java/com/android/server/wm/ScreenRotationAnimation.java | 12 | ||||
-rw-r--r-- | services/java/com/android/server/wm/WindowManagerService.java | 14 |
2 files changed, 22 insertions, 4 deletions
diff --git a/services/java/com/android/server/wm/ScreenRotationAnimation.java b/services/java/com/android/server/wm/ScreenRotationAnimation.java index e630737..f79896b 100644 --- a/services/java/com/android/server/wm/ScreenRotationAnimation.java +++ b/services/java/com/android/server/wm/ScreenRotationAnimation.java @@ -199,7 +199,8 @@ class ScreenRotationAnimation { } public ScreenRotationAnimation(Context context, DisplayContent displayContent, - SurfaceSession session, boolean inTransaction, boolean forceDefaultOrientation) { + SurfaceSession session, boolean inTransaction, boolean forceDefaultOrientation, + boolean isSecure) { mContext = context; mDisplayContent = displayContent; displayContent.getLogicalDisplayRect(mOriginalDisplayRect); @@ -241,16 +242,21 @@ class ScreenRotationAnimation { try { try { + int flags = SurfaceControl.HIDDEN; + if (isSecure) { + flags |= SurfaceControl.SECURE; + } + if (WindowManagerService.DEBUG_SURFACE_TRACE) { mSurfaceControl = new SurfaceTrace(session, "ScreenshotSurface", mWidth, mHeight, - PixelFormat.OPAQUE, SurfaceControl.HIDDEN); + PixelFormat.OPAQUE, flags); Slog.w(TAG, "ScreenRotationAnimation ctor: displayOffset=" + mOriginalDisplayRect.toShortString()); } else { mSurfaceControl = new SurfaceControl(session, "ScreenshotSurface", mWidth, mHeight, - PixelFormat.OPAQUE, SurfaceControl.HIDDEN); + PixelFormat.OPAQUE, flags); } // capture a screenshot into the surface we just created Surface sur = new Surface(); diff --git a/services/java/com/android/server/wm/WindowManagerService.java b/services/java/com/android/server/wm/WindowManagerService.java index 1696ad8..8777897 100644 --- a/services/java/com/android/server/wm/WindowManagerService.java +++ b/services/java/com/android/server/wm/WindowManagerService.java @@ -9927,9 +9927,21 @@ public class WindowManagerService extends IWindowManager.Stub 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. screenRotationAnimation = new ScreenRotationAnimation(mContext, displayContent, - mFxSession, inTransaction, mPolicy.isDefaultOrientationForced()); + mFxSession, inTransaction, mPolicy.isDefaultOrientationForced(), isSecure); mAnimator.setScreenRotationAnimationLocked(displayId, screenRotationAnimation); } } |