Make sure PiP appears on screen when folding the device
Folding triggers onDisplayChanged callback that will update the display layout used to compute PiP position. However, due to race condition of the setShelfHeight handler, sometimes the new bounds for PiP are set by using the bounds in animator from previous display layout. That value is used as a reference when we call onMovementBoundsChanged in PipTaskOrganizer, and thus results sometimes in displacing PiP outside of the visible screen bounds when folding. Test: manually, via temporary log statement in the "if" body to verify the trigger condition Test: before http://recall/-/fj1xzZpuaq8SChahfwQ86e/dXk0Qq0aeOSbqoiMSoazIm Test: after http://recall/-/fj1xzZpuaq8SChahfwQ86e/eHOB8F62DUS9d284FpWk7R Bug: 263211281 Change-Id: Ibfa68f94bc81797d55c33c0aafcc937e04079a53
This commit is contained in:
@@ -209,7 +209,7 @@ public class PipAnimationController {
|
||||
/**
|
||||
* Quietly cancel the animator by removing the listeners first.
|
||||
*/
|
||||
static void quietCancel(@NonNull ValueAnimator animator) {
|
||||
public static void quietCancel(@NonNull ValueAnimator animator) {
|
||||
animator.removeAllUpdateListeners();
|
||||
animator.removeAllListeners();
|
||||
animator.cancel();
|
||||
|
||||
@@ -715,6 +715,12 @@ public class PipController implements PipTransitionController.PipTransitionCallb
|
||||
|
||||
private void onDisplayChanged(DisplayLayout layout, boolean saveRestoreSnapFraction) {
|
||||
if (!mPipBoundsState.getDisplayLayout().isSameGeometry(layout)) {
|
||||
PipAnimationController.PipTransitionAnimator animator =
|
||||
mPipAnimationController.getCurrentAnimator();
|
||||
if (animator != null && animator.isRunning()) {
|
||||
// cancel any running animator, as it is using stale display layout information
|
||||
PipAnimationController.quietCancel(animator);
|
||||
}
|
||||
onDisplayChangedUncheck(layout, saveRestoreSnapFraction);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user