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

Commit 3793368f authored by Craig Mautner's avatar Craig Mautner
Browse files

Set screen brightness to match sensor at power on.

Use the first sensor value received after screen on to set the screen
brightness. Do this setting immediately rather than animate to the
target brightness.

Fixes bug 6612418.

Change-Id: I6c24c55e0bd35ef58a6494d3b5e449954241fd00
parent b215726a
Loading
Loading
Loading
Loading
+19 −8
Original line number Diff line number Diff line
@@ -244,6 +244,7 @@ public class PowerManagerService extends IPowerManager.Stub
    private Handler mHandler;
    private final TimeoutTask mTimeoutTask = new TimeoutTask();
    private ScreenBrightnessAnimator mScreenBrightnessAnimator;
    private boolean mWaitingForFirstLightSensor = false;
    private boolean mStillNeedSleepNotification;
    private boolean mIsPowered = false;
    private IActivityManager mActivityService;
@@ -1755,7 +1756,11 @@ public class PowerManagerService extends IPowerManager.Stub
            mLastScreenOnTime = (on ? SystemClock.elapsedRealtime() : 0);
            if (mUseSoftwareAutoBrightness) {
                enableLightSensorLocked(on);
                if (!on) {
                if (on) {
                    // If AutoBrightness is enabled, set the brightness immediately after the
                    // next sensor value is received.
                    mWaitingForFirstLightSensor = mAutoBrightessEnabled;
                } else {
                    // make sure button and key backlights are off too
                    mButtonLight.turnOff();
                    mKeyboardLight.turnOff();
@@ -2636,7 +2641,7 @@ public class PowerManagerService extends IPowerManager.Stub

    private void lightSensorChangedLocked(int value, boolean immediate) {
        if (mDebugLightSensor) {
            Slog.d(TAG, "lightSensorChangedLocked " + value);
            Slog.d(TAG, "lightSensorChangedLocked value=" + value + " immediate=" + immediate);
        }

        // Don't do anything if the screen is off.
@@ -3212,7 +3217,9 @@ public class PowerManagerService extends IPowerManager.Stub
    private void enableLightSensorLocked(boolean enable) {
        if (mDebugLightSensor) {
            Slog.d(TAG, "enableLightSensorLocked enable=" + enable
                    + " mAutoBrightessEnabled=" + mAutoBrightessEnabled);
                    + " mLightSensorEnabled=" + mLightSensorEnabled
                    + " mAutoBrightessEnabled=" + mAutoBrightessEnabled
                    + " mWaitingForFirstLightSensor=" + mWaitingForFirstLightSensor);
        }
        if (!mAutoBrightessEnabled) {
            enable = false;
@@ -3226,8 +3233,8 @@ public class PowerManagerService extends IPowerManager.Stub
                    // reset our highest value when reenabling
                    mHighestLightSensorValue = -1;
                    // force recompute of backlight values
                    if (mLightSensorValue >= 0) {
                        int value = (int)mLightSensorValue;
                    final int value = (int)mLightSensorValue;
                    if (value >= 0) {
                        mLightSensorValue = -1;
                        handleLightSensorValue(value, true);
                    }
@@ -3291,8 +3298,9 @@ public class PowerManagerService extends IPowerManager.Stub

    private void handleLightSensorValue(int value, boolean immediate) {
        long milliseconds = SystemClock.elapsedRealtime();
        if (mLightSensorValue == -1 ||
                milliseconds < mLastScreenOnTime + mLightSensorWarmupTime) {
        if (mLightSensorValue == -1
                || milliseconds < mLastScreenOnTime + mLightSensorWarmupTime
                || mWaitingForFirstLightSensor) {
            // process the value immediately if screen has just turned on
            mHandler.removeCallbacks(mAutoBrightnessTask);
            mLightSensorPendingDecrease = false;
@@ -3327,7 +3335,10 @@ public class PowerManagerService extends IPowerManager.Stub
                if (isScreenTurningOffLocked()) {
                    return;
                }
                handleLightSensorValue((int)event.values[0], false);
                handleLightSensorValue((int)event.values[0], mWaitingForFirstLightSensor);
                if (mWaitingForFirstLightSensor) {
                    mWaitingForFirstLightSensor = false;
                }
            }
        }