summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Rob Carr <racarr@google.com> 2016-04-20 18:30:40 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2016-04-20 18:30:42 +0000
commitdb973df830c32af8e2aeff256053299409f65dfd (patch)
tree8bb9b4991bc4c14c6f6e7a5b0eb2f2ef637e76e1
parent5a2554a8544525953c0847a1d3c975413eb07986 (diff)
parentb976877a4b62a6030fe67796ab8a6a69b4cc041f (diff)
Merge "When restacking IM windows preserve relative order." into nyc-dev
-rw-r--r--services/core/java/com/android/server/wm/WindowLayersController.java15
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);
}
}