From 67eec038f4628f36e813329736802c331dc2dbc6 Mon Sep 17 00:00:00 2001 From: Robert Carr Date: Tue, 22 Mar 2016 16:57:33 -0700 Subject: Include animation layer adjustment even while docked. When adjusting special windows (e.g. docked windows), we omit the animation layer adjustment. This was largely safe as we place such special windows above the otherwise highest layer, and we want docked windows above animating windows. However in the case of multiple animating docked windows, we need to use the animation layer adjustment to distinguish the ordering. Bug: 27712710 Change-Id: Ieb86fd1231d9b04b73de95902832facf4dc0ea3e --- .../android/server/wm/WindowLayersController.java | 27 +++++++++++----------- 1 file changed, 13 insertions(+), 14 deletions(-) diff --git a/services/core/java/com/android/server/wm/WindowLayersController.java b/services/core/java/com/android/server/wm/WindowLayersController.java index d843a8ce398f..e018a4ef80ba 100644 --- a/services/core/java/com/android/server/wm/WindowLayersController.java +++ b/services/core/java/com/android/server/wm/WindowLayersController.java @@ -77,28 +77,22 @@ public class WindowLayersController { int oldLayer = w.mLayer; if (w.mBaseLayer == curBaseLayer || w.mIsImWindow || (i > 0 && w.mIsWallpaper)) { curLayer += WINDOW_LAYER_MULTIPLIER; - w.mLayer = curLayer; } else { curBaseLayer = curLayer = w.mBaseLayer; - w.mLayer = curLayer; - } - if (w.mLayer != oldLayer) { - layerChanged = true; - anyLayerChanged = true; } + assignAnimLayer(w, curLayer); - final WindowStateAnimator winAnimator = w.mWinAnimator; - oldLayer = winAnimator.mAnimLayer; - winAnimator.mAnimLayer = w.mLayer + w.getAnimLayerAdjustment() + - getSpecialWindowAnimLayerAdjustment(w); - if (winAnimator.mAnimLayer != oldLayer) { + // TODO: Preserved old behavior of code here but not sure comparing + // oldLayer to mAnimLayer and mLayer makes sense...though the + // worst case would be unintentionalp layer reassignment. + if (w.mLayer != oldLayer || w.mWinAnimator.mAnimLayer != oldLayer) { layerChanged = true; anyLayerChanged = true; } if (w.mAppToken != null) { mHighestApplicationLayer = Math.max(mHighestApplicationLayer, - winAnimator.mAnimLayer); + w.mWinAnimator.mAnimLayer); } collectSpecialWindows(w); @@ -223,12 +217,17 @@ public class WindowLayersController { private int assignAndIncreaseLayerIfNeeded(WindowState win, int layer) { if (win != null) { - win.mLayer = layer; - win.mWinAnimator.mAnimLayer = layer; + assignAnimLayer(win, layer); layer++; } return layer; } + + private void assignAnimLayer(WindowState w, int layer) { + w.mLayer = layer; + w.mWinAnimator.mAnimLayer = w.mLayer + w.getAnimLayerAdjustment() + + getSpecialWindowAnimLayerAdjustment(w); + } void dump(PrintWriter pw, String s) { if (mInputMethodAnimLayerAdjustment != 0 || -- cgit v1.2.3-59-g8ed1b