Merge "Fix IME for status bar in docked mode" into nyc-dev
diff --git a/services/core/java/com/android/server/wm/WindowLayersController.java b/services/core/java/com/android/server/wm/WindowLayersController.java
index 8608967..55abf78 100644
--- a/services/core/java/com/android/server/wm/WindowLayersController.java
+++ b/services/core/java/com/android/server/wm/WindowLayersController.java
@@ -208,7 +208,11 @@
 
         if (mDockDivider != null && mDockDivider.isVisibleLw()) {
             while (!mInputMethodWindows.isEmpty()) {
-                layer = assignAndIncreaseLayerIfNeeded(mInputMethodWindows.remove(), layer);
+                final WindowState w = mInputMethodWindows.remove();
+                // Only ever move IME windows up, else we brake IME for windows above the divider.
+                if (layer > w.mLayer) {
+                    layer = assignAndIncreaseLayerIfNeeded(w, layer);
+                }
             }
         }
 
diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java
index 044828b..37b461c 100644
--- a/services/core/java/com/android/server/wm/WindowManagerService.java
+++ b/services/core/java/com/android/server/wm/WindowManagerService.java
@@ -1574,11 +1574,13 @@
             // 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.
+            // place it above the docked divider. Unless it is already above the divider.
             WindowState dockedDivider = w.mDisplayContent.mDividerControllerLocked.getWindow();
             if (dockedDivider != null && dockedDivider.isVisibleLw()) {
                 int dividerIndex = windows.indexOf(dockedDivider);
-                return dividerIndex > 0 ? dividerIndex + 1 : i + 1;
+                if (dividerIndex > 0 && dividerIndex > i) {
+                    return dividerIndex + 1;
+                }
             }
             return i+1;
         }