Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 67eec038 authored by Robert Carr's avatar Robert Carr
Browse files

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
parent 1c609e1a
Loading
Loading
Loading
Loading
+13 −14
Original line number Diff line number Diff line
@@ -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,13 +217,18 @@ 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 ||
                mService.mWallpaperControllerLocked.getAnimLayerAdjustment() != 0) {