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

Commit 51983793 authored by Treehugger Robot's avatar Treehugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Clamp initial aod brightness on autobrightness" into main

parents 767172f5 b25f2103
Loading
Loading
Loading
Loading
+30 −8
Original line number Diff line number Diff line
@@ -293,11 +293,11 @@ public class DozeScreenBrightness extends BroadcastReceiver implements DozeMachi
        if (shouldUseFloatBrightness()) {
            mDozeService.setDozeScreenBrightnessFloat(
                    clampToDimBrightnessForScreenOffFloat(
                            clampToUserSettingFloat(mDefaultDozeBrightnessFloat)));
                            clampToUserSettingOrAutoBrightnessFloat(mDefaultDozeBrightnessFloat)));
        } else {
            mDozeService.setDozeScreenBrightness(
                    clampToDimBrightnessForScreenOff(
                            clampToUserSetting(mDefaultDozeBrightness)));
                            clampToUserSettingOrAutoBrightness(mDefaultDozeBrightness)));
        }
        mDozeHost.setAodDimmingScrim(0f);
    }
@@ -310,10 +310,7 @@ public class DozeScreenBrightness extends BroadcastReceiver implements DozeMachi
            return brightness;
        }

        int userSetting = mSystemSettings.getIntForUser(
                Settings.System.SCREEN_BRIGHTNESS, Integer.MAX_VALUE,
                UserHandle.USER_CURRENT);
        return Math.min(brightness, userSetting);
        return Math.min(brightness, getScreenBrightness());
    }

    @SuppressLint("AndroidFrameworkRequiresPermission")
