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

Commit 8f574b54 authored by Pablo Gamito's avatar Pablo Gamito Committed by Android (Google) Code Review
Browse files

Merge "Use TDA for background color instead of new color layer"

parents e6148092 93850bd0
Loading
Loading
Loading
Loading
+22 −24
Original line number Diff line number Diff line
@@ -48,6 +48,7 @@ import android.app.ActivityOptions;
import android.app.WindowConfiguration;
import android.content.pm.ActivityInfo;
import android.content.res.Configuration;
import android.graphics.Color;
import android.os.UserHandle;
import android.util.IntArray;
import android.util.Slog;
@@ -81,9 +82,9 @@ final class TaskDisplayArea extends DisplayArea<WindowContainer> {
    DisplayContent mDisplayContent;

    /**
     * A color layer that serves as a solid color background to certain animations.
     * Keeps track of the last set color layer so that it can be reset during surface migrations.
     */
    private SurfaceControl mColorBackgroundLayer;
    private @ColorInt int mBackgroundColor = 0;

    /**
     * This counter is used to make sure we don't prematurely clear the background color in the
@@ -356,6 +357,14 @@ final class TaskDisplayArea extends DisplayArea<WindowContainer> {
        }
    }

    @Override
    void setInitialSurfaceControlProperties(SurfaceControl.Builder b) {
        // We want an effect layer instead of the default container layer so that we can set a
        // background color on it for task animations.
        b.setEffectLayer();
        super.setInitialSurfaceControlProperties(b);
    }

    @Override
    void addChild(WindowContainer child, int position) {
        if (child.asTaskDisplayArea() != null) {
@@ -875,11 +884,6 @@ final class TaskDisplayArea extends DisplayArea<WindowContainer> {
    void onParentChanged(ConfigurationContainer newParent, ConfigurationContainer oldParent) {
        if (getParent() != null) {
            super.onParentChanged(newParent, oldParent, () -> {
                mColorBackgroundLayer = makeChildSurface(null)
                        .setColorLayer()
                        .setName("colorBackgroundLayer")
                        .setCallsite("TaskDisplayArea.onParentChanged")
                        .build();
                mSplitScreenDividerAnchor = makeChildSurface(null)
                        .setName("splitScreenDividerAnchor")
                        .setCallsite("TaskDisplayArea.onParentChanged")
@@ -891,28 +895,18 @@ final class TaskDisplayArea extends DisplayArea<WindowContainer> {
        } else {
            super.onParentChanged(newParent, oldParent);
            mWmService.mTransactionFactory.get()
                    .remove(mColorBackgroundLayer)
                    .remove(mSplitScreenDividerAnchor)
                    .apply();
            mColorBackgroundLayer = null;
            mSplitScreenDividerAnchor = null;
        }
    }

    void setBackgroundColor(@ColorInt int color) {
        if (mColorBackgroundLayer == null) {
            return;
        }

        float r = ((color >> 16) & 0xff) / 255.0f;
        float g = ((color >>  8) & 0xff) / 255.0f;
        float b = ((color >>  0) & 0xff) / 255.0f;

    void setBackgroundColor(@ColorInt int colorInt) {
        mBackgroundColor = colorInt;
        Color color = Color.valueOf(colorInt);
        mColorLayerCounter++;

        getPendingTransaction()
                .setColor(mColorBackgroundLayer, new float[]{r, g, b})
                .show(mColorBackgroundLayer);
                .setColor(mSurfaceControl, new float[]{color.red(), color.green(), color.blue()});

        scheduleAnimation();
    }
@@ -923,7 +917,7 @@ final class TaskDisplayArea extends DisplayArea<WindowContainer> {
        // Only clear the color layer if we have received the same amounts of clear as set
        // requests.
        if (mColorLayerCounter == 0) {
            getPendingTransaction().hide(mColorBackgroundLayer);
            getPendingTransaction().unsetColor(mSurfaceControl);
            scheduleAnimation();
        }
    }
@@ -931,12 +925,16 @@ final class TaskDisplayArea extends DisplayArea<WindowContainer> {
    @Override
    void migrateToNewSurfaceControl(SurfaceControl.Transaction t) {
        super.migrateToNewSurfaceControl(t);
        if (mColorBackgroundLayer == null) {

        if (mColorLayerCounter > 0) {
            setBackgroundColor(mBackgroundColor);
        }

        if (mSplitScreenDividerAnchor == null) {
            return;
        }

        // As TaskDisplayArea is getting a new surface, reparent and reorder the child surfaces.
        t.reparent(mColorBackgroundLayer, mSurfaceControl);
        t.reparent(mSplitScreenDividerAnchor, mSurfaceControl);
        reassignLayer(t);
        scheduleAnimation();