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

Commit 6be942bc authored by Jorim Jaggi's avatar Jorim Jaggi Committed by android-build-merger
Browse files

Merge "Animate home in separate layer" into pi-dev

am: e3a34816

Change-Id: I76fe28eb0091f974eb63d4fd6e3ec32beac19ddf
parents 77ef0ce3 e3a34816
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -1662,7 +1662,9 @@ class AppWindowToken extends WindowToken implements WindowManagerService.AppFree
    }

    SurfaceControl getAppAnimationLayer() {
        return getAppAnimationLayer(needsZBoost());
        return getAppAnimationLayer(isActivityTypeHome() ? ANIMATION_LAYER_HOME
                : needsZBoost() ? ANIMATION_LAYER_BOOSTED
                : ANIMATION_LAYER_STANDARD);
    }

    @Override
+24 −2
Original line number Diff line number Diff line
@@ -3190,6 +3190,7 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo
         */
        SurfaceControl mAppAnimationLayer = null;
        SurfaceControl mBoostedAppAnimationLayer = null;
        SurfaceControl mHomeAppAnimationLayer = null;

        /**
         * Given that the split-screen divider does not have an AppWindowToken, it
@@ -3552,6 +3553,7 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo
            int layer = 0;
            int layerForAnimationLayer = 0;
            int layerForBoostedAnimationLayer = 0;
            int layerForHomeAnimationLayer = 0;

            for (int state = 0; state <= ALWAYS_ON_TOP_STATE; state++) {
                for (int i = 0; i < mChildren.size(); i++) {
@@ -3578,6 +3580,9 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo
                        layerForBoostedAnimationLayer = layer++;
                    }
                }
                if (state == HOME_STACK_STATE) {
                    layerForHomeAnimationLayer = layer++;
                }
            }
            if (mAppAnimationLayer != null) {
                t.setLayer(mAppAnimationLayer, layerForAnimationLayer);
@@ -3585,11 +3590,22 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo
            if (mBoostedAppAnimationLayer != null) {
                t.setLayer(mBoostedAppAnimationLayer, layerForBoostedAnimationLayer);
            }
            if (mHomeAppAnimationLayer != null) {
                t.setLayer(mHomeAppAnimationLayer, layerForHomeAnimationLayer);
            }
        }

        @Override
        SurfaceControl getAppAnimationLayer(boolean boosted) {
            return boosted ? mBoostedAppAnimationLayer : mAppAnimationLayer;
        SurfaceControl getAppAnimationLayer(@AnimationLayer int animationLayer) {
            switch (animationLayer) {
                case ANIMATION_LAYER_BOOSTED:
                    return mBoostedAppAnimationLayer;
                case ANIMATION_LAYER_HOME:
                    return mHomeAppAnimationLayer;
                case ANIMATION_LAYER_STANDARD:
                default:
                    return mAppAnimationLayer;
            }
        }

        SurfaceControl getSplitScreenDividerAnchor() {
@@ -3606,12 +3622,16 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo
                mBoostedAppAnimationLayer = makeChildSurface(null)
                        .setName("boostedAnimationLayer")
                        .build();
                mHomeAppAnimationLayer = makeChildSurface(null)
                        .setName("homeAnimationLayer")
                        .build();
                mSplitScreenDividerAnchor = makeChildSurface(null)
                        .setName("splitScreenDividerAnchor")
                        .build();
                getPendingTransaction()
                        .show(mAppAnimationLayer)
                        .show(mBoostedAppAnimationLayer)
                        .show(mHomeAppAnimationLayer)
                        .show(mSplitScreenDividerAnchor);
                scheduleAnimation();
            } else {
@@ -3619,6 +3639,8 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo
                mAppAnimationLayer = null;
                mBoostedAppAnimationLayer.destroy();
                mBoostedAppAnimationLayer = null;
                mHomeAppAnimationLayer.destroy();
                mHomeAppAnimationLayer = null;
                mSplitScreenDividerAnchor.destroy();
                mSplitScreenDividerAnchor = null;
            }
+1 −1
Original line number Diff line number Diff line
@@ -564,7 +564,7 @@ class Task extends WindowContainer<AppWindowToken> {
    public SurfaceControl getAnimationLeashParent() {
        // Reparent to the animation layer so that we aren't clipped by the non-minimized
        // stack bounds, currently we only animate the task for the recents animation
        return getAppAnimationLayer(false /* boosted */);
        return getAppAnimationLayer(ANIMATION_LAYER_STANDARD);
    }

    boolean isTaskAnimating() {
+23 −5
Original line number Diff line number Diff line
@@ -29,6 +29,8 @@ import static com.android.server.wm.WindowContainerProto.SURFACE_ANIMATOR;
import static com.android.server.wm.WindowContainerProto.VISIBLE;

import android.annotation.CallSuper;
import android.annotation.IntDef;
import android.app.WindowConfiguration;
import android.content.res.Configuration;
import android.graphics.Point;
import android.graphics.Rect;
@@ -60,6 +62,25 @@ class WindowContainer<E extends WindowContainer> extends ConfigurationContainer<

    private static final String TAG = TAG_WITH_CLASS_NAME ? "WindowContainer" : TAG_WM;

    /** Animation layer that happens above all animating {@link TaskStack}s. */
    static final int ANIMATION_LAYER_STANDARD = 0;

    /** Animation layer that happens above all {@link TaskStack}s. */
    static final int ANIMATION_LAYER_BOOSTED = 1;

    /**
     * Animation layer that is reserved for {@link WindowConfiguration#ACTIVITY_TYPE_HOME}
     * activities that happens below all {@link TaskStack}s.
     */
    static final int ANIMATION_LAYER_HOME = 2;

    @IntDef(prefix = { "ANIMATION_LAYER_" }, value = {
            ANIMATION_LAYER_STANDARD,
            ANIMATION_LAYER_BOOSTED,
            ANIMATION_LAYER_HOME,
    })
    @interface AnimationLayer {}

    static final int POSITION_TOP = Integer.MAX_VALUE;
    static final int POSITION_BOTTOM = Integer.MIN_VALUE;

@@ -1125,15 +1146,12 @@ class WindowContainer<E extends WindowContainer> extends ConfigurationContainer<
    }

    /**
     * @param boosted If true, returns an animation layer that happens above all {@link TaskStack}s
     *                Otherwise, the layer will be positioned above all animating
     *                {@link TaskStack}s.
     * @return The layer on which all app animations are happening.
     */
    SurfaceControl getAppAnimationLayer(boolean boosted) {
    SurfaceControl getAppAnimationLayer(@AnimationLayer int animationLayer) {
        final WindowContainer parent = getParent();
        if (parent != null) {
            return parent.getAppAnimationLayer(boosted);
            return parent.getAppAnimationLayer(animationLayer);
        }
        return null;
    }