Merge "Skip finishResize for non-exit animation if PIP is about to exit" into sc-dev

This commit is contained in:
Jorge Gil
2021-05-19 22:19:41 +00:00
committed by Android (Google) Code Review
2 changed files with 17 additions and 2 deletions

View File

@@ -89,6 +89,11 @@ public class PipAnimationController {
|| direction == TRANSITION_DIRECTION_LEAVE_PIP_TO_SPLIT_SCREEN; || direction == TRANSITION_DIRECTION_LEAVE_PIP_TO_SPLIT_SCREEN;
} }
/** Whether the given direction represents removing PIP. */
public static boolean isRemovePipDirection(@TransitionDirection int direction) {
return direction == TRANSITION_DIRECTION_REMOVE_STACK;
}
private final PipSurfaceTransactionHelper mSurfaceTransactionHelper; private final PipSurfaceTransactionHelper mSurfaceTransactionHelper;
private final ThreadLocal<AnimationHandler> mSfAnimationHandlerThreadLocal = private final ThreadLocal<AnimationHandler> mSfAnimationHandlerThreadLocal =

View File

@@ -39,6 +39,7 @@ import static com.android.wm.shell.pip.PipAnimationController.TRANSITION_DIRECTI
import static com.android.wm.shell.pip.PipAnimationController.TRANSITION_DIRECTION_USER_RESIZE; import static com.android.wm.shell.pip.PipAnimationController.TRANSITION_DIRECTION_USER_RESIZE;
import static com.android.wm.shell.pip.PipAnimationController.isInPipDirection; import static com.android.wm.shell.pip.PipAnimationController.isInPipDirection;
import static com.android.wm.shell.pip.PipAnimationController.isOutPipDirection; import static com.android.wm.shell.pip.PipAnimationController.isOutPipDirection;
import static com.android.wm.shell.pip.PipAnimationController.isRemovePipDirection;
import android.animation.Animator; import android.animation.Animator;
import android.animation.AnimatorListenerAdapter; import android.animation.AnimatorListenerAdapter;
@@ -186,8 +187,17 @@ public class PipTaskOrganizer implements ShellTaskOrganizer.TaskListener,
mDeferredAnimEndTransaction = tx; mDeferredAnimEndTransaction = tx;
return; return;
} }
finishResize(tx, destinationBounds, direction, animationType); final boolean isExitPipDirection = isOutPipDirection(direction)
sendOnPipTransitionFinished(direction); || isRemovePipDirection(direction);
if (mState != State.EXITING_PIP || isExitPipDirection) {
// Finish resize as long as we're not exiting PIP, or, if we are, only if this is
// the end of an exit PIP animation.
// This is necessary in case there was a resize animation ongoing when exit PIP
// started, in which case the first resize will be skipped to let the exit
// operation handle the final resize out of PIP mode. See b/185306679.
finishResize(tx, destinationBounds, direction, animationType);
sendOnPipTransitionFinished(direction);
}
if (direction == TRANSITION_DIRECTION_TO_PIP) { if (direction == TRANSITION_DIRECTION_TO_PIP) {
// TODO (b//169221267): Add jank listener for transactions without buffer updates. // TODO (b//169221267): Add jank listener for transactions without buffer updates.
//InteractionJankMonitor.getInstance().end( //InteractionJankMonitor.getInstance().end(