@@ -325,8 +322,33 @@ public class DozeScreenBrightness extends BroadcastReceiver implements DozeMachi
            return brightness;
        }

        float userSetting = mDisplayManager.getBrightness(Display.DEFAULT_DISPLAY);
        return Math.min(brightness, userSetting);
        return Math.min(brightness, getScreenBrightnessFloat());
    }

    private int clampToUserSettingOrAutoBrightness(int brightness) {
        return Math.min(brightness, getScreenBrightness());
    }

    private float clampToUserSettingOrAutoBrightnessFloat(float brightness) {
        return Math.min(brightness, getScreenBrightnessFloat());
    }

    /**
     * Gets the current screen brightness that may have been set by manually by the user
     * or by autobrightness.
     */
    private int getScreenBrightness() {
        return mSystemSettings.getIntForUser(
                Settings.System.SCREEN_BRIGHTNESS, Integer.MAX_VALUE,
                UserHandle.USER_CURRENT);
    }

    /**
     * Gets the current screen brightness that may have been set by manually by the user
     * or by autobrightness.
     */
    private float getScreenBrightnessFloat() {
        return mDisplayManager.getBrightness(Display.DEFAULT_DISPLAY);
    }

    /**
+66 −18
Original line number Diff line number Diff line
@@ -58,7 +58,6 @@ import androidx.test.filters.SmallTest;
import com.android.internal.display.BrightnessSynchronizer;
import com.android.server.display.feature.flags.Flags;
import com.android.systemui.SysuiTestCase;
import com.android.systemui.dock.DockManager;
import com.android.systemui.keyguard.WakefulnessLifecycle;
import com.android.systemui.statusbar.phone.DozeParameters;
import com.android.systemui.statusbar.policy.DevicePostureController;
@@ -105,8 +104,6 @@ public class DozeScreenBrightnessTest extends SysuiTestCase {
    @Mock
    DozeParameters mDozeParameters;
    @Mock
    DockManager mDockManager;
    @Mock
    DevicePostureController mDevicePostureController;
    @Mock
    DozeLog mDozeLog;
@@ -114,8 +111,8 @@ public class DozeScreenBrightnessTest extends SysuiTestCase {
    SystemSettings mSystemSettings;
    @Mock
    DisplayManager mDisplayManager;
    private FakeExecutor mFakeExecutor = new FakeExecutor(new FakeSystemClock());
    private FakeThreadFactory mFakeThreadFactory = new FakeThreadFactory(mFakeExecutor);
    private final FakeExecutor mFakeExecutor = new FakeExecutor(new FakeSystemClock());
    private final FakeThreadFactory mFakeThreadFactory = new FakeThreadFactory(mFakeExecutor);

    private DozeScreenBrightness mScreen;

@@ -249,32 +246,35 @@ public class DozeScreenBrightnessTest extends SysuiTestCase {
    }

    @Test
    @RequiresFlagsDisabled(Flags.FLAG_DOZE_BRIGHTNESS_FLOAT)
    public void testAod_usesLightSensorNotClampingToAutoBrightnessValue_Int() {
        int maxBrightness = 3;
        when(mSystemSettings.getIntForUser(eq(Settings.System.SCREEN_BRIGHTNESS), anyInt(),
                eq(UserHandle.USER_CURRENT))).thenReturn(maxBrightness);
    @RequiresFlagsEnabled(Flags.FLAG_DOZE_BRIGHTNESS_FLOAT)
    public void initialBrightness_clampsToAutoBrightnessValue_Float() {
        float maxBrightnessFromAutoBrightness = DEFAULT_BRIGHTNESS_FLOAT / 2;
        when(mDisplayManager.getBrightness(Display.DEFAULT_DISPLAY)).thenReturn(
                maxBrightnessFromAutoBrightness
        );
        when(mSystemSettings.getIntForUser(eq(Settings.System.SCREEN_BRIGHTNESS_MODE), anyInt(),
                eq(UserHandle.USER_CURRENT)))
                .thenReturn(Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC);

        mScreen.transitionTo(UNINITIALIZED, INITIALIZED);
        assertEquals(DEFAULT_BRIGHTNESS_INT, mServiceFake.screenBrightnessInt);
        assertTrue(Float.isNaN(mServiceFake.screenBrightnessFloat));
        assertEquals(maxBrightnessFromAutoBrightness, mServiceFake.screenBrightnessFloat,
                DELTA);
        assertEquals(PowerManager.BRIGHTNESS_DEFAULT, mServiceFake.screenBrightnessInt);
    }

    @Test
    @RequiresFlagsEnabled(Flags.FLAG_DOZE_BRIGHTNESS_FLOAT)
    public void testAod_usesLightSensorNotClampingToAutoBrightnessValue_Float() {
        float maxBrightness = DEFAULT_BRIGHTNESS_FLOAT / 2;
        when(mDisplayManager.getBrightness(Display.DEFAULT_DISPLAY)).thenReturn(maxBrightness);
    @RequiresFlagsDisabled(Flags.FLAG_DOZE_BRIGHTNESS_FLOAT)
    public void initialBrightness_clampsToAutoBrightnessValue_Int() {
        int maxBrightnessFromAutoBrightness = DEFAULT_BRIGHTNESS_INT / 2;
        when(mSystemSettings.getIntForUser(eq(Settings.System.SCREEN_BRIGHTNESS), anyInt(),
                eq(UserHandle.USER_CURRENT))).thenReturn(maxBrightnessFromAutoBrightness);
        when(mSystemSettings.getIntForUser(eq(Settings.System.SCREEN_BRIGHTNESS_MODE), anyInt(),
                eq(UserHandle.USER_CURRENT)))
                .thenReturn(Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC);

        mScreen.transitionTo(UNINITIALIZED, INITIALIZED);
        assertEquals(DEFAULT_BRIGHTNESS_FLOAT, mServiceFake.screenBrightnessFloat, DELTA);
        assertEquals(PowerManager.BRIGHTNESS_DEFAULT, mServiceFake.screenBrightnessInt);
        assertEquals(maxBrightnessFromAutoBrightness, mServiceFake.screenBrightnessInt);
        assertTrue(Float.isNaN(mServiceFake.screenBrightnessFloat));
    }

    @Test
@@ -377,6 +377,54 @@ public class DozeScreenBrightnessTest extends SysuiTestCase {
        assertEquals(PowerManager.BRIGHTNESS_DEFAULT, mServiceFake.screenBrightnessInt);
    }

    @Test
    @RequiresFlagsEnabled(Flags.FLAG_DOZE_BRIGHTNESS_FLOAT)
    public void lightSensorChangesInAod_doesNotClampToAutoBrightnessValue_Float() {
        // GIVEN auto brightness reports low brightness
        float maxBrightnessFromAutoBrightness = DEFAULT_BRIGHTNESS_FLOAT / 2;
        when(mDisplayManager.getBrightness(Display.DEFAULT_DISPLAY))
                .thenReturn(maxBrightnessFromAutoBrightness);
        when(mSystemSettings.getIntForUser(eq(Settings.System.SCREEN_BRIGHTNESS_MODE), anyInt(),
                eq(UserHandle.USER_CURRENT)))
                .thenReturn(Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC);

        // GIVEN the device is DOZE_AOD and the display state changes to ON
        mScreen.transitionTo(UNINITIALIZED, INITIALIZED);
        mScreen.transitionTo(INITIALIZED, DOZE_AOD);
        waitForSensorManager();

        // WHEN new sensor event sent
        mSensor.sendSensorEvent(3);

        // THEN brightness is updated
        assertEquals(SENSOR_TO_BRIGHTNESS_FLOAT[3], mServiceFake.screenBrightnessFloat, DELTA);
        assertEquals(PowerManager.BRIGHTNESS_DEFAULT, mServiceFake.screenBrightnessInt);
    }

    @Test
    @RequiresFlagsDisabled(Flags.FLAG_DOZE_BRIGHTNESS_FLOAT)
    public void lightSensorChangesInAod_doesNotClampToAutoBrightnessValue_Int() {
        // GIVEN auto brightness reports low brightness
        int maxBrightnessFromAutoBrightness = 1;
        when(mSystemSettings.getIntForUser(eq(Settings.System.SCREEN_BRIGHTNESS), anyInt(),
                eq(UserHandle.USER_CURRENT))).thenReturn(maxBrightnessFromAutoBrightness);
        when(mSystemSettings.getIntForUser(eq(Settings.System.SCREEN_BRIGHTNESS_MODE), anyInt(),
                eq(UserHandle.USER_CURRENT)))
                .thenReturn(Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC);

        // GIVEN the device is DOZE_AOD and the display state changes to ON
        mScreen.transitionTo(UNINITIALIZED, INITIALIZED);
        mScreen.transitionTo(INITIALIZED, DOZE_AOD);
        waitForSensorManager();

        // WHEN new sensor event sent
        mSensor.sendSensorEvent(3);

        // THEN brightness is updated
        assertEquals(SENSOR_TO_BRIGHTNESS_INT[3], mServiceFake.screenBrightnessInt);
        assertTrue(Float.isNaN(mServiceFake.screenBrightnessFloat));
    }

    @Test
    @RequiresFlagsDisabled(Flags.FLAG_DOZE_BRIGHTNESS_FLOAT)
    public void docked_usesLightSensor_Int() {