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

Commit a4a0ea88 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Automerger Merge Worker
Browse files

Merge "Adding unit tests for preferred display mode" into tm-dev am: b1023455

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/17005552

Change-Id: I4f1397cba6cc30a3c9f2078529685c732a89354d
parents 241e1bd3 b1023455
Loading
Loading
Loading
Loading
+62 −0
Original line number Diff line number Diff line
@@ -754,6 +754,57 @@ public class LocalDisplayAdapterTest {
        verify(mMockedBacklight, never()).setBrightness(anyFloat());
    }

    @Test
    public void testGetSystemPreferredDisplayMode() throws Exception {
        SurfaceControl.DisplayMode displayMode1 = createFakeDisplayMode(0, 1920, 1080, 60f);
        // preferred mode
        SurfaceControl.DisplayMode displayMode2 = createFakeDisplayMode(1, 3840, 2160, 60f);

        SurfaceControl.DisplayMode[] modes =
                new SurfaceControl.DisplayMode[]{displayMode1, displayMode2};
        FakeDisplay display = new FakeDisplay(PORT_A, modes, 0, 1);
        setUpDisplay(display);
        updateAvailableDisplays();
        mAdapter.registerLocked();
        waitForHandlerToComplete(mHandler, HANDLER_WAIT_MS);

        assertThat(mListener.addedDisplays.size()).isEqualTo(1);
        assertThat(mListener.changedDisplays).isEmpty();

        DisplayDeviceInfo displayDeviceInfo = mListener.addedDisplays.get(
                0).getDisplayDeviceInfoLocked();

        assertThat(displayDeviceInfo.supportedModes.length).isEqualTo(modes.length);

        Display.Mode defaultMode = getModeById(displayDeviceInfo, displayDeviceInfo.defaultModeId);
        assertThat(matches(defaultMode, displayMode2)).isTrue();

        // Change the display and add new preferred mode
        SurfaceControl.DisplayMode addedDisplayInfo = createFakeDisplayMode(2, 2340, 1080, 60f);
        modes = new SurfaceControl.DisplayMode[]{displayMode1, displayMode2, addedDisplayInfo};
        display.dynamicInfo.supportedDisplayModes = modes;
        display.dynamicInfo.preferredBootDisplayMode = 2;
        setUpDisplay(display);
        mInjector.getTransmitter().sendHotplug(display, /* connected */ true);
        waitForHandlerToComplete(mHandler, HANDLER_WAIT_MS);

        assertTrue(mListener.traversalRequested);
        assertThat(mListener.addedDisplays.size()).isEqualTo(1);
        assertThat(mListener.changedDisplays.size()).isEqualTo(1);

        DisplayDevice displayDevice = mListener.changedDisplays.get(0);
        displayDevice.applyPendingDisplayDeviceInfoChangesLocked();
        displayDeviceInfo = displayDevice.getDisplayDeviceInfoLocked();

        assertThat(displayDeviceInfo.supportedModes.length).isEqualTo(modes.length);
        assertModeIsSupported(displayDeviceInfo.supportedModes, displayMode1);
        assertModeIsSupported(displayDeviceInfo.supportedModes, displayMode2);
        assertModeIsSupported(displayDeviceInfo.supportedModes, addedDisplayInfo);

        assertThat(matches(displayDevice.getSystemPreferredDisplayModeLocked(), addedDisplayInfo))
                .isTrue();
    }

    private void assertDisplayDpi(DisplayDeviceInfo info, int expectedPort,
                                  float expectedXdpi,
                                  float expectedYDpi,
@@ -831,6 +882,16 @@ public class LocalDisplayAdapterTest {
            dynamicInfo.supportedDisplayModes = modes;
            dynamicInfo.activeDisplayModeId = activeMode;
        }

        private FakeDisplay(int port, SurfaceControl.DisplayMode[] modes, int activeMode,
                int preferredMode) {
            address = createDisplayAddress(port);
            info = createFakeDisplayInfo();
            dynamicInfo.supportedDisplayModes = modes;
            dynamicInfo.activeDisplayModeId = activeMode;
            dynamicInfo.preferredBootDisplayMode = preferredMode;
        }

    }

    private void setUpDisplay(FakeDisplay display) {
@@ -843,6 +904,7 @@ public class LocalDisplayAdapterTest {
                .thenReturn(display.dynamicInfo);
        when(mSurfaceControlProxy.getDesiredDisplayModeSpecs(display.token))
                .thenReturn(display.desiredDisplayModeSpecs);
        when(mSurfaceControlProxy.getBootDisplayModeSupport()).thenReturn(true);
    }

    private void updateAvailableDisplays() {