Allow PipTouchHandler to re-enable the touches
This is to fix the regression from ag/21471704 that PipTouchHandler#setTouchEnabled(true) is not called due to PipAnimationController#quietCancel when receives display changed callback, which happens on folding the display. Bug: 272825196 Test: manual, follow the reproduces in b/272825196 Test: manual, make sure no regression following b/263211281 Change-Id: I3f18680856bd3705af8ca374bf1592ae97499071
This commit is contained in:
@@ -210,7 +210,7 @@ public class PipAnimationController {
|
||||
/**
|
||||
* Quietly cancel the animator by removing the listeners first.
|
||||
*/
|
||||
public static void quietCancel(@NonNull ValueAnimator animator) {
|
||||
static void quietCancel(@NonNull ValueAnimator animator) {
|
||||
animator.removeAllUpdateListeners();
|
||||
animator.removeAllListeners();
|
||||
animator.cancel();
|
||||
|
||||
@@ -147,10 +147,12 @@ public class PipTaskOrganizer implements ShellTaskOrganizer.TaskListener,
|
||||
// These callbacks are called on the update thread
|
||||
private final PipAnimationController.PipAnimationCallback mPipAnimationCallback =
|
||||
new PipAnimationController.PipAnimationCallback() {
|
||||
private boolean mIsCancelled;
|
||||
@Override
|
||||
public void onPipAnimationStart(TaskInfo taskInfo,
|
||||
PipAnimationController.PipTransitionAnimator animator) {
|
||||
final int direction = animator.getTransitionDirection();
|
||||
mIsCancelled = false;
|
||||
sendOnPipTransitionStarted(direction);
|
||||
}
|
||||
|
||||
@@ -158,6 +160,10 @@ public class PipTaskOrganizer implements ShellTaskOrganizer.TaskListener,
|
||||
public void onPipAnimationEnd(TaskInfo taskInfo, SurfaceControl.Transaction tx,
|
||||
PipAnimationController.PipTransitionAnimator animator) {
|
||||
final int direction = animator.getTransitionDirection();
|
||||
if (mIsCancelled) {
|
||||
sendOnPipTransitionFinished(direction);
|
||||
return;
|
||||
}
|
||||
final int animationType = animator.getAnimationType();
|
||||
final Rect destinationBounds = animator.getDestinationBounds();
|
||||
if (isInPipDirection(direction) && animator.getContentOverlayLeash() != null) {
|
||||
@@ -196,6 +202,7 @@ public class PipTaskOrganizer implements ShellTaskOrganizer.TaskListener,
|
||||
public void onPipAnimationCancel(TaskInfo taskInfo,
|
||||
PipAnimationController.PipTransitionAnimator animator) {
|
||||
final int direction = animator.getTransitionDirection();
|
||||
mIsCancelled = true;
|
||||
if (isInPipDirection(direction) && animator.getContentOverlayLeash() != null) {
|
||||
fadeOutAndRemoveOverlay(animator.getContentOverlayLeash(),
|
||||
animator::clearContentOverlay, true /* withStartDelay */);
|
||||
|
||||
@@ -779,7 +779,7 @@ public class PipController implements PipTransitionController.PipTransitionCallb
|
||||
mPipAnimationController.getCurrentAnimator();
|
||||
if (animator != null && animator.isRunning()) {
|
||||
// cancel any running animator, as it is using stale display layout information
|
||||
PipAnimationController.quietCancel(animator);
|
||||
animator.cancel();
|
||||
}
|
||||
onDisplayChangedUncheck(layout, saveRestoreSnapFraction);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user