diff options
| author | 2016-04-20 18:30:40 +0000 | |
|---|---|---|
| committer | 2016-04-20 18:30:42 +0000 | |
| commit | db973df830c32af8e2aeff256053299409f65dfd (patch) | |
| tree | 8bb9b4991bc4c14c6f6e7a5b0eb2f2ef637e76e1 | |
| parent | 5a2554a8544525953c0847a1d3c975413eb07986 (diff) | |
| parent | b976877a4b62a6030fe67796ab8a6a69b4cc041f (diff) | |
Merge "When restacking IM windows preserve relative order." into nyc-dev
| -rw-r--r-- | services/core/java/com/android/server/wm/WindowLayersController.java | 15 |
1 files changed, 9 insertions, 6 deletions
diff --git a/services/core/java/com/android/server/wm/WindowLayersController.java b/services/core/java/com/android/server/wm/WindowLayersController.java index ed1f4287b49e..8608967667a8 100644 --- a/services/core/java/com/android/server/wm/WindowLayersController.java +++ b/services/core/java/com/android/server/wm/WindowLayersController.java @@ -59,6 +59,7 @@ public class WindowLayersController { private int mHighestApplicationLayer = 0; private ArrayDeque<WindowState> mPinnedWindows = new ArrayDeque<>(); private ArrayDeque<WindowState> mDockedWindows = new ArrayDeque<>(); + private ArrayDeque<WindowState> mInputMethodWindows = new ArrayDeque<>(); private WindowState mDockDivider = null; private ArrayDeque<WindowState> mReplacingWindows = new ArrayDeque<>(); @@ -166,6 +167,7 @@ public class WindowLayersController { private void clear() { mHighestApplicationLayer = 0; mPinnedWindows.clear(); + mInputMethodWindows.clear(); mDockedWindows.clear(); mReplacingWindows.clear(); mDockDivider = null; @@ -179,6 +181,10 @@ public class WindowLayersController { if (w.mWillReplaceWindow) { mReplacingWindows.add(w); } + if (w.mIsImWindow) { + mInputMethodWindows.add(w); + return; + } final TaskStack stack = w.getStack(); if (stack == null) { return; @@ -200,12 +206,9 @@ public class WindowLayersController { layer = assignAndIncreaseLayerIfNeeded(mDockDivider, layer); - if (mDockDivider != null && mDockDivider.isVisibleLw() - && mService.mInputMethodWindow != null) { - layer = assignAndIncreaseLayerIfNeeded(mService.mInputMethodWindow, layer); - for (int i = mService.mInputMethodDialogs.size() - 1; i >= 0; i--) { - final WindowState dialog = mService.mInputMethodDialogs.get(i); - layer = assignAndIncreaseLayerIfNeeded(dialog, layer); + if (mDockDivider != null && mDockDivider.isVisibleLw()) { + while (!mInputMethodWindows.isEmpty()) { + layer = assignAndIncreaseLayerIfNeeded(mInputMethodWindows.remove(), layer); } } |