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

Commit 4742f4ae authored by Ang Li's avatar Ang Li Committed by Android (Google) Code Review
Browse files

Merge "Add tests for hiding split-screen divider during launch" into main

parents e6b8feca 31db594d
Loading
Loading
Loading
Loading
+68 −0
Original line number Diff line number Diff line
@@ -24,6 +24,7 @@ import static android.view.Display.DEFAULT_DISPLAY;
import static android.window.WindowContainerTransaction.HierarchyOp.HIERARCHY_OP_TYPE_DISALLOW_OVERRIDE_BOUNDS_FOR_CHILDREN;

import static com.android.wm.shell.Flags.FLAG_ENABLE_ENTER_SPLIT_REMOVE_BUBBLE;
import static com.android.wm.shell.Flags.FLAG_ENABLE_FLEXIBLE_TWO_APP_SPLIT;
import static com.android.wm.shell.Flags.FLAG_SPLIT_DISABLE_CHILD_TASK_BOUNDS;
import static com.android.wm.shell.shared.split.SplitScreenConstants.SNAP_TO_2_50_50;
import static com.android.wm.shell.shared.split.SplitScreenConstants.SPLIT_INDEX_UNDEFINED;
@@ -805,6 +806,73 @@ public class StageCoordinatorTests extends ShellTestCase {
                anyInt());
    }

    @Test
    @EnableFlags(FLAG_ENABLE_FLEXIBLE_TWO_APP_SPLIT)
    public void startTasks_withFlexibleTwoAppSplit_hidesDividerWhenStagesInactive() {
        // Setup: Main stage is inactive, which should trigger the condition.
        when(mMainStage.isActive()).thenReturn(false);
        when(mSideStage.isActive()).thenReturn(true);
        doReturn(true).when(mStageCoordinator).isSplitScreenVisible();

        // Action: Start two tasks.
        mStageCoordinator.startTasks(1 /* taskId1 */, null /* options1 */, 2 /* taskId2 */,
                null /* options2 */, SPLIT_POSITION_TOP_OR_LEFT, SNAP_TO_2_50_50,
                null /* remoteTransition */, null /* instanceId */);

        // Verification: The divider should be hidden because a stage is inactive.
        verify(mStageCoordinator).setDividerVisibility(eq(false), eq(null));
    }

    @Test
    @EnableFlags(FLAG_ENABLE_FLEXIBLE_TWO_APP_SPLIT)
    public void startTasks_withFlexibleTwoAppSplit_hidesDividerWhenNotVisible() {
        // Setup: Both stages are active, but split screen is not visible.
        when(mMainStage.isActive()).thenReturn(true);
        when(mSideStage.isActive()).thenReturn(true);
        doReturn(false).when(mStageCoordinator).isSplitScreenVisible();

        // Action: Start two tasks.
        mStageCoordinator.startTasks(1 /* taskId1 */, null /* options1 */, 2 /* taskId2 */,
                null /* options2 */, SPLIT_POSITION_TOP_OR_LEFT, SNAP_TO_2_50_50,
                null /* remoteTransition */, null /* instanceId */);

        // Verification: The divider should be hidden because split screen is not visible.
        verify(mStageCoordinator).setDividerVisibility(eq(false), eq(null));
    }

    @Test
    @EnableFlags(FLAG_ENABLE_FLEXIBLE_TWO_APP_SPLIT)
    public void startTasks_withFlexibleTwoAppSplit_doesNotHideDividerWhenActiveAndVisible() {
        // Setup: Both stages are active and split screen is visible.
        when(mMainStage.isActive()).thenReturn(true);
        when(mSideStage.isActive()).thenReturn(true);
        doReturn(true).when(mStageCoordinator).isSplitScreenVisible();

        // Action: Start two tasks.
        mStageCoordinator.startTasks(1 /* taskId1 */, null /* options1 */, 2 /* taskId2 */,
                null /* options2 */, SPLIT_POSITION_TOP_OR_LEFT, SNAP_TO_2_50_50,
                null /* remoteTransition */, null /* instanceId */);

        // Verification: The divider should not be hidden.
        verify(mStageCoordinator, never()).setDividerVisibility(eq(false), any());
    }

    @Test
    @DisableFlags(FLAG_ENABLE_FLEXIBLE_TWO_APP_SPLIT)
    public void startTasks_withoutFlexibleTwoAppSplit_doesNotHideDivider() {
        // Setup: Flag is disabled, and conditions for hiding are met.
        when(mMainStage.isActive()).thenReturn(false);
        doReturn(false).when(mStageCoordinator).isSplitScreenVisible();

        // Action: Start two tasks.
        mStageCoordinator.startTasks(1 /* taskId1 */, null /* options1 */, 2 /* taskId2 */,
                null /* options2 */, SPLIT_POSITION_TOP_OR_LEFT, SNAP_TO_2_50_50,
                null /* remoteTransition */, null /* instanceId */);

        // Verification: The divider should not be hidden because the flag is disabled.
        verify(mStageCoordinator, never()).setDividerVisibility(eq(false), any());
    }

    private Transitions createTestTransitions() {
        ShellInit shellInit = new ShellInit(mMainExecutor);
        final Transitions t = new Transitions(mContext, shellInit, mock(ShellController.class),