From 06f9bb38b382e2a9597b0db99a7ef97a976f3b5f Mon Sep 17 00:00:00 2001 From: Riddle Hsu Date: Tue, 11 Apr 2023 18:38:25 +0800 Subject: [PATCH] Centralize assignment of pip enter animation type In PipTransition, the places to check enter animation type may have different orders with different scenarios. Assume swiping a fullscreen landscape app which can enter PiP to portrait home: Api request on foreground: augmentRequest -> startEnterAnimation -> handleRotateDisplay Api request on going to background: startEnterAnimation -> handleRotateDisplay Swipe to home: Auto-pip: augmentRequest -> handleRotateDisplay -> startEnterAnimation No auto-pip: handleRotateDisplay -> startEnterAnimation To reduce the complexity of animation type management, assign the type at entry of entering pip: PipTaskOrganizer#onTaskAppeared Then PipTransition only needs to read it. Note that for swiping auto-pip, the type is always ignored because the animation is done by recents animation. Bug: 276438425 Test: Swipe a landscape app into pip in portrait without auto-pip. The PiP should fade in after the swipe animation. Change-Id: I98e459fb9913d713cd3b8d44dbb691af61862c56 --- .../src/com/android/wm/shell/pip/PipTaskOrganizer.java | 7 ++++--- .../src/com/android/wm/shell/pip/PipTransition.java | 10 +++++----- .../android/wm/shell/pip/PipTransitionController.java | 4 ++++ 3 files changed, 13 insertions(+), 8 deletions(-) diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipTaskOrganizer.java b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipTaskOrganizer.java index 5670fe6eaebaf..a8e5795e1e711 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipTaskOrganizer.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipTaskOrganizer.java @@ -712,15 +712,16 @@ public class PipTaskOrganizer implements ShellTaskOrganizer.TaskListener, return; } + final int animationType = shouldAlwaysFadeIn() + ? ANIM_TYPE_ALPHA + : mPipAnimationController.takeOneShotEnterAnimationType(); if (Transitions.ENABLE_SHELL_TRANSITIONS) { + mPipTransitionController.setEnterAnimationType(animationType); // For Shell transition, we will animate the window in PipTransition#startAnimation // instead of #onTaskAppeared. return; } - final int animationType = shouldAlwaysFadeIn() - ? ANIM_TYPE_ALPHA - : mPipAnimationController.takeOneShotEnterAnimationType(); if (mWaitForFixedRotation) { onTaskAppearedWithFixedRotation(animationType); return; diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipTransition.java b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipTransition.java index 91bb1abbd8c67..7fc661fa7afe1 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipTransition.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipTransition.java @@ -274,9 +274,6 @@ public class PipTransition extends PipTransitionController { if (!requestHasPipEnter(request)) { throw new IllegalStateException("Called PiP augmentRequest when request has no PiP"); } - mEnterAnimationType = mPipOrganizer.shouldAlwaysFadeIn() - ? ANIM_TYPE_ALPHA - : mPipAnimationController.takeOneShotEnterAnimationType(); if (mEnterAnimationType == ANIM_TYPE_ALPHA) { mRequestedEnterTransition = transition; mRequestedEnterTask = request.getTriggerTask().token; @@ -665,6 +662,11 @@ public class PipTransition extends PipTransitionController { return false; } + @Override + public void setEnterAnimationType(@PipAnimationController.AnimationType int type) { + mEnterAnimationType = type; + } + private void startEnterAnimation(@NonNull TransitionInfo info, @NonNull SurfaceControl.Transaction startTransaction, @NonNull SurfaceControl.Transaction finishTransaction, @@ -786,8 +788,6 @@ public class PipTransition extends PipTransitionController { final int enterAnimationType = mEnterAnimationType; if (enterAnimationType == ANIM_TYPE_ALPHA) { - // Restore to default type. - mEnterAnimationType = ANIM_TYPE_BOUNDS; startTransaction.setAlpha(leash, 0f); } startTransaction.apply(); diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipTransitionController.java b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipTransitionController.java index 7979ce7a80c18..ff7ab8ba1d97f 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipTransitionController.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipTransitionController.java @@ -225,6 +225,10 @@ public abstract class PipTransitionController implements Transitions.TransitionH throw new IllegalStateException("Request isn't entering PiP"); } + /** Sets the type of animation when a PiP task appears. */ + public void setEnterAnimationType(@PipAnimationController.AnimationType int type) { + } + /** Play a transition animation for entering PiP on a specific PiP change. */ public void startEnterAnimation(@NonNull final TransitionInfo.Change pipChange, @NonNull final SurfaceControl.Transaction startTransaction,