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);