summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Charles Chen <charlesccchen@google.com> 2024-07-24 16:04:27 +0800
committer Charles Chen <charlesccchen@google.com> 2024-07-30 12:43:26 +0800
commit8eda1f0ab55f1e77030cda3a1e1473ccdf969967 (patch)
tree491e3118ac7545b047cf5b3726f7d9a30da3b9ac
parent0454d09600e9790bd3f70887ecd018b30d5d27e8 (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.java15
-rw-r--r--services/tests/wmtests/src/com/android/server/wm/TransitionTests.java28
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