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

Commit 31fce85d authored by Wei Sheng Shih's avatar Wei Sheng Shih Committed by Automerger Merge Worker
Browse files

Merge "Draw background color above display area..." into udc-dev am: c7e6a782 am: 0c374be3

parents 284727ca 0c374be3
Loading
Loading
Loading
Loading
+6 −4
Original line number Original line Diff line number Diff line
@@ -103,13 +103,13 @@ import com.android.wm.shell.unfold.UnfoldAnimationController;
import com.android.wm.shell.unfold.UnfoldTransitionHandler;
import com.android.wm.shell.unfold.UnfoldTransitionHandler;
import com.android.wm.shell.windowdecor.WindowDecorViewModel;
import com.android.wm.shell.windowdecor.WindowDecorViewModel;


import java.util.Optional;

import dagger.BindsOptionalOf;
import dagger.BindsOptionalOf;
import dagger.Lazy;
import dagger.Lazy;
import dagger.Module;
import dagger.Module;
import dagger.Provides;
import dagger.Provides;


import java.util.Optional;

/**
/**
 * Provides basic dependencies from {@link com.android.wm.shell}, these dependencies are only
 * Provides basic dependencies from {@link com.android.wm.shell}, these dependencies are only
 * accessible from components within the WM subcomponent (can be explicitly exposed to the
 * accessible from components within the WM subcomponent (can be explicitly exposed to the
@@ -556,13 +556,15 @@ public abstract class WMShellBaseModule {
            @ShellMainThread ShellExecutor mainExecutor,
            @ShellMainThread ShellExecutor mainExecutor,
            @ShellMainThread Handler mainHandler,
            @ShellMainThread Handler mainHandler,
            @ShellAnimationThread ShellExecutor animExecutor,
            @ShellAnimationThread ShellExecutor animExecutor,
            ShellCommandHandler shellCommandHandler) {
            ShellCommandHandler shellCommandHandler,
            RootTaskDisplayAreaOrganizer rootTaskDisplayAreaOrganizer) {
        if (!context.getResources().getBoolean(R.bool.config_registerShellTransitionsOnInit)) {
        if (!context.getResources().getBoolean(R.bool.config_registerShellTransitionsOnInit)) {
            // TODO(b/238217847): Force override shell init if registration is disabled
            // TODO(b/238217847): Force override shell init if registration is disabled
            shellInit = new ShellInit(mainExecutor);
            shellInit = new ShellInit(mainExecutor);
        }
        }
        return new Transitions(context, shellInit, shellController, organizer, pool,
        return new Transitions(context, shellInit, shellController, organizer, pool,
                displayController, mainExecutor, mainHandler, animExecutor, shellCommandHandler);
                displayController, mainExecutor, mainHandler, animExecutor, shellCommandHandler,
                rootTaskDisplayAreaOrganizer);
    }
    }


    @WMSingleton
    @WMSingleton
+37 −12
Original line number Original line Diff line number Diff line
@@ -58,7 +58,6 @@ import static com.android.internal.policy.TransitionAnimation.WALLPAPER_TRANSITI
import static com.android.internal.policy.TransitionAnimation.WALLPAPER_TRANSITION_INTRA_OPEN;
import static com.android.internal.policy.TransitionAnimation.WALLPAPER_TRANSITION_INTRA_OPEN;
import static com.android.internal.policy.TransitionAnimation.WALLPAPER_TRANSITION_NONE;
import static com.android.internal.policy.TransitionAnimation.WALLPAPER_TRANSITION_NONE;
import static com.android.internal.policy.TransitionAnimation.WALLPAPER_TRANSITION_OPEN;
import static com.android.internal.policy.TransitionAnimation.WALLPAPER_TRANSITION_OPEN;
import static com.android.wm.shell.transition.TransitionAnimationHelper.addBackgroundToTransition;
import static com.android.wm.shell.transition.TransitionAnimationHelper.edgeExtendWindow;
import static com.android.wm.shell.transition.TransitionAnimationHelper.edgeExtendWindow;
import static com.android.wm.shell.transition.TransitionAnimationHelper.getTransitionBackgroundColorIfSet;
import static com.android.wm.shell.transition.TransitionAnimationHelper.getTransitionBackgroundColorIfSet;
import static com.android.wm.shell.transition.TransitionAnimationHelper.loadAttributeAnimation;
import static com.android.wm.shell.transition.TransitionAnimationHelper.loadAttributeAnimation;
@@ -76,6 +75,7 @@ import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Context;
import android.content.Intent;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.IntentFilter;
import android.graphics.Color;
import android.graphics.Insets;
import android.graphics.Insets;
import android.graphics.Point;
import android.graphics.Point;
import android.graphics.Rect;
import android.graphics.Rect;
@@ -103,6 +103,7 @@ import com.android.internal.policy.AttributeCache;
import com.android.internal.policy.ScreenDecorationsUtils;
import com.android.internal.policy.ScreenDecorationsUtils;
import com.android.internal.policy.TransitionAnimation;
import com.android.internal.policy.TransitionAnimation;
import com.android.internal.protolog.common.ProtoLog;
import com.android.internal.protolog.common.ProtoLog;
import com.android.wm.shell.RootTaskDisplayAreaOrganizer;
import com.android.wm.shell.common.DisplayController;
import com.android.wm.shell.common.DisplayController;
import com.android.wm.shell.common.DisplayLayout;
import com.android.wm.shell.common.DisplayLayout;
import com.android.wm.shell.common.ShellExecutor;
import com.android.wm.shell.common.ShellExecutor;
@@ -137,6 +138,7 @@ public class DefaultTransitionHandler implements Transitions.TransitionHandler {
    private final Rect mInsets = new Rect(0, 0, 0, 0);
    private final Rect mInsets = new Rect(0, 0, 0, 0);
    private float mTransitionAnimationScaleSetting = 1.0f;
    private float mTransitionAnimationScaleSetting = 1.0f;


    private final RootTaskDisplayAreaOrganizer mRootTDAOrganizer;
    private final int mCurrentUserId;
    private final int mCurrentUserId;


    private Drawable mEnterpriseThumbnailDrawable;
    private Drawable mEnterpriseThumbnailDrawable;
@@ -157,7 +159,8 @@ public class DefaultTransitionHandler implements Transitions.TransitionHandler {
            @NonNull DisplayController displayController,
            @NonNull DisplayController displayController,
            @NonNull TransactionPool transactionPool,
            @NonNull TransactionPool transactionPool,
            @NonNull ShellExecutor mainExecutor, @NonNull Handler mainHandler,
            @NonNull ShellExecutor mainExecutor, @NonNull Handler mainHandler,
            @NonNull ShellExecutor animExecutor) {
            @NonNull ShellExecutor animExecutor,
            @NonNull RootTaskDisplayAreaOrganizer rootTDAOrganizer) {
        mDisplayController = displayController;
        mDisplayController = displayController;
        mTransactionPool = transactionPool;
        mTransactionPool = transactionPool;
        mContext = context;
        mContext = context;
@@ -168,6 +171,7 @@ public class DefaultTransitionHandler implements Transitions.TransitionHandler {
        mCurrentUserId = UserHandle.myUserId();
        mCurrentUserId = UserHandle.myUserId();
        mDevicePolicyManager = mContext.getSystemService(DevicePolicyManager.class);
        mDevicePolicyManager = mContext.getSystemService(DevicePolicyManager.class);
        shellInit.addInitCallback(this::onInit, this);
        shellInit.addInitCallback(this::onInit, this);
        mRootTDAOrganizer = rootTDAOrganizer;
    }
    }


    private void onInit() {
    private void onInit() {
@@ -510,10 +514,8 @@ public class DefaultTransitionHandler implements Transitions.TransitionHandler {
        }
        }


        if (backgroundColorForTransition != 0) {
        if (backgroundColorForTransition != 0) {
            for (int i = 0; i < info.getRootCount(); ++i) {
            addBackgroundColorOnTDA(info, backgroundColorForTransition, startTransaction,
                addBackgroundToTransition(info.getRoot(i).getLeash(), backgroundColorForTransition,
                    finishTransaction);
                        startTransaction, finishTransaction);
            }
        }
        }


        if (postStartTransactionCallbacks.size() > 0) {
        if (postStartTransactionCallbacks.size() > 0) {
@@ -543,6 +545,28 @@ public class DefaultTransitionHandler implements Transitions.TransitionHandler {
        return true;
        return true;
    }
    }


    private void addBackgroundColorOnTDA(@NonNull TransitionInfo info,
            @ColorInt int color, @NonNull SurfaceControl.Transaction startTransaction,
            @NonNull SurfaceControl.Transaction finishTransaction) {
        final Color bgColor = Color.valueOf(color);
        final float[] colorArray = new float[] { bgColor.red(), bgColor.green(), bgColor.blue() };

        for (int i = 0; i < info.getRootCount(); ++i) {
            final int displayId = info.getRoot(i).getDisplayId();
            final SurfaceControl.Builder colorLayerBuilder = new SurfaceControl.Builder()
                    .setName("animation-background")
                    .setCallsite("DefaultTransitionHandler")
                    .setColorLayer();

            mRootTDAOrganizer.attachToDisplayArea(displayId, colorLayerBuilder);
            final SurfaceControl backgroundSurface = colorLayerBuilder.build();
            startTransaction.setColor(backgroundSurface, colorArray)
                    .setLayer(backgroundSurface, -1)
                    .show(backgroundSurface);
            finishTransaction.remove(backgroundSurface);
        }
    }

    private static boolean isDreamTransition(@NonNull TransitionInfo info) {
    private static boolean isDreamTransition(@NonNull TransitionInfo info) {
        for (int i = info.getChanges().size() - 1; i >= 0; --i) {
        for (int i = info.getChanges().size() - 1; i >= 0; --i) {
            final TransitionInfo.Change change = info.getChanges().get(i);
            final TransitionInfo.Change change = info.getChanges().get(i);
@@ -886,17 +910,18 @@ public class DefaultTransitionHandler implements Transitions.TransitionHandler {
    }
    }


    private static void applyTransformation(long time, SurfaceControl.Transaction t,
    private static void applyTransformation(long time, SurfaceControl.Transaction t,
            SurfaceControl leash, Animation anim, Transformation transformation, float[] matrix,
            SurfaceControl leash, Animation anim, Transformation tmpTransformation, float[] matrix,
            Point position, float cornerRadius, @Nullable Rect immutableClipRect) {
            Point position, float cornerRadius, @Nullable Rect immutableClipRect) {
        anim.getTransformation(time, transformation);
        tmpTransformation.clear();
        anim.getTransformation(time, tmpTransformation);
        if (position != null) {
        if (position != null) {
            transformation.getMatrix().postTranslate(position.x, position.y);
            tmpTransformation.getMatrix().postTranslate(position.x, position.y);
        }
        }
        t.setMatrix(leash, transformation.getMatrix(), matrix);
        t.setMatrix(leash, tmpTransformation.getMatrix(), matrix);
        t.setAlpha(leash, transformation.getAlpha());
        t.setAlpha(leash, tmpTransformation.getAlpha());


        final Rect clipRect = immutableClipRect == null ? null : new Rect(immutableClipRect);
        final Rect clipRect = immutableClipRect == null ? null : new Rect(immutableClipRect);
        Insets extensionInsets = Insets.min(transformation.getInsets(), Insets.NONE);
        Insets extensionInsets = Insets.min(tmpTransformation.getInsets(), Insets.NONE);
        if (!extensionInsets.equals(Insets.NONE) && clipRect != null && !clipRect.isEmpty()) {
        if (!extensionInsets.equals(Insets.NONE) && clipRect != null && !clipRect.isEmpty()) {
            // Clip out any overflowing edge extension
            // Clip out any overflowing edge extension
            clipRect.inset(extensionInsets);
            clipRect.inset(extensionInsets);
+6 −3
Original line number Original line Diff line number Diff line
@@ -69,6 +69,7 @@ import androidx.annotation.BinderThread;
import com.android.internal.R;
import com.android.internal.R;
import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.protolog.common.ProtoLog;
import com.android.internal.protolog.common.ProtoLog;
import com.android.wm.shell.RootTaskDisplayAreaOrganizer;
import com.android.wm.shell.common.DisplayController;
import com.android.wm.shell.common.DisplayController;
import com.android.wm.shell.common.ExternalInterfaceBinder;
import com.android.wm.shell.common.ExternalInterfaceBinder;
import com.android.wm.shell.common.RemoteCallable;
import com.android.wm.shell.common.RemoteCallable;
@@ -265,7 +266,8 @@ public class Transitions implements RemoteCallable<Transitions>,
            @NonNull Handler mainHandler,
            @NonNull Handler mainHandler,
            @NonNull ShellExecutor animExecutor) {
            @NonNull ShellExecutor animExecutor) {
        this(context, shellInit, shellController, organizer, pool, displayController, mainExecutor,
        this(context, shellInit, shellController, organizer, pool, displayController, mainExecutor,
                mainHandler, animExecutor, null);
                mainHandler, animExecutor, null,
                new RootTaskDisplayAreaOrganizer(mainExecutor, context));
    }
    }


    public Transitions(@NonNull Context context,
    public Transitions(@NonNull Context context,
@@ -277,7 +279,8 @@ public class Transitions implements RemoteCallable<Transitions>,
            @NonNull ShellExecutor mainExecutor,
            @NonNull ShellExecutor mainExecutor,
            @NonNull Handler mainHandler,
            @NonNull Handler mainHandler,
            @NonNull ShellExecutor animExecutor,
            @NonNull ShellExecutor animExecutor,
            @Nullable ShellCommandHandler shellCommandHandler) {
            @Nullable ShellCommandHandler shellCommandHandler,
            @NonNull RootTaskDisplayAreaOrganizer rootTDAOrganizer) {
        mOrganizer = organizer;
        mOrganizer = organizer;
        mContext = context;
        mContext = context;
        mMainExecutor = mainExecutor;
        mMainExecutor = mainExecutor;
@@ -285,7 +288,7 @@ public class Transitions implements RemoteCallable<Transitions>,
        mDisplayController = displayController;
        mDisplayController = displayController;
        mPlayerImpl = new TransitionPlayerImpl();
        mPlayerImpl = new TransitionPlayerImpl();
        mDefaultTransitionHandler = new DefaultTransitionHandler(context, shellInit,
        mDefaultTransitionHandler = new DefaultTransitionHandler(context, shellInit,
                displayController, pool, mainExecutor, mainHandler, animExecutor);
                displayController, pool, mainExecutor, mainHandler, animExecutor, rootTDAOrganizer);
        mRemoteTransitionHandler = new RemoteTransitionHandler(mMainExecutor);
        mRemoteTransitionHandler = new RemoteTransitionHandler(mMainExecutor);
        mShellController = shellController;
        mShellController = shellController;
        // The very last handler (0 in the list) should be the default one.
        // The very last handler (0 in the list) should be the default one.