From e63e01a661b62c0c1b72efb646eb8b6332abe4a8 Mon Sep 17 00:00:00 2001 From: Robert Carr Date: Mon, 18 Apr 2016 20:27:34 -0700 Subject: [PATCH] Place InputMethod after DockedDivider in window list. We need to ensure that the InputMethod ends up after the docked divider so it will have a higher Z-order for input. Bug: 28184654 Change-Id: Ifbe943312a82a79e850f106cc906f3749737710d --- .../server/wm/DockedStackDividerController.java | 6 +++++- .../com/android/server/wm/WindowManagerService.java | 10 ++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/services/core/java/com/android/server/wm/DockedStackDividerController.java b/services/core/java/com/android/server/wm/DockedStackDividerController.java index 0039c0a4b02a6..b90d0d191a784 100644 --- a/services/core/java/com/android/server/wm/DockedStackDividerController.java +++ b/services/core/java/com/android/server/wm/DockedStackDividerController.java @@ -663,4 +663,8 @@ public class DockedStackDividerController implements DimLayerUser { public String toShortString() { return TAG; } -} \ No newline at end of file + + WindowState getWindow() { + return mWindow; + } +} diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java index 79ff78e8496e6..38f12a13e3794 100644 --- a/services/core/java/com/android/server/wm/WindowManagerService.java +++ b/services/core/java/com/android/server/wm/WindowManagerService.java @@ -1563,6 +1563,16 @@ public class WindowManagerService extends IWindowManager.Stub mLayersController.setInputMethodAnimLayerAdjustment(0); } } + + // If the docked divider is visible, we still need to go through this whole + // excercise to find the appropriate input method target (used for animations + // and dialog adjustments), but for purposes of Z ordering we simply wish to + // place it above the docked divider. + WindowState dockedDivider = w.mDisplayContent.mDividerControllerLocked.getWindow(); + if (dockedDivider != null && dockedDivider.isVisibleLw()) { + int dividerIndex = windows.indexOf(dockedDivider); + return dividerIndex > 0 ? dividerIndex + 1 : i + 1; + } return i+1; } if (willMove) {