Loading services/core/java/com/android/server/wm/Transition.java +17 −4 Original line number Diff line number Diff line Loading @@ -2196,14 +2196,16 @@ class Transition implements BLASTSyncEngine.TransactionReadyListener { final List<TransitionInfo.Change> changes = info.getChanges(); for (int i = changes.size() - 1; i >= 0; --i) { final WindowContainer<?> container = mTargets.get(i).mContainer; final TransitionInfo.Change change = changes.get(i); if (container.asActivityRecord() != null || shouldApplyAnimOptionsToTask(container.asTask())) { changes.get(i).setAnimationOptions(mOverrideOptions); changes.get(i).setBackgroundColor(mOverrideBackgroundColor); || shouldApplyAnimOptionsToTask(container.asTask()) || shouldApplyAnimOptionsToFillParentTf(container.asTaskFragment(), change)) { change.setAnimationOptions(mOverrideOptions); change.setBackgroundColor(mOverrideBackgroundColor); } else if (shouldApplyAnimOptionsToEmbeddedTf(container.asTaskFragment())) { // We only override AnimationOptions because backgroundColor should be from // TaskFragmentAnimationParams. changes.get(i).setAnimationOptions(mOverrideOptions); change.setAnimationOptions(mOverrideOptions); } } updateActivityTargetForCrossProfileAnimation(info); Loading @@ -2219,6 +2221,17 @@ class Transition implements BLASTSyncEngine.TransactionReadyListener { return animType == ANIM_SCENE_TRANSITION || mOverrideOptions.getOverrideTaskTransition(); } private boolean shouldApplyAnimOptionsToFillParentTf( @Nullable TaskFragment taskFragment, @NonNull TransitionInfo.Change change) { if (taskFragment == null || !taskFragment.isEmbedded() || mOverrideOptions == null) { return false; } // Apply AnimationOptions to TaskFragment if it fills parent and the animation is a scene // transition. return change.hasFlags(FLAG_FILLS_TASK) && mOverrideOptions.getType() == ANIM_SCENE_TRANSITION; } private boolean shouldApplyAnimOptionsToEmbeddedTf(@Nullable TaskFragment taskFragment) { if (taskFragment == null || !taskFragment.isEmbedded()) { return false; Loading services/tests/wmtests/src/com/android/server/wm/TransitionTests.java +43 −5 Original line number Diff line number Diff line Loading @@ -2164,8 +2164,9 @@ public class TransitionTests extends WindowTestsBase { } @Test public void testOverrideAnimationOptionsToInfoIfNecessary_sceneAnimOptions() { ActivityRecord r = initializeOverrideAnimationOptionsTest(); public void testOverrideAnimationOptionsToInfoIfNecessary_sceneAnimOptions_fillParentTF() { ActivityRecord r = initializeOverrideAnimationOptionsTest( true /* fillParentTaskFragment */); TransitionInfo.AnimationOptions options = TransitionInfo.AnimationOptions .makeSceneTransitionAnimOptions(); mTransition.setOverrideAnimation(options, r, null /* startCallback */, Loading @@ -2182,7 +2183,35 @@ public class TransitionTests extends WindowTestsBase { displayChange.getAnimationOptions()); assertEquals("Task change's AnimationOptions must be overridden.", options, taskChange.getAnimationOptions()); assertNull("Embedded TF change's AnimationOptions must not be overridden.", assertEquals( "Fill-parent embedded TF change's AnimationOptions must be overridden.", options, embeddedTfChange.getAnimationOptions()); assertEquals("Activity change's AnimationOptions must be overridden.", options, activityChange.getAnimationOptions()); } @Test public void testOverrideAnimationOptionsToInfoIfNecessary_sceneAnimOptions_nonFillParentTF() { ActivityRecord r = initializeOverrideAnimationOptionsTest( false /* fillParentTaskFragment */); TransitionInfo.AnimationOptions options = TransitionInfo.AnimationOptions .makeSceneTransitionAnimOptions(); mTransition.setOverrideAnimation(options, r, 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( "Non-fill-parent embedded TF change's AnimationOptions must not be overridden.", embeddedTfChange.getAnimationOptions()); assertEquals("Activity change's AnimationOptions must be overridden.", options, activityChange.getAnimationOptions()); Loading Loading @@ -2337,6 +2366,10 @@ public class TransitionTests extends WindowTestsBase { } private ActivityRecord initializeOverrideAnimationOptionsTest() { return initializeOverrideAnimationOptionsTest(true /* fillParentTaskFragment */); } private ActivityRecord initializeOverrideAnimationOptionsTest(boolean fillParentTaskFragment) { mTransition = createTestTransition(TRANSIT_OPEN); // Test set AnimationOptions for Activity and Task. Loading @@ -2360,8 +2393,13 @@ public class TransitionTests extends WindowTestsBase { .toWindowContainerToken(), mDisplayContent.getAnimationLeash())); mInfo.addChange(new TransitionInfo.Change(task.mRemoteToken.toWindowContainerToken(), task.getAnimationLeash())); mInfo.addChange(new TransitionInfo.Change(embeddedTf.mRemoteToken.toWindowContainerToken(), embeddedTf.getAnimationLeash())); final TransitionInfo.Change embeddedTfChange = new TransitionInfo.Change(embeddedTf.mRemoteToken.toWindowContainerToken(), embeddedTf.getAnimationLeash()); if (fillParentTaskFragment) { embeddedTfChange.setFlags(FLAG_FILLS_TASK); } mInfo.addChange(embeddedTfChange); mInfo.addChange(new TransitionInfo.Change(null /* container */, nonEmbeddedActivity.getAnimationLeash())); return nonEmbeddedActivity; Loading Loading
services/core/java/com/android/server/wm/Transition.java +17 −4 Original line number Diff line number Diff line Loading @@ -2196,14 +2196,16 @@ class Transition implements BLASTSyncEngine.TransactionReadyListener { final List<TransitionInfo.Change> changes = info.getChanges(); for (int i = changes.size() - 1; i >= 0; --i) { final WindowContainer<?> container = mTargets.get(i).mContainer; final TransitionInfo.Change change = changes.get(i); if (container.asActivityRecord() != null || shouldApplyAnimOptionsToTask(container.asTask())) { changes.get(i).setAnimationOptions(mOverrideOptions); changes.get(i).setBackgroundColor(mOverrideBackgroundColor); || shouldApplyAnimOptionsToTask(container.asTask()) || shouldApplyAnimOptionsToFillParentTf(container.asTaskFragment(), change)) { change.setAnimationOptions(mOverrideOptions); change.setBackgroundColor(mOverrideBackgroundColor); } else if (shouldApplyAnimOptionsToEmbeddedTf(container.asTaskFragment())) { // We only override AnimationOptions because backgroundColor should be from // TaskFragmentAnimationParams. changes.get(i).setAnimationOptions(mOverrideOptions); change.setAnimationOptions(mOverrideOptions); } } updateActivityTargetForCrossProfileAnimation(info); Loading @@ -2219,6 +2221,17 @@ class Transition implements BLASTSyncEngine.TransactionReadyListener { return animType == ANIM_SCENE_TRANSITION || mOverrideOptions.getOverrideTaskTransition(); } private boolean shouldApplyAnimOptionsToFillParentTf( @Nullable TaskFragment taskFragment, @NonNull TransitionInfo.Change change) { if (taskFragment == null || !taskFragment.isEmbedded() || mOverrideOptions == null) { return false; } // Apply AnimationOptions to TaskFragment if it fills parent and the animation is a scene // transition. return change.hasFlags(FLAG_FILLS_TASK) && mOverrideOptions.getType() == ANIM_SCENE_TRANSITION; } private boolean shouldApplyAnimOptionsToEmbeddedTf(@Nullable TaskFragment taskFragment) { if (taskFragment == null || !taskFragment.isEmbedded()) { return false; Loading
services/tests/wmtests/src/com/android/server/wm/TransitionTests.java +43 −5 Original line number Diff line number Diff line Loading @@ -2164,8 +2164,9 @@ public class TransitionTests extends WindowTestsBase { } @Test public void testOverrideAnimationOptionsToInfoIfNecessary_sceneAnimOptions() { ActivityRecord r = initializeOverrideAnimationOptionsTest(); public void testOverrideAnimationOptionsToInfoIfNecessary_sceneAnimOptions_fillParentTF() { ActivityRecord r = initializeOverrideAnimationOptionsTest( true /* fillParentTaskFragment */); TransitionInfo.AnimationOptions options = TransitionInfo.AnimationOptions .makeSceneTransitionAnimOptions(); mTransition.setOverrideAnimation(options, r, null /* startCallback */, Loading @@ -2182,7 +2183,35 @@ public class TransitionTests extends WindowTestsBase { displayChange.getAnimationOptions()); assertEquals("Task change's AnimationOptions must be overridden.", options, taskChange.getAnimationOptions()); assertNull("Embedded TF change's AnimationOptions must not be overridden.", assertEquals( "Fill-parent embedded TF change's AnimationOptions must be overridden.", options, embeddedTfChange.getAnimationOptions()); assertEquals("Activity change's AnimationOptions must be overridden.", options, activityChange.getAnimationOptions()); } @Test public void testOverrideAnimationOptionsToInfoIfNecessary_sceneAnimOptions_nonFillParentTF() { ActivityRecord r = initializeOverrideAnimationOptionsTest( false /* fillParentTaskFragment */); TransitionInfo.AnimationOptions options = TransitionInfo.AnimationOptions .makeSceneTransitionAnimOptions(); mTransition.setOverrideAnimation(options, r, 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( "Non-fill-parent embedded TF change's AnimationOptions must not be overridden.", embeddedTfChange.getAnimationOptions()); assertEquals("Activity change's AnimationOptions must be overridden.", options, activityChange.getAnimationOptions()); Loading Loading @@ -2337,6 +2366,10 @@ public class TransitionTests extends WindowTestsBase { } private ActivityRecord initializeOverrideAnimationOptionsTest() { return initializeOverrideAnimationOptionsTest(true /* fillParentTaskFragment */); } private ActivityRecord initializeOverrideAnimationOptionsTest(boolean fillParentTaskFragment) { mTransition = createTestTransition(TRANSIT_OPEN); // Test set AnimationOptions for Activity and Task. Loading @@ -2360,8 +2393,13 @@ public class TransitionTests extends WindowTestsBase { .toWindowContainerToken(), mDisplayContent.getAnimationLeash())); mInfo.addChange(new TransitionInfo.Change(task.mRemoteToken.toWindowContainerToken(), task.getAnimationLeash())); mInfo.addChange(new TransitionInfo.Change(embeddedTf.mRemoteToken.toWindowContainerToken(), embeddedTf.getAnimationLeash())); final TransitionInfo.Change embeddedTfChange = new TransitionInfo.Change(embeddedTf.mRemoteToken.toWindowContainerToken(), embeddedTf.getAnimationLeash()); if (fillParentTaskFragment) { embeddedTfChange.setFlags(FLAG_FILLS_TASK); } mInfo.addChange(embeddedTfChange); mInfo.addChange(new TransitionInfo.Change(null /* container */, nonEmbeddedActivity.getAnimationLeash())); return nonEmbeddedActivity; Loading