Merge "When restacking IM windows preserve relative order." into nyc-dev

This commit is contained in:
Rob Carr
2016-04-20 18:30:40 +00:00
committed by Android (Google) Code Review

View File

@@ -59,6 +59,7 @@ public class WindowLayersController {
private int mHighestApplicationLayer = 0; private int mHighestApplicationLayer = 0;
private ArrayDeque<WindowState> mPinnedWindows = new ArrayDeque<>(); private ArrayDeque<WindowState> mPinnedWindows = new ArrayDeque<>();
private ArrayDeque<WindowState> mDockedWindows = new ArrayDeque<>(); private ArrayDeque<WindowState> mDockedWindows = new ArrayDeque<>();
private ArrayDeque<WindowState> mInputMethodWindows = new ArrayDeque<>();
private WindowState mDockDivider = null; private WindowState mDockDivider = null;
private ArrayDeque<WindowState> mReplacingWindows = new ArrayDeque<>(); private ArrayDeque<WindowState> mReplacingWindows = new ArrayDeque<>();
@@ -166,6 +167,7 @@ public class WindowLayersController {
private void clear() { private void clear() {
mHighestApplicationLayer = 0; mHighestApplicationLayer = 0;
mPinnedWindows.clear(); mPinnedWindows.clear();
mInputMethodWindows.clear();
mDockedWindows.clear(); mDockedWindows.clear();
mReplacingWindows.clear(); mReplacingWindows.clear();
mDockDivider = null; mDockDivider = null;
@@ -179,6 +181,10 @@ public class WindowLayersController {
if (w.mWillReplaceWindow) { if (w.mWillReplaceWindow) {
mReplacingWindows.add(w); mReplacingWindows.add(w);
} }
if (w.mIsImWindow) {
mInputMethodWindows.add(w);
return;
}
final TaskStack stack = w.getStack(); final TaskStack stack = w.getStack();
if (stack == null) { if (stack == null) {
return; return;
@@ -200,12 +206,9 @@ public class WindowLayersController {
layer = assignAndIncreaseLayerIfNeeded(mDockDivider, layer); layer = assignAndIncreaseLayerIfNeeded(mDockDivider, layer);
if (mDockDivider != null && mDockDivider.isVisibleLw() if (mDockDivider != null && mDockDivider.isVisibleLw()) {
&& mService.mInputMethodWindow != null) { while (!mInputMethodWindows.isEmpty()) {
layer = assignAndIncreaseLayerIfNeeded(mService.mInputMethodWindow, layer); layer = assignAndIncreaseLayerIfNeeded(mInputMethodWindows.remove(), layer);
for (int i = mService.mInputMethodDialogs.size() - 1; i >= 0; i--) {
final WindowState dialog = mService.mInputMethodDialogs.get(i);
layer = assignAndIncreaseLayerIfNeeded(dialog, layer);
} }
} }