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

Commit 2537d032 authored by Vali Calinescu's avatar Vali Calinescu
Browse files

Fix split colour in Letterbox Landscape mode

Fix: 241545218
Test: atest WmTests:SizeCompatTests#testLetterboxDetailsForStatusBar_letterboxNotOverlappingStatusBar
Change-Id: I08cfe3626f30dc47d03e714fdb839d9e2386568a
parent 31720197
Loading
Loading
Loading
Loading
+11 −10
Original line number Diff line number Diff line
@@ -1725,16 +1725,6 @@ public class DisplayPolicy {
                            win.mAttrs.insetsFlags.appearance & APPEARANCE_LIGHT_STATUS_BARS,
                            new Rect(win.getFrame())));
                    mStatusBarColorCheckedBounds.union(sTmpRect);
                    // Check if current activity is letterboxed in order create a LetterboxDetails
                    // component to be passed to SysUI for status bar treatment
                    final ActivityRecord currentActivity = win.getActivityRecord();
                    if (currentActivity != null) {
                        final LetterboxDetails currentLetterboxDetails = currentActivity
                                .mLetterboxUiController.getLetterboxDetails();
                        if (currentLetterboxDetails != null) {
                            mLetterboxDetails.add(currentLetterboxDetails);
                        }
                    }
                }
            }

@@ -1752,6 +1742,17 @@ public class DisplayPolicy {
                    mNavBarBackgroundWindow = win;
                }
            }

            // Check if current activity is letterboxed in order create a LetterboxDetails
            // component to be passed to SysUI for status bar treatment
            final ActivityRecord currentActivity = win.getActivityRecord();
            if (currentActivity != null) {
                final LetterboxDetails currentLetterboxDetails = currentActivity
                        .mLetterboxUiController.getLetterboxDetails();
                if (currentLetterboxDetails != null) {
                    mLetterboxDetails.add(currentLetterboxDetails);
                }
            }
        } else if (win.isDimming()) {
            if (mStatusBar != null) {
                addStatusBarAppearanceRegionsForDimmingWindow(
+36 −2
Original line number Diff line number Diff line
@@ -102,7 +102,6 @@ import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.TestRule;
import org.junit.runner.RunWith;
import org.mockito.Mockito;

/**
 * Tests for Size Compatibility mode.
@@ -2164,6 +2163,40 @@ public class SizeCompatTests extends WindowTestsBase {
                any(InsetsVisibilities.class), isNull(), eq(expectedLetterboxDetails));
    }

    @Test
    public void testLetterboxDetailsForStatusBar_letterboxNotOverlappingStatusBar() {
        final DisplayContent display = new TestDisplayContent.Builder(mAtm, 1000, 2800)
                .setNotch(100)
                .build();
        setUpApp(display);
        TestWindowState statusBar = addStatusBar(mActivity.mDisplayContent);
        spyOn(statusBar);
        doReturn(new Rect(0, 0, statusBar.mRequestedWidth, statusBar.mRequestedHeight))
                .when(statusBar).getFrame();
        addWindowToActivity(mActivity); // Add a window to the activity so that we can get an
        // appearance inside letterboxDetails
        // Prepare unresizable activity with max aspect ratio
        prepareUnresizable(mActivity, /* maxAspect */ 1.1f, SCREEN_ORIENTATION_UNSPECIFIED);
        // Refresh the letterbox
        mActivity.mRootWindowContainer.performSurfacePlacement();

        Rect mBounds = new Rect(mActivity.getWindowConfiguration().getBounds());
        assertEquals(mBounds, new Rect(0, 750, 1000, 1950));

        DisplayPolicy displayPolicy = mActivity.getDisplayContent().getDisplayPolicy();
        LetterboxDetails[] expectedLetterboxDetails = {new LetterboxDetails(
                mBounds,
                mActivity.getDisplayContent().getBounds(),
                mActivity.findMainWindow().mAttrs.insetsFlags.appearance
        )};

        // Check that letterboxDetails actually gets passed to SysUI
        StatusBarManagerInternal statusBarManager = displayPolicy.getStatusBarManagerInternal();
        verify(statusBarManager).onSystemBarAttributesChanged(anyInt(), anyInt(),
                any(), anyBoolean(), anyInt(),
                any(InsetsVisibilities.class), isNull(), eq(expectedLetterboxDetails));
    }

    @Test
    public void testSplitScreenLetterboxDetailsForStatusBar_twoLetterboxedApps() {
        mAtm.mDevEnableNonResizableMultiWindow = true;
@@ -2785,7 +2818,7 @@ public class SizeCompatTests extends WindowTestsBase {
        return w;
    }

    private static void addStatusBar(DisplayContent displayContent) {
    private static TestWindowState addStatusBar(DisplayContent displayContent) {
        final DisplayPolicy displayPolicy = displayContent.getDisplayPolicy();
        doReturn(true).when(displayPolicy).hasStatusBar();
        displayPolicy.onConfigurationChanged();
@@ -2806,6 +2839,7 @@ public class SizeCompatTests extends WindowTestsBase {

        displayPolicy.addWindowLw(statusBar, attrs);
        displayPolicy.layoutWindowLw(statusBar, null, displayContent.mDisplayFrames);
        return statusBar;
    }

    /**