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

Commit 7c9cc17e authored by Riddle Hsu's avatar Riddle Hsu
Browse files

Skip intermediate resizing when running swipe-pip transition

PipBoundsState may keep old state before handleSwipePipToHomeTransition
is called. So if before the transition is done, it should avoid
to use the state to update size. The destination size and layout will
be handled by the transition.

Legacy transition didn't have the race because it always handles
the animation in onTaskAppeared directly, it is done before
receiving config change.

Bug: 285086073
Test: Drag resize a video auto-PiP activity to close screen width
      in portrait. Expand it to fullscreen in landscape. Use
      gesture to swipe from bottom. The PiP activity should not
      disappear or show at wrong position a few frames.
Change-Id: I9bd6ebbfffe6725acabcf111ad5cd4d2cc55ea95
(cherry picked from commit cc71768d)
parent bbc98d7a
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
@@ -795,6 +795,14 @@ public class PipController implements PipTransitionController.PipTransitionCallb
    }

    private void onDisplayChangedUncheck(DisplayLayout layout, boolean saveRestoreSnapFraction) {
        if (mPipTransitionState.getInSwipePipToHomeTransition()) {
            // If orientation is changed when performing swipe-pip animation, DisplayLayout has
            // been updated in startSwipePipToHome. So it is unnecessary to update again when
            // receiving onDisplayConfigurationChanged. This also avoids TouchHandler.userResizeTo
            // update surface position in different orientation by the intermediate state. The
            // desired resize will be done by the end of transition.
            return;
        }
        Runnable updateDisplayLayout = () -> {
            final boolean fromRotation = Transitions.ENABLE_SHELL_TRANSITIONS
                    && mPipDisplayLayoutState.getDisplayLayout().rotation() != layout.rotation();