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

Commit 8eda1f0a authored by Charles Chen's avatar Charles Chen
Browse files

Fix scene animation not applied to task target

Previously, we only apply override AnimationOptions to Task target
if it's specified to override task transition in AnimationOptions.

Now, from the logic in DefaultTranitionHandler#loadAnimation,
we should update the logic to apply Animationptions except for
type ANIM_CUSTOM without task transition override.

Test: atest TransitionTests
Fixes: 353490590
Flag: EXEMPT bugfix

Change-Id: I2601572256f6586c49cf293508a7ac5d1f5eabc2
parent 0454d096
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;
@@ -2378,6 +2388,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() {