From 39d28a2ef4e513fb80eb6a0035f9f660f6fa4533 Mon Sep 17 00:00:00 2001 From: Evan Rosky Date: Fri, 28 Apr 2023 12:02:43 -0700 Subject: [PATCH] Plumb Scene-transition tag through shell transitions This was being ignored, but we should plumb the information through so that the defaulthandler doesn't apply an animation on top of the scene-transition (which expects a jumpcut). Bug: 190806800 Test: take screenshot, then pres edit button Change-Id: Ib1bda6220012cf3b8f85fccac4cc50e1327b9886 --- core/java/android/window/TransitionInfo.java | 6 ++++++ .../wm/shell/transition/DefaultTransitionHandler.java | 4 ++++ .../java/com/android/server/wm/ActivityRecord.java | 11 ++++++++--- 3 files changed, 18 insertions(+), 3 deletions(-) diff --git a/core/java/android/window/TransitionInfo.java b/core/java/android/window/TransitionInfo.java index 628fc3140ee82..c0370cc5517df 100644 --- a/core/java/android/window/TransitionInfo.java +++ b/core/java/android/window/TransitionInfo.java @@ -21,6 +21,7 @@ import static android.app.ActivityOptions.ANIM_CUSTOM; import static android.app.ActivityOptions.ANIM_FROM_STYLE; import static android.app.ActivityOptions.ANIM_OPEN_CROSS_PROFILE_APPS; import static android.app.ActivityOptions.ANIM_SCALE_UP; +import static android.app.ActivityOptions.ANIM_SCENE_TRANSITION; import static android.app.ActivityOptions.ANIM_THUMBNAIL_SCALE_DOWN; import static android.app.ActivityOptions.ANIM_THUMBNAIL_SCALE_UP; import static android.app.WindowConfiguration.ROTATION_UNDEFINED; @@ -1067,6 +1068,11 @@ public final class TransitionInfo implements Parcelable { return options; } + public static AnimationOptions makeSceneTransitionAnimOptions() { + AnimationOptions options = new AnimationOptions(ANIM_SCENE_TRANSITION); + return options; + } + public int getType() { return mType; } diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/transition/DefaultTransitionHandler.java b/libs/WindowManager/Shell/src/com/android/wm/shell/transition/DefaultTransitionHandler.java index 6e9ecdaf55e7c..1ee52ae006456 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/transition/DefaultTransitionHandler.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/transition/DefaultTransitionHandler.java @@ -21,6 +21,7 @@ import static android.app.ActivityOptions.ANIM_CUSTOM; import static android.app.ActivityOptions.ANIM_NONE; import static android.app.ActivityOptions.ANIM_OPEN_CROSS_PROFILE_APPS; import static android.app.ActivityOptions.ANIM_SCALE_UP; +import static android.app.ActivityOptions.ANIM_SCENE_TRANSITION; import static android.app.ActivityOptions.ANIM_THUMBNAIL_SCALE_DOWN; import static android.app.ActivityOptions.ANIM_THUMBNAIL_SCALE_UP; import static android.app.WindowConfiguration.WINDOWING_MODE_PINNED; @@ -625,6 +626,9 @@ public class DefaultTransitionHandler implements Transitions.TransitionHandler { } else if ((changeFlags & FLAG_STARTING_WINDOW_TRANSFER_RECIPIENT) != 0 && isOpeningType) { // This received a transferred starting window, so don't animate return null; + } else if (overrideType == ANIM_SCENE_TRANSITION) { + // If there's a scene-transition, then jump-cut. + return null; } else { a = loadAttributeAnimation(info, change, wallpaperTransit, mTransitionAnimation); } diff --git a/services/core/java/com/android/server/wm/ActivityRecord.java b/services/core/java/com/android/server/wm/ActivityRecord.java index 78c066bdc212f..ad01aafcf9c37 100644 --- a/services/core/java/com/android/server/wm/ActivityRecord.java +++ b/services/core/java/com/android/server/wm/ActivityRecord.java @@ -4908,9 +4908,14 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A mTransitionController.setStatusBarTransitionDelay( mPendingRemoteAnimation.getStatusBarTransitionDelay()); } else { - if (mPendingOptions == null - || mPendingOptions.getAnimationType() == ANIM_SCENE_TRANSITION) { - // Scene transition will run on the client side. + if (mPendingOptions == null) { + return; + } else if (mPendingOptions.getAnimationType() == ANIM_SCENE_TRANSITION) { + // Scene transition will run on the client side, so just notify transition + // controller but don't clear the animation information from the options since they + // need to be sent to the animating activity. + mTransitionController.setOverrideAnimation( + AnimationOptions.makeSceneTransitionAnimOptions(), null, null); return; } applyOptionsAnimation(mPendingOptions, intent);