From b31cced065070049042a45973068a00a5da95bd8 Mon Sep 17 00:00:00 2001 From: tingna_sung Date: Sun, 26 Oct 2014 00:46:12 +0800 Subject: [PATCH] Sync focus stack frame and layer with focus app. Update focus stack frame/layer when focus app is changed to avoid focus stack/layer isn't updated synchronously with focus app, it's due to performLayoutAndPlaceSurfacesLocked() is not necessarily called on focus app change; it will cause sending mismatching TAP_OUTSIDE_STACK message if there is effectual incoming pointer event, hence may also result in focus stack is changed again, therefore erroneous focus app is set by ActivityManager at final. Change-Id: Ia0ec9a543be887b51a3b29b3e62fdd471c15edf2 Signed-off-by: tingna_sung --- .../java/com/android/server/wm/WindowManagerService.java | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java index 837672aaa146d..b535722cf688b 100644 --- a/services/core/java/com/android/server/wm/WindowManagerService.java +++ b/services/core/java/com/android/server/wm/WindowManagerService.java @@ -4000,6 +4000,15 @@ public class WindowManagerService extends IWindowManager.Stub if (changed) { mFocusedApp = newFocus; mInputMonitor.setFocusedAppLw(newFocus); + setFocusedStackFrame(); + if (SHOW_LIGHT_TRANSACTIONS) Slog.i(TAG, ">>> OPEN TRANSACTION setFocusedApp"); + SurfaceControl.openTransaction(); + try { + setFocusedStackLayer(); + } finally { + SurfaceControl.closeTransaction(); + if (SHOW_LIGHT_TRANSACTIONS) Slog.i(TAG, ">>> CLOSE TRANSACTION setFocusedApp"); + } } if (moveFocusNow && changed) {