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

Commit 73dee751 authored by Piotr Wilczyński's avatar Piotr Wilczyński
Browse files

Translate the float scale value to a nit value when transferring the short-term model

Note: if the device does not support nits, the short-term model will not be transferred.

Bug: 270715892
Test: Manual with extra logs
Change-Id: I15c0da84c87f73c0eba2748c1da107384867023d
parent 8e9d00cd
Loading
Loading
Loading
Loading
+10 −2
Original line number Diff line number Diff line
@@ -1056,10 +1056,11 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
        }

        float userLux = BrightnessMappingStrategy.NO_USER_LUX;
        float userBrightness = BrightnessMappingStrategy.NO_USER_BRIGHTNESS;
        float userNits = -1;
        if (mInteractiveModeBrightnessMapper != null) {
            userLux = mInteractiveModeBrightnessMapper.getUserLux();
            userBrightness = mInteractiveModeBrightnessMapper.getUserBrightness();
            float userBrightness = mInteractiveModeBrightnessMapper.getUserBrightness();
            userNits = mInteractiveModeBrightnessMapper.convertToNits(userBrightness);
        }

        final boolean isIdleScreenBrightnessEnabled = resources.getBoolean(
@@ -1179,6 +1180,13 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
            if (mAutomaticBrightnessController != null) {
                mAutomaticBrightnessController.stop();
            }
            float userBrightness = BrightnessMappingStrategy.NO_USER_BRIGHTNESS;
            if (userNits >= 0) {
                userBrightness = mInteractiveModeBrightnessMapper.convertToFloatScale(userNits);
                if (userBrightness == PowerManager.BRIGHTNESS_INVALID_FLOAT) {
                    userBrightness = BrightnessMappingStrategy.NO_USER_BRIGHTNESS;
                }
            }
            mAutomaticBrightnessController = mInjector.getAutomaticBrightnessController(
                    this, handler.getLooper(), mSensorManager, mLightSensor,
                    mInteractiveModeBrightnessMapper, lightSensorWarmUpTimeConfig,
+10 −2
Original line number Diff line number Diff line
@@ -893,10 +893,11 @@ final class DisplayPowerController2 implements AutomaticBrightnessController.Cal
        }

        float userLux = BrightnessMappingStrategy.NO_USER_LUX;
        float userBrightness = BrightnessMappingStrategy.NO_USER_BRIGHTNESS;
        float userNits = -1;
        if (mInteractiveModeBrightnessMapper != null) {
            userLux = mInteractiveModeBrightnessMapper.getUserLux();
            userBrightness = mInteractiveModeBrightnessMapper.getUserBrightness();
            float userBrightness = mInteractiveModeBrightnessMapper.getUserBrightness();
            userNits = mInteractiveModeBrightnessMapper.convertToNits(userBrightness);
        }

        final boolean isIdleScreenBrightnessEnabled = resources.getBoolean(
@@ -1016,6 +1017,13 @@ final class DisplayPowerController2 implements AutomaticBrightnessController.Cal
            if (mAutomaticBrightnessController != null) {
                mAutomaticBrightnessController.stop();
            }
            float userBrightness = BrightnessMappingStrategy.NO_USER_BRIGHTNESS;
            if (userNits >= 0) {
                userBrightness = mInteractiveModeBrightnessMapper.convertToFloatScale(userNits);
                if (userBrightness == PowerManager.BRIGHTNESS_INVALID_FLOAT) {
                    userBrightness = BrightnessMappingStrategy.NO_USER_BRIGHTNESS;
                }
            }
            mAutomaticBrightnessController = mInjector.getAutomaticBrightnessController(
                    this, handler.getLooper(), mSensorManager, mLightSensor,
                    mInteractiveModeBrightnessMapper, lightSensorWarmUpTimeConfig,
+65 −4
Original line number Diff line number Diff line
@@ -21,11 +21,14 @@ import static com.android.dx.mockito.inline.extended.ExtendedMockito.verify;

import static org.junit.Assert.assertNotNull;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyBoolean;
import static org.mockito.ArgumentMatchers.anyFloat;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.anyLong;
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.ArgumentMatchers.isA;
import static org.mockito.ArgumentMatchers.isNull;
import static org.mockito.Mockito.atLeastOnce;
import static org.mockito.Mockito.clearInvocations;
import static org.mockito.Mockito.mock;
@@ -672,6 +675,7 @@ public final class DisplayPowerController2Test {

    @Test
    public void testStopScreenOffBrightnessSensorControllerWhenDisplayDeviceChanges() {
        // New display device
        setUpDisplay(DISPLAY_ID, "new_unique_id", mHolder.display, mock(DisplayDevice.class),
                mock(DisplayDeviceConfig.class), /* isEnabled= */ true);

@@ -711,6 +715,56 @@ public final class DisplayPowerController2Test {
        verify(mHolder.animator, times(2)).animateTo(eq(newBrightness), anyFloat(), anyFloat());
    }

    @Test
    public void testShortTermModelPersistsWhenDisplayDeviceChanges() {
        float lux = 2000;
        float brightness = 0.4f;
        float nits = 500;
        when(mHolder.brightnessMappingStrategy.getUserLux()).thenReturn(lux);
        when(mHolder.brightnessMappingStrategy.getUserBrightness()).thenReturn(brightness);
        when(mHolder.brightnessMappingStrategy.convertToNits(brightness)).thenReturn(nits);
        when(mHolder.brightnessMappingStrategy.convertToFloatScale(nits)).thenReturn(brightness);
        DisplayPowerRequest dpr = new DisplayPowerRequest();
        mHolder.dpc.requestPowerState(dpr, /* waitForNegativeProximity= */ false);
        advanceTime(1);
        clearInvocations(mHolder.injector);

        // New display device
        setUpDisplay(DISPLAY_ID, "new_unique_id", mHolder.display, mock(DisplayDevice.class),
                mock(DisplayDeviceConfig.class), /* isEnabled= */ true);
        mHolder.dpc.onDisplayChanged(mHolder.hbmMetadata, Layout.NO_LEAD_DISPLAY);
        advanceTime(1);

        verify(mHolder.injector).getAutomaticBrightnessController(
                any(AutomaticBrightnessController.Callbacks.class),
                any(Looper.class),
                eq(mSensorManagerMock),
                any(),
                eq(mHolder.brightnessMappingStrategy),
                anyInt(),
                anyFloat(),
                anyFloat(),
                anyFloat(),
                anyInt(),
                anyInt(),
                anyLong(),
                anyLong(),
                anyBoolean(),
                any(HysteresisLevels.class),
                any(HysteresisLevels.class),
                any(HysteresisLevels.class),
                any(HysteresisLevels.class),
                eq(mContextSpy),
                any(HighBrightnessModeController.class),
                any(BrightnessThrottler.class),
                isNull(),
                anyInt(),
                anyInt(),
                eq(lux),
                eq(brightness)
        );
    }

    /**
     * Creates a mock and registers it to {@link LocalServices}.
     */
@@ -796,9 +850,9 @@ public final class DisplayPowerController2Test {
        final ScreenOffBrightnessSensorController screenOffBrightnessSensorController =
                mock(ScreenOffBrightnessSensorController.class);

        TestInjector injector = new TestInjector(displayPowerState, animator,
        TestInjector injector = spy(new TestInjector(displayPowerState, animator,
                automaticBrightnessController, wakelockController, brightnessMappingStrategy,
                hysteresisLevels, screenOffBrightnessSensorController);
                hysteresisLevels, screenOffBrightnessSensorController));

        final LogicalDisplay display = mock(LogicalDisplay.class);
        final DisplayDevice device = mock(DisplayDevice.class);
@@ -816,7 +870,8 @@ public final class DisplayPowerController2Test {

        return new DisplayPowerControllerHolder(dpc, display, displayPowerState, brightnessSetting,
                animator, automaticBrightnessController, wakelockController,
                screenOffBrightnessSensorController, hbmMetadata);
                screenOffBrightnessSensorController, hbmMetadata, brightnessMappingStrategy,
                injector);
    }

    /**
@@ -833,6 +888,8 @@ public final class DisplayPowerController2Test {
        public final WakelockController wakelockController;
        public final ScreenOffBrightnessSensorController screenOffBrightnessSensorController;
        public final HighBrightnessModeMetadata hbmMetadata;
        public final BrightnessMappingStrategy brightnessMappingStrategy;
        public final DisplayPowerController2.Injector injector;

        DisplayPowerControllerHolder(DisplayPowerController2 dpc, LogicalDisplay display,
                DisplayPowerState displayPowerState, BrightnessSetting brightnessSetting,
@@ -840,7 +897,9 @@ public final class DisplayPowerController2Test {
                AutomaticBrightnessController automaticBrightnessController,
                WakelockController wakelockController,
                ScreenOffBrightnessSensorController screenOffBrightnessSensorController,
                HighBrightnessModeMetadata hbmMetadata) {
                HighBrightnessModeMetadata hbmMetadata,
                BrightnessMappingStrategy brightnessMappingStrategy,
                DisplayPowerController2.Injector injector) {
            this.dpc = dpc;
            this.display = display;
            this.displayPowerState = displayPowerState;
@@ -850,6 +909,8 @@ public final class DisplayPowerController2Test {
            this.wakelockController = wakelockController;
            this.screenOffBrightnessSensorController = screenOffBrightnessSensorController;
            this.hbmMetadata = hbmMetadata;
            this.brightnessMappingStrategy = brightnessMappingStrategy;
            this.injector = injector;
        }
    }

+64 −4
Original line number Diff line number Diff line
@@ -21,11 +21,14 @@ import static com.android.dx.mockito.inline.extended.ExtendedMockito.verify;

import static org.junit.Assert.assertNotNull;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyBoolean;
import static org.mockito.ArgumentMatchers.anyFloat;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.anyLong;
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.ArgumentMatchers.isA;
import static org.mockito.ArgumentMatchers.isNull;
import static org.mockito.Mockito.atLeastOnce;
import static org.mockito.Mockito.clearInvocations;
import static org.mockito.Mockito.mock;
@@ -676,6 +679,7 @@ public final class DisplayPowerControllerTest {

    @Test
    public void testStopScreenOffBrightnessSensorControllerWhenDisplayDeviceChanges() {
        // New display device
        setUpDisplay(DISPLAY_ID, "new_unique_id", mHolder.display, mock(DisplayDevice.class),
                mock(DisplayDeviceConfig.class), /* isEnabled= */ true);

@@ -715,6 +719,56 @@ public final class DisplayPowerControllerTest {
        verify(mHolder.animator, times(2)).animateTo(eq(newBrightness), anyFloat(), anyFloat());
    }

    @Test
    public void testShortTermModelPersistsWhenDisplayDeviceChanges() {
        float lux = 2000;
        float brightness = 0.4f;
        float nits = 500;
        when(mHolder.brightnessMappingStrategy.getUserLux()).thenReturn(lux);
        when(mHolder.brightnessMappingStrategy.getUserBrightness()).thenReturn(brightness);
        when(mHolder.brightnessMappingStrategy.convertToNits(brightness)).thenReturn(nits);
        when(mHolder.brightnessMappingStrategy.convertToFloatScale(nits)).thenReturn(brightness);
        DisplayPowerRequest dpr = new DisplayPowerRequest();
        mHolder.dpc.requestPowerState(dpr, /* waitForNegativeProximity= */ false);
        advanceTime(1);
        clearInvocations(mHolder.injector);

        // New display device
        setUpDisplay(DISPLAY_ID, "new_unique_id", mHolder.display, mock(DisplayDevice.class),
                mock(DisplayDeviceConfig.class), /* isEnabled= */ true);
        mHolder.dpc.onDisplayChanged(mHolder.hbmMetadata, Layout.NO_LEAD_DISPLAY);
        advanceTime(1);

        verify(mHolder.injector).getAutomaticBrightnessController(
                any(AutomaticBrightnessController.Callbacks.class),
                any(Looper.class),
                eq(mSensorManagerMock),
                any(),
                eq(mHolder.brightnessMappingStrategy),
                anyInt(),
                anyFloat(),
                anyFloat(),
                anyFloat(),
                anyInt(),
                anyInt(),
                anyLong(),
                anyLong(),
                anyBoolean(),
                any(HysteresisLevels.class),
                any(HysteresisLevels.class),
                any(HysteresisLevels.class),
                any(HysteresisLevels.class),
                eq(mContextSpy),
                any(HighBrightnessModeController.class),
                any(BrightnessThrottler.class),
                isNull(),
                anyInt(),
                anyInt(),
                eq(lux),
                eq(brightness)
        );
    }

    /**
     * Creates a mock and registers it to {@link LocalServices}.
     */
@@ -799,9 +853,9 @@ public final class DisplayPowerControllerTest {
        final ScreenOffBrightnessSensorController screenOffBrightnessSensorController =
                mock(ScreenOffBrightnessSensorController.class);

        DisplayPowerController.Injector injector = new TestInjector(displayPowerState, animator,
        DisplayPowerController.Injector injector = spy(new TestInjector(displayPowerState, animator,
                automaticBrightnessController, brightnessMappingStrategy, hysteresisLevels,
                screenOffBrightnessSensorController);
                screenOffBrightnessSensorController));

        final LogicalDisplay display = mock(LogicalDisplay.class);
        final DisplayDevice device = mock(DisplayDevice.class);
@@ -819,7 +873,7 @@ public final class DisplayPowerControllerTest {

        return new DisplayPowerControllerHolder(dpc, display, displayPowerState, brightnessSetting,
                animator, automaticBrightnessController, screenOffBrightnessSensorController,
                hbmMetadata);
                hbmMetadata, brightnessMappingStrategy, injector);
    }

    /**
@@ -835,13 +889,17 @@ public final class DisplayPowerControllerTest {
        public final AutomaticBrightnessController automaticBrightnessController;
        public final ScreenOffBrightnessSensorController screenOffBrightnessSensorController;
        public final HighBrightnessModeMetadata hbmMetadata;
        public final BrightnessMappingStrategy brightnessMappingStrategy;
        public final DisplayPowerController.Injector injector;

        DisplayPowerControllerHolder(DisplayPowerController dpc, LogicalDisplay display,
                DisplayPowerState displayPowerState, BrightnessSetting brightnessSetting,
                DualRampAnimator<DisplayPowerState> animator,
                AutomaticBrightnessController automaticBrightnessController,
                ScreenOffBrightnessSensorController screenOffBrightnessSensorController,
                HighBrightnessModeMetadata hbmMetadata) {
                HighBrightnessModeMetadata hbmMetadata,
                BrightnessMappingStrategy brightnessMappingStrategy,
                DisplayPowerController.Injector injector) {
            this.dpc = dpc;
            this.display = display;
            this.displayPowerState = displayPowerState;
@@ -850,6 +908,8 @@ public final class DisplayPowerControllerTest {
            this.automaticBrightnessController = automaticBrightnessController;
            this.screenOffBrightnessSensorController = screenOffBrightnessSensorController;
            this.hbmMetadata = hbmMetadata;
            this.brightnessMappingStrategy = brightnessMappingStrategy;
            this.injector = injector;
        }
    }