diff options
| author | 2024-07-24 16:04:27 +0800 | |
|---|---|---|
| committer | 2024-07-30 12:43:26 +0800 | |
| commit | 8eda1f0ab55f1e77030cda3a1e1473ccdf969967 (patch) | |
| tree | 491e3118ac7545b047cf5b3726f7d9a30da3b9ac | |
| parent | 0454d09600e9790bd3f70887ecd018b30d5d27e8 (diff) | |
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
| -rw-r--r-- | services/core/java/com/android/server/wm/Transition.java | 15 | ||||
| -rw-r--r-- | services/tests/wmtests/src/com/android/server/wm/TransitionTests.java | 28 |
2 files changed, 40 insertions, 3 deletions
diff --git a/services/core/java/com/android/server/wm/Transition.java b/services/core/java/com/android/server/wm/Transition.java index 358adc3352e7..6e55e2a844df 100644 --- a/services/core/java/com/android/server/wm/Transition.java +++ b/services/core/java/com/android/server/wm/Transition.java @@ -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(); } diff --git a/services/tests/wmtests/src/com/android/server/wm/TransitionTests.java b/services/tests/wmtests/src/com/android/server/wm/TransitionTests.java index 720457e24370..49e349caa379 100644 --- a/services/tests/wmtests/src/com/android/server/wm/TransitionTests.java +++ b/services/tests/wmtests/src/com/android/server/wm/TransitionTests.java @@ -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"); @@ -2047,6 +2047,32 @@ public class TransitionTests extends WindowTestsBase { @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() { initializeOverrideAnimationOptionsTest(); TransitionInfo.AnimationOptions options = TransitionInfo.AnimationOptions |