diff options
| author | 2024-07-31 04:01:05 +0000 | |
|---|---|---|
| committer | 2024-07-31 04:01:05 +0000 | |
| commit | cbd60fe78a14d8332471c00febff158fb0a95bf3 (patch) | |
| tree | 4bf24f0d3f9d4206f68e2ac3ef49ab83f20bd293 | |
| parent | 8252d5fa43b3aaddb5159a25314f8e105393117a (diff) | |
| parent | 8eda1f0ab55f1e77030cda3a1e1473ccdf969967 (diff) | |
Merge "Fix scene animation not applied to task target" into main
| -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 af3ed28d2c2a..0b79f14051dc 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; @@ -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(); } 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 |