From 4eef94f2b82f4b86e6d78f752d0f8895acf78cee Mon Sep 17 00:00:00 2001 From: Wale Ogunwale Date: Fri, 17 Jul 2015 22:29:54 -0700 Subject: [PATCH] Fixed issue with background user window consuming touch events When adding a window for a background user, it is possible for the window to consume touch events because it is in the COMMIT_DRAW_PENDING state. We allow the background user window to transition READY_TO_SHOW state, but hide the window. Change is based on https://android-review.googlesource.com/#/c/158772 and also reverts commits 6ee618509a392adb183c2e70390cd9e2031ff0d8 and 588932a53e63c0a7ee281dea22559c129b40eb99 Bug: 22531717 Bug: 22207948 Bug: 18510914 https://code.google.com/p/android-developer-preview/issues/detail?id=2667 Change-Id: I68d2e532c2b1def0d7b22c9b60e48110cf3cd686 --- .../java/com/android/server/wm/WindowManagerService.java | 5 +---- .../core/java/com/android/server/wm/WindowStateAnimator.java | 2 ++ 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java index c776e8f0eeb24..4f2b1f9197bcc 100644 --- a/services/core/java/com/android/server/wm/WindowManagerService.java +++ b/services/core/java/com/android/server/wm/WindowManagerService.java @@ -10015,7 +10015,7 @@ public class WindowManagerService extends IWindowManager.Stub w.mContentChanged = false; // Moved from updateWindowsAndWallpaperLocked(). - if (w.mHasSurface && !w.isHiddenFromUserLocked()) { + if (w.mHasSurface) { // Take care of the window being ready to display. final boolean committed = winAnimator.commitFinishDrawingLocked(); @@ -10048,10 +10048,7 @@ public class WindowManagerService extends IWindowManager.Stub } winAnimator.setSurfaceBoundariesLocked(recoveringMemory); - } - // Check the draw state of the window, but only if it is visible to the user. - if (!w.isHiddenFromUserLocked()) { final AppWindowToken atoken = w.mAppToken; if (DEBUG_STARTING_WINDOW && atoken != null && w == atoken.startingWindow) { diff --git a/services/core/java/com/android/server/wm/WindowStateAnimator.java b/services/core/java/com/android/server/wm/WindowStateAnimator.java index 96cd14bbac892..3251a56d860e9 100644 --- a/services/core/java/com/android/server/wm/WindowStateAnimator.java +++ b/services/core/java/com/android/server/wm/WindowStateAnimator.java @@ -1667,6 +1667,8 @@ class WindowStateAnimator { // This must be called while inside a transaction. boolean performShowLocked() { if (mWin.isHiddenFromUserLocked()) { + if (DEBUG_VISIBILITY) Slog.w(TAG, "hiding " + mWin + ", belonging to " + mWin.mOwnerUid); + mWin.hideLw(false); return false; } if (DEBUG_VISIBILITY || (DEBUG_STARTING_WINDOW &&