summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Charles Chen <charlesccchen@google.com> 2024-07-31 04:01:05 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2024-07-31 04:01:05 +0000
commitcbd60fe78a14d8332471c00febff158fb0a95bf3 (patch)
tree4bf24f0d3f9d4206f68e2ac3ef49ab83f20bd293
parent8252d5fa43b3aaddb5159a25314f8e105393117a (diff)
parent8eda1f0ab55f1e77030cda3a1e1473ccdf969967 (diff)
Merge "Fix scene animation not applied to task target" into main
-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 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