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

Commit fa097e1f authored by Ben Lin's avatar Ben Lin
Browse files

Fix PiP rotation when Shell Transition is on.

Also fixed the associated flicker tests.

Bug: 193565745
Bug: 165793917
Test: atest
Change-Id: I5156aa0236e704d46badd28b8093174a04f329ea
Merged-In: Iebd847ab0d7dc394fc64bb54cdc5262db7b9f1b0
parent c57c02c7
Loading
Loading
Loading
Loading
+11 −2
Original line number Diff line number Diff line
@@ -27,6 +27,7 @@ import static com.android.wm.shell.pip.PipAnimationController.TRANSITION_DIRECTI
import static com.android.wm.shell.pip.PipAnimationController.TRANSITION_DIRECTION_LEAVE_PIP;
import static com.android.wm.shell.pip.PipAnimationController.TRANSITION_DIRECTION_LEAVE_PIP_TO_SPLIT_SCREEN;
import static com.android.wm.shell.pip.PipAnimationController.TRANSITION_DIRECTION_REMOVE_STACK;
import static com.android.wm.shell.pip.PipAnimationController.TRANSITION_DIRECTION_SAME;
import static com.android.wm.shell.pip.PipAnimationController.TRANSITION_DIRECTION_SNAP_AFTER_RESIZE;
import static com.android.wm.shell.pip.PipAnimationController.TRANSITION_DIRECTION_TO_PIP;
import static com.android.wm.shell.pip.PipAnimationController.TRANSITION_DIRECTION_USER_RESIZE;
@@ -84,6 +85,7 @@ import com.android.wm.shell.pip.PipSnapAlgorithm;
import com.android.wm.shell.pip.PipTaskOrganizer;
import com.android.wm.shell.pip.PipTransitionController;
import com.android.wm.shell.pip.PipUtils;
import com.android.wm.shell.transition.Transitions;

import java.io.PrintWriter;
import java.util.Objects;
@@ -455,11 +457,18 @@ public class PipController implements PipTransitionController.PipTransitionCallb
            return;
        }
        Runnable updateDisplayLayout = () -> {
            final boolean fromRotation = Transitions.ENABLE_SHELL_TRANSITIONS
                    && mPipBoundsState.getDisplayLayout().rotation() != layout.rotation();
            mPipBoundsState.setDisplayLayout(layout);
            final WindowContainerTransaction wct =
                    fromRotation ? new WindowContainerTransaction() : null;
            updateMovementBounds(null /* toBounds */,
                    false /* fromRotation */, false /* fromImeAdjustment */,
                    fromRotation, false /* fromImeAdjustment */,
                    false /* fromShelfAdjustment */,
                    null /* windowContainerTransaction */);
                    wct /* windowContainerTransaction */);
            if (wct != null) {
                mPipTaskOrganizer.applyFinishBoundsResize(wct, TRANSITION_DIRECTION_SAME);
            }
        };

        if (mPipTaskOrganizer.isInPip() && saveRestoreSnapFraction) {
+10 −2
Original line number Diff line number Diff line
@@ -32,6 +32,8 @@ import com.android.server.wm.flicker.helpers.setRotation
import com.android.server.wm.flicker.navBarLayerRotatesAndScales
import com.android.server.wm.flicker.startRotation
import com.android.server.wm.flicker.statusBarLayerRotatesScales
import com.android.server.wm.traces.common.Region
import com.android.server.wm.traces.parser.minus
import com.android.wm.shell.flicker.helpers.FixedAppHelper
import org.junit.FixMethodOrder
import org.junit.Test
@@ -94,7 +96,10 @@ class PipRotationTest(testSpec: FlickerTestParameter) : PipTransition(testSpec)
    @Test
    fun appLayerRotates_StartingBounds() {
        testSpec.assertLayersStart {
            visibleRegion(fixedApp.component).coversExactly(startingBounds)
            val pipRegion = visibleRegion(pipApp.component).region
            val expectedWithoutPip = Region(startingBounds.bounds.left, startingBounds.bounds.top,
                    startingBounds.bounds.right, startingBounds.bounds.bottom).minus(pipRegion)
            visibleRegion(fixedApp.component).coversExactly(expectedWithoutPip)
            visibleRegion(pipApp.component).coversAtMost(startingBounds)
        }
    }
@@ -103,7 +108,10 @@ class PipRotationTest(testSpec: FlickerTestParameter) : PipTransition(testSpec)
    @Test
    fun appLayerRotates_EndingBounds() {
        testSpec.assertLayersEnd {
            visibleRegion(fixedApp.component).coversExactly(endingBounds)
            val pipRegion = visibleRegion(pipApp.component).region
            val expectedWithoutPip = Region(endingBounds.bounds.left, endingBounds.bounds.top,
                    endingBounds.bounds.right, endingBounds.bounds.bottom).minus(pipRegion)
            visibleRegion(fixedApp.component).coversExactly(expectedWithoutPip)
            visibleRegion(pipApp.component).coversAtMost(endingBounds)
        }
    }