From 55149303d14adb242f29bf4e91e9428affff9628 Mon Sep 17 00:00:00 2001 From: Filip Gruszczynski Date: Wed, 25 Nov 2015 10:51:25 -0800 Subject: [PATCH] Only create surface when showing window if it destroys it when hiding. The visibility of a window might be toggled to true even when it doesn't have a surface, which is a case for windows under the lock screen. We can't blindly create surfaces in that case, but only do it for the windows that destroy their surfaces when they are hidden. Bug: 25879215 Change-Id: I6cf2c6810ce02fba0d2207a56de9924c0270dfeb --- .../java/com/android/server/input/InputWindowHandle.java | 1 + services/core/java/com/android/server/wm/WindowState.java | 5 +++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/services/core/java/com/android/server/input/InputWindowHandle.java b/services/core/java/com/android/server/input/InputWindowHandle.java index 207c05d72bd19..eb3581ad6dad6 100644 --- a/services/core/java/com/android/server/input/InputWindowHandle.java +++ b/services/core/java/com/android/server/input/InputWindowHandle.java @@ -106,6 +106,7 @@ public final class InputWindowHandle { .append(", frame=[").append(frameLeft).append(",").append(frameTop).append(",") .append(frameRight).append(",").append(frameBottom).append("]") .append(", touchableRegion=").append(touchableRegion) + .append(", visible=").append(visible) .toString(); } diff --git a/services/core/java/com/android/server/wm/WindowState.java b/services/core/java/com/android/server/wm/WindowState.java index a2ca170d23e0e..a0a2162b0f90e 100644 --- a/services/core/java/com/android/server/wm/WindowState.java +++ b/services/core/java/com/android/server/wm/WindowState.java @@ -1605,8 +1605,9 @@ final class WindowState implements WindowManagerPolicy.WindowState { // Already showing. return false; } - if (!mHasSurface) { - mDestroying = false; + if (!mHasSurface && mDestroySurfaceWhenHidden) { + // This is a window that doesn't retain the surface when it's hidden, so immediately + // when we want to show it again, we need to create the surface for it. mWinAnimator.createSurfaceLocked(); } if (DEBUG_VISIBILITY) Slog.v(TAG, "Policy visibility true: " + this);