diff options
Diffstat (limited to 'libs')
3 files changed, 27 insertions, 6 deletions
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/common/split/SplitLayout.java b/libs/WindowManager/Shell/src/com/android/wm/shell/common/split/SplitLayout.java index 5b3ce2dbaeb9..b1b0382b401c 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/common/split/SplitLayout.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/common/split/SplitLayout.java @@ -565,11 +565,11 @@ public final class SplitLayout implements DisplayInsetsController.OnInsetsChange mDismissingDimValue = 0; int totalDismissingDistance = 0; - if (position <= mDividerSnapAlgorithm.getFirstSplitTarget().position) { + if (position < mDividerSnapAlgorithm.getFirstSplitTarget().position) { mDismissingSide = isLandscape ? DOCKED_LEFT : DOCKED_TOP; totalDismissingDistance = mDividerSnapAlgorithm.getDismissStartTarget().position - mDividerSnapAlgorithm.getFirstSplitTarget().position; - } else if (position >= mDividerSnapAlgorithm.getLastSplitTarget().position) { + } else if (position > mDividerSnapAlgorithm.getLastSplitTarget().position) { mDismissingSide = isLandscape ? DOCKED_RIGHT : DOCKED_BOTTOM; totalDismissingDistance = mDividerSnapAlgorithm.getLastSplitTarget().position - mDividerSnapAlgorithm.getDismissEndTarget().position; 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 291cbb3676dc..b6e5804a64dd 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 @@ -1292,13 +1292,17 @@ public class PipTaskOrganizer implements ShellTaskOrganizer.TaskListener, } Rect baseBounds = direction == TRANSITION_DIRECTION_SNAP_AFTER_RESIZE ? mPipBoundsState.getBounds() : currentBounds; + final boolean existingAnimatorRunning = mPipAnimationController.getCurrentAnimator() != null + && mPipAnimationController.getCurrentAnimator().isRunning(); final PipAnimationController.PipTransitionAnimator<?> animator = mPipAnimationController .getAnimator(mTaskInfo, mLeash, baseBounds, currentBounds, destinationBounds, sourceHintRect, direction, startingAngle, rotationDelta); animator.setTransitionDirection(direction) - .setPipAnimationCallback(mPipAnimationCallback) .setPipTransactionHandler(mPipTransactionHandler) .setDuration(durationMs); + if (!existingAnimatorRunning) { + animator.setPipAnimationCallback(mPipAnimationCallback); + } if (isInPipDirection(direction)) { // Similar to auto-enter-pip transition, we use content overlay when there is no // source rect hint to enter PiP use bounds animation. 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 328f3ed73f2e..b31e6e0750ce 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 @@ -116,6 +116,12 @@ public class PipTransition extends PipTransitionController { if (mExitTransition == transition || info.getType() == TRANSIT_EXIT_PIP) { mExitTransition = null; if (info.getChanges().size() == 1) { + if (mFinishCallback != null) { + mFinishCallback.onTransitionFinished(null, null); + mFinishCallback = null; + throw new RuntimeException("Previous callback not called, aborting exit PIP."); + } + final TransitionInfo.Change change = info.getChanges().get(0); mFinishCallback = finishCallback; startTransaction.apply(); @@ -129,6 +135,12 @@ public class PipTransition extends PipTransitionController { } if (info.getType() == TRANSIT_REMOVE_PIP) { + if (mFinishCallback != null) { + mFinishCallback.onTransitionFinished(null /* wct */, null /* callback */); + mFinishCallback = null; + throw new RuntimeException("Previous callback not called, aborting remove PIP."); + } + startTransaction.apply(); finishTransaction.setWindowCrop(info.getChanges().get(0).getLeash(), mPipBoundsState.getDisplayBounds()); @@ -159,6 +171,12 @@ public class PipTransition extends PipTransitionController { return false; } + if (mFinishCallback != null) { + mFinishCallback.onTransitionFinished(null /* wct */, null /* callback */); + mFinishCallback = null; + throw new RuntimeException("Previous callback not called, aborting entering PIP."); + } + // Show the wallpaper if there is a wallpaper change. if (wallpaper != null) { startTransaction.show(wallpaper.getLeash()); @@ -231,7 +249,7 @@ public class PipTransition extends PipTransitionController { if (tx != null) { wct.setBoundsChangeTransaction(taskInfo.token, tx); } - mFinishCallback.onTransitionFinished(wct, null /* wctCallback */); + mFinishCallback.onTransitionFinished(wct, null /* callback */); mFinishCallback = null; } finishResizeForMenu(destinationBounds); @@ -240,7 +258,7 @@ public class PipTransition extends PipTransitionController { @Override public void forceFinishTransition() { if (mFinishCallback == null) return; - mFinishCallback.onTransitionFinished(null /* wct */, null /* wctCallback */); + mFinishCallback.onTransitionFinished(null /* wct */, null /* callback */); mFinishCallback = null; } @@ -286,7 +304,6 @@ public class PipTransition extends PipTransitionController { mPipBoundsState.setBounds(destinationBounds); onFinishResize(taskInfo, destinationBounds, TRANSITION_DIRECTION_TO_PIP, null /* tx */); sendOnPipTransitionFinished(TRANSITION_DIRECTION_TO_PIP); - mFinishCallback = null; mPipTransitionState.setInSwipePipToHomeTransition(false); return true; } |