summaryrefslogtreecommitdiffstats
path: root/services
diff options
context:
space:
mode:
authorCraig Mautner <cmautner@google.com>2014-03-24 14:38:37 +0000
committerAndroid Git Automerger <android-git-automerger@android.com>2014-03-24 14:38:37 +0000
commit3837ded2ff29b80ec218009c01ed67abec4d7076 (patch)
tree5b2d6aeb310099d3a4c84f0a09e3e660220ea9e8 /services
parent16578caea887c258510a885476c11a2a9bc29f71 (diff)
parent103ed3558764f1fd41c9a5399e2030baa4110bfb (diff)
downloadframeworks_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.java12
-rw-r--r--services/java/com/android/server/wm/WindowManagerService.java14
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);
}
}