Merge "PiP: Fix more Shell Transition potential issues." into sc-v2-dev
This commit is contained in:
@@ -1292,13 +1292,17 @@ public class PipTaskOrganizer implements ShellTaskOrganizer.TaskListener,
|
|||||||
}
|
}
|
||||||
Rect baseBounds = direction == TRANSITION_DIRECTION_SNAP_AFTER_RESIZE
|
Rect baseBounds = direction == TRANSITION_DIRECTION_SNAP_AFTER_RESIZE
|
||||||
? mPipBoundsState.getBounds() : currentBounds;
|
? mPipBoundsState.getBounds() : currentBounds;
|
||||||
|
final boolean existingAnimatorRunning = mPipAnimationController.getCurrentAnimator() != null
|
||||||
|
&& mPipAnimationController.getCurrentAnimator().isRunning();
|
||||||
final PipAnimationController.PipTransitionAnimator<?> animator = mPipAnimationController
|
final PipAnimationController.PipTransitionAnimator<?> animator = mPipAnimationController
|
||||||
.getAnimator(mTaskInfo, mLeash, baseBounds, currentBounds, destinationBounds,
|
.getAnimator(mTaskInfo, mLeash, baseBounds, currentBounds, destinationBounds,
|
||||||
sourceHintRect, direction, startingAngle, rotationDelta);
|
sourceHintRect, direction, startingAngle, rotationDelta);
|
||||||
animator.setTransitionDirection(direction)
|
animator.setTransitionDirection(direction)
|
||||||
.setPipAnimationCallback(mPipAnimationCallback)
|
|
||||||
.setPipTransactionHandler(mPipTransactionHandler)
|
.setPipTransactionHandler(mPipTransactionHandler)
|
||||||
.setDuration(durationMs);
|
.setDuration(durationMs);
|
||||||
|
if (!existingAnimatorRunning) {
|
||||||
|
animator.setPipAnimationCallback(mPipAnimationCallback);
|
||||||
|
}
|
||||||
if (isInPipDirection(direction)) {
|
if (isInPipDirection(direction)) {
|
||||||
// Similar to auto-enter-pip transition, we use content overlay when there is no
|
// Similar to auto-enter-pip transition, we use content overlay when there is no
|
||||||
// source rect hint to enter PiP use bounds animation.
|
// source rect hint to enter PiP use bounds animation.
|
||||||
|
|||||||
@@ -116,6 +116,12 @@ public class PipTransition extends PipTransitionController {
|
|||||||
if (mExitTransition == transition || info.getType() == TRANSIT_EXIT_PIP) {
|
if (mExitTransition == transition || info.getType() == TRANSIT_EXIT_PIP) {
|
||||||
mExitTransition = null;
|
mExitTransition = null;
|
||||||
if (info.getChanges().size() == 1) {
|
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);
|
final TransitionInfo.Change change = info.getChanges().get(0);
|
||||||
mFinishCallback = finishCallback;
|
mFinishCallback = finishCallback;
|
||||||
startTransaction.apply();
|
startTransaction.apply();
|
||||||
@@ -129,6 +135,12 @@ public class PipTransition extends PipTransitionController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (info.getType() == TRANSIT_REMOVE_PIP) {
|
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();
|
startTransaction.apply();
|
||||||
finishTransaction.setWindowCrop(info.getChanges().get(0).getLeash(),
|
finishTransaction.setWindowCrop(info.getChanges().get(0).getLeash(),
|
||||||
mPipBoundsState.getDisplayBounds());
|
mPipBoundsState.getDisplayBounds());
|
||||||
@@ -159,6 +171,12 @@ public class PipTransition extends PipTransitionController {
|
|||||||
return false;
|
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.
|
// Show the wallpaper if there is a wallpaper change.
|
||||||
if (wallpaper != null) {
|
if (wallpaper != null) {
|
||||||
startTransaction.show(wallpaper.getLeash());
|
startTransaction.show(wallpaper.getLeash());
|
||||||
@@ -231,7 +249,7 @@ public class PipTransition extends PipTransitionController {
|
|||||||
if (tx != null) {
|
if (tx != null) {
|
||||||
wct.setBoundsChangeTransaction(taskInfo.token, tx);
|
wct.setBoundsChangeTransaction(taskInfo.token, tx);
|
||||||
}
|
}
|
||||||
mFinishCallback.onTransitionFinished(wct, null /* wctCallback */);
|
mFinishCallback.onTransitionFinished(wct, null /* callback */);
|
||||||
mFinishCallback = null;
|
mFinishCallback = null;
|
||||||
}
|
}
|
||||||
finishResizeForMenu(destinationBounds);
|
finishResizeForMenu(destinationBounds);
|
||||||
@@ -240,7 +258,7 @@ public class PipTransition extends PipTransitionController {
|
|||||||
@Override
|
@Override
|
||||||
public void forceFinishTransition() {
|
public void forceFinishTransition() {
|
||||||
if (mFinishCallback == null) return;
|
if (mFinishCallback == null) return;
|
||||||
mFinishCallback.onTransitionFinished(null /* wct */, null /* wctCallback */);
|
mFinishCallback.onTransitionFinished(null /* wct */, null /* callback */);
|
||||||
mFinishCallback = null;
|
mFinishCallback = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -286,7 +304,6 @@ public class PipTransition extends PipTransitionController {
|
|||||||
mPipBoundsState.setBounds(destinationBounds);
|
mPipBoundsState.setBounds(destinationBounds);
|
||||||
onFinishResize(taskInfo, destinationBounds, TRANSITION_DIRECTION_TO_PIP, null /* tx */);
|
onFinishResize(taskInfo, destinationBounds, TRANSITION_DIRECTION_TO_PIP, null /* tx */);
|
||||||
sendOnPipTransitionFinished(TRANSITION_DIRECTION_TO_PIP);
|
sendOnPipTransitionFinished(TRANSITION_DIRECTION_TO_PIP);
|
||||||
mFinishCallback = null;
|
|
||||||
mPipTransitionState.setInSwipePipToHomeTransition(false);
|
mPipTransitionState.setInSwipePipToHomeTransition(false);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user