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

Commit 3dfcf64c authored by Winson Chung's avatar Winson Chung Committed by Android (Google) Code Review
Browse files

Merge "Only run tv tests on tv devices"

parents 00157371 9ebfbcae
Loading
Loading
Loading
Loading
+13 −0
Original line number Diff line number Diff line
@@ -17,8 +17,10 @@
package com.android.wm.shell;

import static android.view.Display.DEFAULT_DISPLAY;
import static org.junit.Assume.assumeTrue;

import android.content.Context;
import android.content.pm.PackageManager;
import android.hardware.display.DisplayManager;
import android.testing.TestableContext;

@@ -36,6 +38,7 @@ import org.mockito.MockitoAnnotations;
public abstract class ShellTestCase {

    protected TestableContext mContext;
    private PackageManager mPm;

    @Before
    public void shellSetup() {
@@ -46,6 +49,7 @@ public abstract class ShellTestCase {
        final Context context =
                InstrumentationRegistry.getInstrumentation().getTargetContext();
        final DisplayManager dm = context.getSystemService(DisplayManager.class);
        mPm = context.getPackageManager();
        mContext = new TestableContext(
                context.createDisplayContext(dm.getDisplay(DEFAULT_DISPLAY)));

@@ -66,4 +70,13 @@ public abstract class ShellTestCase {
    protected Context getContext() {
        return mContext;
    }

    /**
     * Makes an assumption that the test device is a TV device, used to guard tests that should
     * only be run on TVs.
     */
    protected void assumeTelevision() {
        assumeTrue(mPm.hasSystemFeature(PackageManager.FEATURE_LEANBACK)
                || mPm.hasSystemFeature(PackageManager.FEATURE_LEANBACK_ONLY));
    }
}
+16 −0
Original line number Diff line number Diff line
@@ -102,6 +102,7 @@ public class TvPipActionProviderTest extends ShellTestCase {

    @Test
    public void defaultSystemActions_regularPip() {
        assumeTelevision();
        mActionsProvider.updateExpansionEnabled(false);
        assertTrue(checkActionsMatch(mActionsProvider.getActionsList(),
                new int[]{ACTION_FULLSCREEN, ACTION_CLOSE, ACTION_MOVE}));
@@ -109,6 +110,7 @@ public class TvPipActionProviderTest extends ShellTestCase {

    @Test
    public void defaultSystemActions_expandedPip() {
        assumeTelevision();
        mActionsProvider.updateExpansionEnabled(true);
        assertTrue(checkActionsMatch(mActionsProvider.getActionsList(),
                new int[]{ACTION_FULLSCREEN, ACTION_CLOSE, ACTION_MOVE, ACTION_EXPAND_COLLAPSE}));
@@ -116,6 +118,7 @@ public class TvPipActionProviderTest extends ShellTestCase {

    @Test
    public void expandedPip_enableExpansion_enable() {
        assumeTelevision();
        // PiP has expanded PiP disabled.
        mActionsProvider.updateExpansionEnabled(false);

@@ -129,6 +132,7 @@ public class TvPipActionProviderTest extends ShellTestCase {

    @Test
    public void expandedPip_enableExpansion_disable() {
        assumeTelevision();
        mActionsProvider.updateExpansionEnabled(true);

        mActionsProvider.addListener(mMockListener);
@@ -141,6 +145,7 @@ public class TvPipActionProviderTest extends ShellTestCase {

    @Test
    public void expandedPip_enableExpansion_AlreadyEnabled() {
        assumeTelevision();
        mActionsProvider.updateExpansionEnabled(true);

        mActionsProvider.addListener(mMockListener);
@@ -152,6 +157,7 @@ public class TvPipActionProviderTest extends ShellTestCase {

    @Test
    public void expandedPip_toggleExpansion() {
        assumeTelevision();
        // PiP has expanded PiP enabled, but is in a collapsed state
        mActionsProvider.updateExpansionEnabled(true);
        mActionsProvider.onPipExpansionToggled(/* expanded= */ false);
@@ -166,6 +172,7 @@ public class TvPipActionProviderTest extends ShellTestCase {

    @Test
    public void customActions_added() {
        assumeTelevision();
        mActionsProvider.updateExpansionEnabled(false);
        mActionsProvider.addListener(mMockListener);

@@ -179,6 +186,7 @@ public class TvPipActionProviderTest extends ShellTestCase {

    @Test
    public void customActions_replacedMore() {
        assumeTelevision();
        mActionsProvider.updateExpansionEnabled(false);
        mActionsProvider.setAppActions(createRemoteActions(2), null);

@@ -193,6 +201,7 @@ public class TvPipActionProviderTest extends ShellTestCase {

    @Test
    public void customActions_replacedLess() {
        assumeTelevision();
        mActionsProvider.updateExpansionEnabled(false);
        mActionsProvider.setAppActions(createRemoteActions(2), null);

@@ -206,6 +215,7 @@ public class TvPipActionProviderTest extends ShellTestCase {

    @Test
    public void customCloseAdded() {
        assumeTelevision();
        mActionsProvider.updateExpansionEnabled(false);

        List<RemoteAction> customActions = new ArrayList<>();
@@ -221,6 +231,7 @@ public class TvPipActionProviderTest extends ShellTestCase {

    @Test
    public void customClose_matchesOtherCustomAction() {
        assumeTelevision();
        mActionsProvider.updateExpansionEnabled(false);

        List<RemoteAction> customActions = createRemoteActions(2);
@@ -239,6 +250,7 @@ public class TvPipActionProviderTest extends ShellTestCase {

    @Test
    public void mediaActions_added_whileCustomActionsExist() {
        assumeTelevision();
        mActionsProvider.updateExpansionEnabled(false);
        mActionsProvider.setAppActions(createRemoteActions(2), null);

@@ -253,6 +265,7 @@ public class TvPipActionProviderTest extends ShellTestCase {

    @Test
    public void customActions_removed_whileMediaActionsExist() {
        assumeTelevision();
        mActionsProvider.updateExpansionEnabled(false);
        mActionsProvider.onMediaActionsChanged(createRemoteActions(2));
        mActionsProvider.setAppActions(createRemoteActions(3), null);
@@ -268,6 +281,7 @@ public class TvPipActionProviderTest extends ShellTestCase {

    @Test
    public void customCloseOnly_mediaActionsShowing() {
        assumeTelevision();
        mActionsProvider.updateExpansionEnabled(false);
        mActionsProvider.onMediaActionsChanged(createRemoteActions(2));

@@ -282,6 +296,7 @@ public class TvPipActionProviderTest extends ShellTestCase {

    @Test
    public void customActions_showDisabledActions() {
        assumeTelevision();
        mActionsProvider.updateExpansionEnabled(false);

        List<RemoteAction> customActions = createRemoteActions(2);
@@ -295,6 +310,7 @@ public class TvPipActionProviderTest extends ShellTestCase {

    @Test
    public void mediaActions_hideDisabledActions() {
        assumeTelevision();
        mActionsProvider.updateExpansionEnabled(false);

        List<RemoteAction> customActions = createRemoteActions(2);
+17 −4
Original line number Diff line number Diff line
@@ -24,6 +24,7 @@ import android.os.test.TestLooper
import android.testing.AndroidTestingRunner

import com.android.wm.shell.R
import com.android.wm.shell.ShellTestCase
import com.android.wm.shell.pip.PipBoundsState.STASH_TYPE_RIGHT
import com.android.wm.shell.pip.tv.TvPipBoundsController.POSITION_DEBOUNCE_TIMEOUT_MILLIS
import com.android.wm.shell.pip.tv.TvPipKeepClearAlgorithm.Placement
@@ -43,7 +44,7 @@ import org.mockito.Mockito.verify
import org.mockito.MockitoAnnotations

@RunWith(AndroidTestingRunner::class)
class TvPipBoundsControllerTest {
class TvPipBoundsControllerTest : ShellTestCase() {
    val ANIMATION_DURATION = 100
    val STASH_DURATION = 5000
    val FAR_FUTURE = 60 * 60000L
@@ -71,7 +72,7 @@ class TvPipBoundsControllerTest {
    var inMoveMode = false

    @Mock
    lateinit var context: Context
    lateinit var mockContext: Context
    @Mock
    lateinit var resources: Resources
    @Mock
@@ -91,13 +92,13 @@ class TvPipBoundsControllerTest {
        testLooper = TestLooper { time }
        mainHandler = Handler(testLooper.getLooper())

        whenever(context.resources).thenReturn(resources)
        whenever(mockContext.resources).thenReturn(resources)
        whenever(resources.getInteger(R.integer.config_pipStashDuration)).thenReturn(STASH_DURATION)
        whenever(tvPipBoundsAlgorithm.adjustBoundsForTemporaryDecor(any()))
                .then(returnsFirstArg<Rect>())

        boundsController = TvPipBoundsController(
                context,
                mockContext,
                { time },
                mainHandler,
                tvPipBoundsState,
@@ -107,6 +108,7 @@ class TvPipBoundsControllerTest {

    @Test
    fun testPlacement_MovedAfterDebounceTimeout() {
        assumeTelevision()
        triggerPlacement(MOVED_PLACEMENT)
        assertMovementAt(POSITION_DEBOUNCE_TIMEOUT_MILLIS, MOVED_BOUNDS)
        assertNoMovementUpTo(time + FAR_FUTURE)
@@ -114,6 +116,7 @@ class TvPipBoundsControllerTest {

    @Test
    fun testStashedPlacement_MovedAfterDebounceTimeout_Unstashes() {
        assumeTelevision()
        triggerPlacement(STASHED_PLACEMENT_RESTASH)
        assertMovementAt(POSITION_DEBOUNCE_TIMEOUT_MILLIS, STASHED_BOUNDS)
        assertMovementAt(POSITION_DEBOUNCE_TIMEOUT_MILLIS + STASH_DURATION, ANCHOR_BOUNDS)
@@ -121,6 +124,7 @@ class TvPipBoundsControllerTest {

    @Test
    fun testDebounceSamePlacement_MovesDebounceTimeoutAfterFirstPlacement() {
        assumeTelevision()
        triggerPlacement(MOVED_PLACEMENT)
        advanceTimeTo(POSITION_DEBOUNCE_TIMEOUT_MILLIS / 2)
        triggerPlacement(MOVED_PLACEMENT)
@@ -130,6 +134,7 @@ class TvPipBoundsControllerTest {

    @Test
    fun testNoMovementUntilPlacementStabilizes() {
        assumeTelevision()
        triggerPlacement(ANCHOR_PLACEMENT)
        advanceTimeTo(time + POSITION_DEBOUNCE_TIMEOUT_MILLIS / 10)
        triggerPlacement(MOVED_PLACEMENT)
@@ -143,6 +148,7 @@ class TvPipBoundsControllerTest {

    @Test
    fun testUnstashIfStashNoLongerNecessary() {
        assumeTelevision()
        triggerPlacement(STASHED_PLACEMENT_RESTASH)
        assertMovementAt(POSITION_DEBOUNCE_TIMEOUT_MILLIS, STASHED_BOUNDS)

@@ -152,6 +158,7 @@ class TvPipBoundsControllerTest {

    @Test
    fun testRestashingPlacementDelaysUnstash() {
        assumeTelevision()
        triggerPlacement(STASHED_PLACEMENT_RESTASH)
        assertMovementAt(POSITION_DEBOUNCE_TIMEOUT_MILLIS, STASHED_BOUNDS)

@@ -163,6 +170,7 @@ class TvPipBoundsControllerTest {

    @Test
    fun testNonRestashingPlacementDoesNotDelayUnstash() {
        assumeTelevision()
        triggerPlacement(STASHED_PLACEMENT_RESTASH)
        assertMovementAt(POSITION_DEBOUNCE_TIMEOUT_MILLIS, STASHED_BOUNDS)

@@ -173,6 +181,7 @@ class TvPipBoundsControllerTest {

    @Test
    fun testImmediatePlacement() {
        assumeTelevision()
        triggerImmediatePlacement(STASHED_PLACEMENT_RESTASH)
        assertMovement(STASHED_BOUNDS)
        assertMovementAt(time + STASH_DURATION, ANCHOR_BOUNDS)
@@ -180,6 +189,7 @@ class TvPipBoundsControllerTest {

    @Test
    fun testImmediatePlacement_DoNotStashIfAlreadyUnstashed() {
        assumeTelevision()
        triggerImmediatePlacement(STASHED_PLACEMENT_RESTASH)
        assertMovement(STASHED_BOUNDS)
        assertMovementAt(time + STASH_DURATION, ANCHOR_BOUNDS)
@@ -190,6 +200,7 @@ class TvPipBoundsControllerTest {

    @Test
    fun testInMoveMode_KeepAtAnchor() {
        assumeTelevision()
        startMoveMode()
        triggerImmediatePlacement(STASHED_MOVED_PLACEMENT_RESTASH)
        assertMovement(ANCHOR_BOUNDS)
@@ -198,6 +209,7 @@ class TvPipBoundsControllerTest {

    @Test
    fun testInMenu_Unstashed() {
        assumeTelevision()
        openPipMenu()
        triggerImmediatePlacement(STASHED_MOVED_PLACEMENT_RESTASH)
        assertMovement(MOVED_BOUNDS)
@@ -206,6 +218,7 @@ class TvPipBoundsControllerTest {

    @Test
    fun testCloseMenu_DoNotRestash() {
        assumeTelevision()
        openPipMenu()
        triggerImmediatePlacement(STASHED_MOVED_PLACEMENT_RESTASH)
        assertMovement(MOVED_BOUNDS)
+14 −0
Original line number Diff line number Diff line
@@ -90,17 +90,20 @@ public class TvPipGravityTest extends ShellTestCase {

    @Test
    public void regularPip_defaultGravity() {
        assumeTelevision();
        checkGravity(mTvPipBoundsState.getDefaultGravity(), Gravity.RIGHT | Gravity.BOTTOM);
    }

    @Test
    public void regularPip_defaultGravity_RTL() {
        assumeTelevision();
        setRTL(true);
        checkGravity(mTvPipBoundsState.getDefaultGravity(), Gravity.LEFT | Gravity.BOTTOM);
    }

    @Test
    public void updateGravity_expand_vertical() {
        assumeTelevision();
        // Vertical expanded PiP.
        mTvPipBoundsState.setDesiredTvExpandedAspectRatio(VERTICAL_EXPANDED_ASPECT_RATIO, true);

@@ -116,6 +119,7 @@ public class TvPipGravityTest extends ShellTestCase {

    @Test
    public void updateGravity_expand_horizontal() {
        assumeTelevision();
        // Horizontal expanded PiP.
        mTvPipBoundsState.setDesiredTvExpandedAspectRatio(HORIZONTAL_EXPANDED_ASPECT_RATIO, true);

@@ -131,6 +135,7 @@ public class TvPipGravityTest extends ShellTestCase {

    @Test
    public void updateGravity_collapse() {
        assumeTelevision();
        // Vertical expansion
        mTvPipBoundsState.setDesiredTvExpandedAspectRatio(VERTICAL_EXPANDED_ASPECT_RATIO, true);
        assertGravityAfterCollapse(Gravity.CENTER_VERTICAL | Gravity.RIGHT,
@@ -148,6 +153,7 @@ public class TvPipGravityTest extends ShellTestCase {

    @Test
    public void updateGravity_collapse_RTL() {
        assumeTelevision();
        setRTL(true);

        // Horizontal expansion
@@ -160,6 +166,7 @@ public class TvPipGravityTest extends ShellTestCase {

    @Test
    public void updateGravity_expand_collapse() {
        assumeTelevision();
        // Vertical expanded PiP.
        mTvPipBoundsState.setDesiredTvExpandedAspectRatio(VERTICAL_EXPANDED_ASPECT_RATIO, true);

@@ -179,6 +186,7 @@ public class TvPipGravityTest extends ShellTestCase {

    @Test
    public void updateGravity_expand_move_collapse() {
        assumeTelevision();
        // Vertical expanded PiP.
        mTvPipBoundsState.setDesiredTvExpandedAspectRatio(VERTICAL_EXPANDED_ASPECT_RATIO, true);
        expandMoveCollapseCheck(Gravity.TOP | Gravity.RIGHT, KEYCODE_DPAD_LEFT,
@@ -211,6 +219,7 @@ public class TvPipGravityTest extends ShellTestCase {

    @Test
    public void updateGravity_move_regular_valid() {
        assumeTelevision();
        mTvPipBoundsState.setTvPipGravity(Gravity.BOTTOM | Gravity.RIGHT);
        // clockwise
        moveAndCheckGravity(KEYCODE_DPAD_LEFT, Gravity.BOTTOM | Gravity.LEFT, true);
@@ -226,6 +235,7 @@ public class TvPipGravityTest extends ShellTestCase {

    @Test
    public void updateGravity_move_expanded_valid() {
        assumeTelevision();
        mTvPipBoundsState.setTvPipExpanded(true);

        // Vertical expanded PiP.
@@ -243,6 +253,7 @@ public class TvPipGravityTest extends ShellTestCase {

    @Test
    public void updateGravity_move_regular_invalid() {
        assumeTelevision();
        int gravity = Gravity.BOTTOM | Gravity.RIGHT;
        mTvPipBoundsState.setTvPipGravity(gravity);
        moveAndCheckGravity(KEYCODE_DPAD_DOWN, gravity, false);
@@ -266,6 +277,7 @@ public class TvPipGravityTest extends ShellTestCase {

    @Test
    public void updateGravity_move_expanded_invalid() {
        assumeTelevision();
        mTvPipBoundsState.setTvPipExpanded(true);

        // Vertical expanded PiP.
@@ -295,6 +307,7 @@ public class TvPipGravityTest extends ShellTestCase {

    @Test
    public void previousCollapsedGravity_defaultValue() {
        assumeTelevision();
        assertEquals(mTvPipBoundsState.getTvPipPreviousCollapsedGravity(),
                mTvPipBoundsState.getDefaultGravity());
        setRTL(true);
@@ -304,6 +317,7 @@ public class TvPipGravityTest extends ShellTestCase {

    @Test
    public void previousCollapsedGravity_changes_on_RTL() {
        assumeTelevision();
        mTvPipBoundsState.setTvPipPreviousCollapsedGravity(Gravity.TOP | Gravity.LEFT);
        setRTL(true);
        assertEquals(mTvPipBoundsState.getTvPipPreviousCollapsedGravity(),
+34 −1
Original line number Diff line number Diff line
@@ -21,6 +21,7 @@ import android.graphics.Rect
import android.testing.AndroidTestingRunner
import android.util.Size
import android.view.Gravity
import com.android.wm.shell.ShellTestCase
import com.android.wm.shell.pip.PipBoundsState.STASH_TYPE_BOTTOM
import com.android.wm.shell.pip.PipBoundsState.STASH_TYPE_NONE
import com.android.wm.shell.pip.PipBoundsState.STASH_TYPE_RIGHT
@@ -35,7 +36,7 @@ import org.junit.Test
import org.junit.runner.RunWith

@RunWith(AndroidTestingRunner::class)
class TvPipKeepClearAlgorithmTest {
class TvPipKeepClearAlgorithmTest : ShellTestCase() {
    private val DEFAULT_PIP_SIZE = Size(384, 216)
    private val EXPANDED_WIDE_PIP_SIZE = Size(384 * 2, 216)
    private val EXPANDED_TALL_PIP_SIZE = Size(384, 216 * 4)
@@ -74,72 +75,84 @@ class TvPipKeepClearAlgorithmTest {

    @Test
    fun testAnchorPosition_BottomRight() {
        assumeTelevision()
        gravity = Gravity.BOTTOM or Gravity.RIGHT
        testAnchorPosition()
    }

    @Test
    fun testAnchorPosition_TopRight() {
        assumeTelevision()
        gravity = Gravity.TOP or Gravity.RIGHT
        testAnchorPosition()
    }

    @Test
    fun testAnchorPosition_TopLeft() {
        assumeTelevision()
        gravity = Gravity.TOP or Gravity.LEFT
        testAnchorPosition()
    }

    @Test
    fun testAnchorPosition_BottomLeft() {
        assumeTelevision()
        gravity = Gravity.BOTTOM or Gravity.LEFT
        testAnchorPosition()
    }

    @Test
    fun testAnchorPosition_Right() {
        assumeTelevision()
        gravity = Gravity.RIGHT
        testAnchorPosition()
    }

    @Test
    fun testAnchorPosition_Left() {
        assumeTelevision()
        gravity = Gravity.LEFT
        testAnchorPosition()
    }

    @Test
    fun testAnchorPosition_Top() {
        assumeTelevision()
        gravity = Gravity.TOP
        testAnchorPosition()
    }

    @Test
    fun testAnchorPosition_Bottom() {
        assumeTelevision()
        gravity = Gravity.BOTTOM
        testAnchorPosition()
    }

    @Test
    fun testAnchorPosition_TopCenterHorizontal() {
        assumeTelevision()
        gravity = Gravity.TOP or Gravity.CENTER_HORIZONTAL
        testAnchorPosition()
    }

    @Test
    fun testAnchorPosition_BottomCenterHorizontal() {
        assumeTelevision()
        gravity = Gravity.BOTTOM or Gravity.CENTER_HORIZONTAL
        testAnchorPosition()
    }

    @Test
    fun testAnchorPosition_RightCenterVertical() {
        assumeTelevision()
        gravity = Gravity.RIGHT or Gravity.CENTER_VERTICAL
        testAnchorPosition()
    }

    @Test
    fun testAnchorPosition_LeftCenterVertical() {
        assumeTelevision()
        gravity = Gravity.LEFT or Gravity.CENTER_VERTICAL
        testAnchorPosition()
    }
@@ -153,6 +166,7 @@ class TvPipKeepClearAlgorithmTest {

    @Test
    fun test_AnchorBottomRight_KeepClearNotObstructing_StayAtAnchor() {
        assumeTelevision()
        gravity = Gravity.BOTTOM or Gravity.RIGHT

        val sidebar = makeSideBar(DASHBOARD_WIDTH, Gravity.LEFT)
@@ -167,6 +181,7 @@ class TvPipKeepClearAlgorithmTest {

    @Test
    fun test_AnchorBottomRight_UnrestrictedRightSidebar_PushedLeft() {
        assumeTelevision()
        gravity = Gravity.BOTTOM or Gravity.RIGHT

        val sidebar = makeSideBar(DASHBOARD_WIDTH, Gravity.RIGHT)
@@ -181,6 +196,7 @@ class TvPipKeepClearAlgorithmTest {

    @Test
    fun test_AnchorTopRight_UnrestrictedRightSidebar_PushedLeft() {
        assumeTelevision()
        gravity = Gravity.TOP or Gravity.RIGHT

        val sidebar = makeSideBar(DASHBOARD_WIDTH, Gravity.RIGHT)
@@ -195,6 +211,7 @@ class TvPipKeepClearAlgorithmTest {

    @Test
    fun test_AnchorBottomLeft_UnrestrictedRightSidebar_StayAtAnchor() {
        assumeTelevision()
        gravity = Gravity.BOTTOM or Gravity.LEFT

        val sidebar = makeSideBar(DASHBOARD_WIDTH, Gravity.RIGHT)
@@ -209,6 +226,7 @@ class TvPipKeepClearAlgorithmTest {

    @Test
    fun test_AnchorBottom_UnrestrictedRightSidebar_StayAtAnchor() {
        assumeTelevision()
        gravity = Gravity.BOTTOM

        val sidebar = makeSideBar(DASHBOARD_WIDTH, Gravity.RIGHT)
@@ -223,6 +241,7 @@ class TvPipKeepClearAlgorithmTest {

    @Test
    fun testExpanded_AnchorBottom_UnrestrictedRightSidebar_StayAtAnchor() {
        assumeTelevision()
        pipSize = EXPANDED_WIDE_PIP_SIZE
        gravity = Gravity.BOTTOM

@@ -238,6 +257,7 @@ class TvPipKeepClearAlgorithmTest {

    @Test
    fun test_AnchorBottomRight_RestrictedSmallBottomBar_PushedUp() {
        assumeTelevision()
        gravity = Gravity.BOTTOM or Gravity.RIGHT

        val bottomBar = makeBottomBar(96)
@@ -253,6 +273,7 @@ class TvPipKeepClearAlgorithmTest {

    @Test
    fun test_AnchorBottomRight_RestrictedBottomSheet_StashDownAtAnchor() {
        assumeTelevision()
        gravity = Gravity.BOTTOM or Gravity.RIGHT

        val bottomBar = makeBottomBar(BOTTOM_SHEET_HEIGHT)
@@ -270,6 +291,7 @@ class TvPipKeepClearAlgorithmTest {

    @Test
    fun test_AnchorBottomRight_UnrestrictedBottomSheet_PushUp() {
        assumeTelevision()
        gravity = Gravity.BOTTOM or Gravity.RIGHT

        val bottomBar = makeBottomBar(BOTTOM_SHEET_HEIGHT)
@@ -285,6 +307,7 @@ class TvPipKeepClearAlgorithmTest {

    @Test
    fun test_AnchorBottomRight_UnrestrictedBottomSheet_RestrictedSidebar_StashAboveBottomSheet() {
        assumeTelevision()
        gravity = Gravity.BOTTOM or Gravity.RIGHT

        val bottomBar = makeBottomBar(BOTTOM_SHEET_HEIGHT)
@@ -310,6 +333,7 @@ class TvPipKeepClearAlgorithmTest {

    @Test
    fun test_AnchorBottomRight_UnrestrictedBottomSheet_UnrestrictedSidebar_PushUpLeft() {
        assumeTelevision()
        gravity = Gravity.BOTTOM or Gravity.RIGHT

        val bottomBar = makeBottomBar(BOTTOM_SHEET_HEIGHT)
@@ -332,6 +356,7 @@ class TvPipKeepClearAlgorithmTest {

    @Test
    fun test_Stashed_UnstashBoundsBecomeUnobstructed_Unstashes() {
        assumeTelevision()
        gravity = Gravity.BOTTOM or Gravity.RIGHT

        val bottomBar = makeBottomBar(BOTTOM_SHEET_HEIGHT)
@@ -362,6 +387,7 @@ class TvPipKeepClearAlgorithmTest {

    @Test
    fun test_Stashed_UnstashBoundsStaysObstructed_DoesNotTriggerStash() {
        assumeTelevision()
        gravity = Gravity.BOTTOM or Gravity.RIGHT

        val bottomBar = makeBottomBar(BOTTOM_SHEET_HEIGHT)
@@ -393,6 +419,7 @@ class TvPipKeepClearAlgorithmTest {

    @Test
    fun test_Stashed_UnstashBoundsObstructionChanges_UnstashTimeExtended() {
        assumeTelevision()
        gravity = Gravity.BOTTOM or Gravity.RIGHT

        val bottomBar = makeBottomBar(BOTTOM_SHEET_HEIGHT)
@@ -432,6 +459,7 @@ class TvPipKeepClearAlgorithmTest {

    @Test
    fun test_ExpandedPiPHeightExceedsMovementBounds_AtAnchor() {
        assumeTelevision()
        gravity = Gravity.RIGHT or Gravity.CENTER_VERTICAL
        pipSize = Size(DEFAULT_PIP_SIZE.width, SCREEN_SIZE.height)
        testAnchorPosition()
@@ -439,6 +467,7 @@ class TvPipKeepClearAlgorithmTest {

    @Test
    fun test_ExpandedPiPHeightExceedsMovementBounds_BottomBar_StashedUp() {
        assumeTelevision()
        gravity = Gravity.RIGHT or Gravity.CENTER_VERTICAL
        pipSize = Size(DEFAULT_PIP_SIZE.width, SCREEN_SIZE.height)
        val bottomBar = makeBottomBar(96)
@@ -454,6 +483,7 @@ class TvPipKeepClearAlgorithmTest {

    @Test
    fun test_PipInsets() {
        assumeTelevision()
        val insets = Insets.of(-1, -2, -3, -4)
        algorithm.setPipPermanentDecorInsets(insets)

@@ -488,6 +518,7 @@ class TvPipKeepClearAlgorithmTest {

    @Test
    fun test_AnchorRightExpandedPiP_UnrestrictedRightSidebar_PushedLeft() {
        assumeTelevision()
        pipSize = EXPANDED_TALL_PIP_SIZE
        gravity = Gravity.RIGHT

@@ -503,6 +534,8 @@ class TvPipKeepClearAlgorithmTest {

    @Test
    fun test_AnchorRightExpandedPiP_RestrictedRightSidebar_StashedRight() {
        assumeTelevision()
        assumeTelevision()
        pipSize = EXPANDED_TALL_PIP_SIZE
        gravity = Gravity.RIGHT