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

Commit 5982b805 authored by Jerry Chang's avatar Jerry Chang
Browse files

Fix no touch events on half of the split screen

Make sure the surface bounds of split root tasks will be properly set
after enabled shell-transition. So client apps can inherit the correct
touch region.

Fix: 222163100
Test: atest StageCoordinatorTests
Test: manual check with the repro steps
Change-Id: I5c71e54513ad37d43347f9716081751aad477149
parent 18b848e6
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -781,6 +781,7 @@ class StageCoordinator implements SplitLayout.SplitLayoutHandler,
    void finishEnterSplitScreen(SurfaceControl.Transaction t) {
        mSplitLayout.init();
        setDividerVisibility(true, t);
        updateSurfaceBounds(mSplitLayout, t);
        setSplitsVisible(true);
        mShouldUpdateRecents = true;
        updateRecentTasksSplitPair();
+12 −3
Original line number Diff line number Diff line
@@ -41,6 +41,7 @@ import static org.mockito.Mockito.when;

import android.app.ActivityManager;
import android.graphics.Rect;
import android.view.SurfaceControl;
import android.window.DisplayAreaInfo;
import android.window.WindowContainerTransaction;

@@ -112,7 +113,7 @@ public class StageCoordinatorTests extends ShellTestCase {
    @Before
    public void setup() {
        MockitoAnnotations.initMocks(this);
        mStageCoordinator = spy(createStageCoordinator(/* splitLayout */ null));
        mStageCoordinator = spy(createStageCoordinator(mSplitLayout));
        doNothing().when(mStageCoordinator).updateActivityOptions(any(), anyInt());

        when(mSplitLayout.getBounds1()).thenReturn(mBounds1);
@@ -158,6 +159,9 @@ public class StageCoordinatorTests extends ShellTestCase {

    @Test
    public void testDisplayAreaAppeared_initializesUnfoldControllers() {
        // Create a stage coordinator with null split layout to test layout init flow.
        mStageCoordinator = createStageCoordinator(null /* splitLayout */);

        mStageCoordinator.onDisplayAreaAppeared(mock(DisplayAreaInfo.class));

        verify(mMainUnfoldController).init();
@@ -166,7 +170,6 @@ public class StageCoordinatorTests extends ShellTestCase {

    @Test
    public void testLayoutChanged_topLeftSplitPosition_updatesUnfoldStageBounds() {
        mStageCoordinator = createStageCoordinator(mSplitLayout);
        mStageCoordinator.setSideStagePosition(SPLIT_POSITION_TOP_OR_LEFT, null);
        clearInvocations(mMainUnfoldController, mSideUnfoldController);

@@ -179,7 +182,6 @@ public class StageCoordinatorTests extends ShellTestCase {

    @Test
    public void testLayoutChanged_bottomRightSplitPosition_updatesUnfoldStageBounds() {
        mStageCoordinator = createStageCoordinator(mSplitLayout);
        mStageCoordinator.setSideStagePosition(SPLIT_POSITION_BOTTOM_OR_RIGHT, null);
        clearInvocations(mMainUnfoldController, mSideUnfoldController);

@@ -293,6 +295,13 @@ public class StageCoordinatorTests extends ShellTestCase {
        assertEquals(mStageCoordinator.getMainStagePosition(), SPLIT_POSITION_BOTTOM_OR_RIGHT);
    }

    @Test
    public void testFinishEnterSplitScreen_applySurfaceLayout() {
        mStageCoordinator.finishEnterSplitScreen(new SurfaceControl.Transaction());

        verify(mSplitLayout).applySurfaceChanges(any(), any(), any(), any(), any());
    }

    private StageCoordinator createStageCoordinator(SplitLayout splitLayout) {
        return new SplitTestUtils.TestStageCoordinator(mContext, DEFAULT_DISPLAY,
                mSyncQueue, mRootTDAOrganizer, mTaskOrganizer, mMainStage, mSideStage,