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

Commit 9ebfbcae authored by Winson Chung's avatar Winson Chung
Browse files

Only run tv tests on tv devices

Bug: 263449064
Change-Id: I84dfac37b1b669a0390f2f8336f48fe49001925c
Test: atest WMShellUnitTests
parent 802c0902
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