Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit de507114 authored by Mateusz Cicheński's avatar Mateusz Cicheński
Browse files

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
parent e56827c6
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -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();
+6 −0
Original line number Diff line number Diff line
@@ -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);
        }
    }