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

Commit cbd60fe7 authored by Charles Chen's avatar Charles Chen Committed by Android (Google) Code Review
Browse files

Merge "Fix scene animation not applied to task target" into main

parents 8252d5fa 8eda1f0a
Loading
Loading
Loading
Loading
+13 −2
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@ package com.android.server.wm;

import static android.app.ActivityOptions.ANIM_CUSTOM;
import static android.app.ActivityOptions.ANIM_OPEN_CROSS_PROFILE_APPS;
import static android.app.ActivityOptions.ANIM_SCENE_TRANSITION;
import static android.app.WindowConfiguration.ACTIVITY_TYPE_HOME;
import static android.app.WindowConfiguration.ACTIVITY_TYPE_RECENTS;
import static android.app.WindowConfiguration.ACTIVITY_TYPE_STANDARD;
@@ -1936,8 +1937,7 @@ class Transition implements BLASTSyncEngine.TransactionReadyListener {
            for (int i = changes.size() - 1; i >= 0; --i) {
                final WindowContainer<?> container = mTargets.get(i).mContainer;
                if (container.asActivityRecord() != null
                        || (container.asTask() != null
                                && mOverrideOptions.getOverrideTaskTransition())) {
                        || shouldApplyAnimOptionsToTask(container.asTask())) {
                    changes.get(i).setAnimationOptions(mOverrideOptions);
                    // TODO(b/295805497): Extract mBackgroundColor from AnimationOptions.
                    changes.get(i).setBackgroundColor(mOverrideOptions.getBackgroundColor());
@@ -1951,6 +1951,16 @@ class Transition implements BLASTSyncEngine.TransactionReadyListener {
        updateActivityTargetForCrossProfileAnimation(info);
    }

    private boolean shouldApplyAnimOptionsToTask(@Nullable Task task) {
        if (task == null || mOverrideOptions == null) {
            return false;
        }
        final int animType = mOverrideOptions.getType();
        // Only apply AnimationOptions to Task if it is specified in #getOverrideTaskTransition
        // or it's ANIM_SCENE_TRANSITION.
        return animType == ANIM_SCENE_TRANSITION || mOverrideOptions.getOverrideTaskTransition();
    }

    private boolean shouldApplyAnimOptionsToEmbeddedTf(@Nullable TaskFragment taskFragment) {
        if (taskFragment == null || !taskFragment.isEmbedded()) {
            return false;
@@ -2377,6 +2387,7 @@ class Transition implements BLASTSyncEngine.TransactionReadyListener {
        sb.append(" id=" + mSyncId);
        sb.append(" type=" + transitTypeToString(mType));
        sb.append(" flags=0x" + Integer.toHexString(mFlags));
        sb.append(" overrideAnimOptions=" + mOverrideOptions);
        sb.append('}');
        return sb.toString();
    }
+27 −1
Original line number Diff line number Diff line
@@ -2021,7 +2021,7 @@ public class TransitionTests extends WindowTestsBase {

    @EnableFlags(Flags.FLAG_MOVE_ANIMATION_OPTIONS_TO_CHANGE)
    @Test
    public void testOverrideAnimationOptionsToInfoIfNecessary_nonCustomAnimOptions() {
    public void testOverrideAnimationOptionsToInfoIfNecessary_fromStyleAnimOptions() {
        initializeOverrideAnimationOptionsTest();
        TransitionInfo.AnimationOptions options = TransitionInfo.AnimationOptions
                .makeCommonAnimOptions("testPackage");
@@ -2045,6 +2045,32 @@ public class TransitionTests extends WindowTestsBase {
                options, activityChange.getAnimationOptions());
    }

    @EnableFlags(Flags.FLAG_MOVE_ANIMATION_OPTIONS_TO_CHANGE)
    @Test
    public void testOverrideAnimationOptionsToInfoIfNecessary_sceneAnimOptions() {
        initializeOverrideAnimationOptionsTest();
        TransitionInfo.AnimationOptions options = TransitionInfo.AnimationOptions
                .makeSceneTransitionAnimOptions();
        mTransition.setOverrideAnimation(options, null /* startCallback */,
                null /* finishCallback */);

        mTransition.overrideAnimationOptionsToInfoIfNecessary(mInfo);

        final TransitionInfo.Change displayChange = mInfo.getChanges().get(0);
        final TransitionInfo.Change taskChange = mInfo.getChanges().get(1);
        final TransitionInfo.Change embeddedTfChange = mInfo.getChanges().get(2);
        final TransitionInfo.Change activityChange = mInfo.getChanges().get(3);

        assertNull("Display change's AnimationOptions must not be overridden.",
                displayChange.getAnimationOptions());
        assertEquals("Task change's AnimationOptions must be overridden.",
                options, taskChange.getAnimationOptions());
        assertNull("Embedded TF change's AnimationOptions must not be overridden.",
                embeddedTfChange.getAnimationOptions());
        assertEquals("Activity change's AnimationOptions must be overridden.",
                options, activityChange.getAnimationOptions());
    }

    @EnableFlags(Flags.FLAG_MOVE_ANIMATION_OPTIONS_TO_CHANGE)
    @Test
    public void testOverrideAnimationOptionsToInfoIfNecessary_crossProfileAnimOptions() {