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

Unverified Commit b4cd5c70 authored by Cédric Bellegarde's avatar Cédric Bellegarde Committed by Michael Bestas
Browse files

AutoBrightness: Add support for one shot auto-brightness

- Only update auto brightness one time when screen is turned on.
- Can be useful on devices where sensor is not accurate.

Author: Eamon Powell <eamonpowell@outlook.com>
Date:   Sun Aug 29 11:37:44 2021 +1000

    fixup! AutoBrightness: Add support for one shot auto-brightness:

    * Remove unnecessary newlines
    * Fix incorrect indentation
    * Fix typo in comments

    Change-Id: I7d6071f4344605b3dcc3f1c33ac4390f1020e03f

Change-Id: I5187fdb7765550d4eaa999317ab95f487d44c8d8
parent ba2bff36
Loading
Loading
Loading
Loading
+20 −1
Original line number Diff line number Diff line
@@ -229,6 +229,8 @@ class AutomaticBrightnessController {
    private Clock mClock;
    private final Injector mInjector;

    private boolean mAutoBrightnessOneShot;

    AutomaticBrightnessController(Callbacks callbacks, Looper looper,
            SensorManager sensorManager, Sensor lightSensor,
            BrightnessMappingStrategy interactiveModeBrightnessMapper,
@@ -305,6 +307,7 @@ class AutomaticBrightnessController {
        mBrightnessThrottler = brightnessThrottler;
        mInteractiveModeBrightnessMapper = interactiveModeBrightnessMapper;
        mIdleModeBrightnessMapper = idleModeBrightnessMapper;
        mAutoBrightnessOneShot = false;
        // Initialize to active (normal) screen brightness mode
        switchToInteractiveScreenBrightnessMode();
    }
@@ -366,7 +369,8 @@ class AutomaticBrightnessController {

    public void configure(int state, @Nullable BrightnessConfiguration configuration,
            float brightness, boolean userChangedBrightness, float adjustment,
            boolean userChangedAutoBrightnessAdjustment, int displayPolicy) {
            boolean userChangedAutoBrightnessAdjustment, int displayPolicy,
            boolean autoBrightnessOneShot) {
        mState = state;
        mHbmController.setAutoBrightnessEnabled(mState);
        // While dozing, the application processor may be suspended which will prevent us from
@@ -401,6 +405,8 @@ class AutomaticBrightnessController {

        if (changed) {
            updateAutoBrightness(false /*sendUpdate*/, userInitiatedChange);
        } else {
            handleSettingsChange(autoBrightnessOneShot);
        }
    }

@@ -437,6 +443,16 @@ class AutomaticBrightnessController {
        return mAmbientLux;
    }

    private void handleSettingsChange(boolean autoBrightnessOneShot) {
        if (mAutoBrightnessOneShot && !autoBrightnessOneShot) {
            mSensorManager.registerListener(mLightSensorListener, mLightSensor,
                    mCurrentLightSensorRate * 1000, mHandler);
        } else if (!mAutoBrightnessOneShot && autoBrightnessOneShot) {
            mSensorManager.unregisterListener(mLightSensorListener);
        }
        mAutoBrightnessOneShot = autoBrightnessOneShot;
    }

    private boolean setDisplayPolicy(int policy) {
        if (mDisplayPolicy == policy) {
            return false;
@@ -895,6 +911,9 @@ class AutomaticBrightnessController {
                mCallbacks.updateBrightness();
            }
        }
        if (mAutoBrightnessOneShot) {
            mSensorManager.unregisterListener(mLightSensorListener);
        }
    }

    // Clamps values with float range [0.0-1.0]
+18 −1
Original line number Diff line number Diff line
@@ -75,6 +75,8 @@ import com.android.server.display.whitebalance.DisplayWhiteBalanceFactory;
import com.android.server.display.whitebalance.DisplayWhiteBalanceSettings;
import com.android.server.policy.WindowManagerPolicy;

import lineageos.providers.LineageSettings;

import java.io.PrintWriter;
import java.util.Objects;

@@ -473,6 +475,9 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
    private int mOnProximityPositiveMessages;
    private int mOnProximityNegativeMessages;

    // Whether auto brightness is applied one shot when screen is turned on
    private boolean mAutoBrightnessOneShot;

    // Animators.
    private ObjectAnimator mColorFadeOnAnimator;
    private ObjectAnimator mColorFadeOffAnimator;
@@ -528,6 +533,7 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
        mWindowManagerPolicy = LocalServices.getService(WindowManagerPolicy.class);
        mBlanker = blanker;
        mContext = context;
        mAutoBrightnessOneShot = getAutoBrightnessOneShotSetting();
        mBrightnessTracker = brightnessTracker;
        // TODO: b/186428377 update brightness setting when display changes
        mBrightnessSetting = brightnessSetting;
@@ -935,6 +941,9 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
        mContext.getContentResolver().registerContentObserver(
                Settings.System.getUriFor(Settings.System.SCREEN_AUTO_BRIGHTNESS_ADJ),
                false /*notifyForDescendants*/, mSettingsObserver, UserHandle.USER_ALL);
        mContext.getContentResolver().registerContentObserver(
                LineageSettings.System.getUriFor(LineageSettings.System.AUTO_BRIGHTNESS_ONE_SHOT),
                false /*notifyForDescendants*/, mSettingsObserver, UserHandle.USER_ALL);
    }

    private void setUpAutoBrightness(Resources resources, Handler handler) {
@@ -1353,7 +1362,8 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
                    mBrightnessConfiguration,
                    mLastUserSetScreenBrightness,
                    userSetBrightnessChanged, autoBrightnessAdjustment,
                    autoBrightnessAdjustmentChanged, mPowerRequest.policy);
                    autoBrightnessAdjustmentChanged, mPowerRequest.policy,
                    mAutoBrightnessOneShot);
        }

        if (mBrightnessTracker != null) {
@@ -2301,9 +2311,16 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
        // We don't bother with a pending variable for VR screen brightness since we just
        // immediately adapt to it.
        mScreenBrightnessForVr = getScreenBrightnessForVrSetting();
        mAutoBrightnessOneShot = getAutoBrightnessOneShotSetting();
        sendUpdatePowerState();
    }

    private boolean getAutoBrightnessOneShotSetting() {
        return LineageSettings.System.getIntForUser(
                mContext.getContentResolver(), LineageSettings.System.AUTO_BRIGHTNESS_ONE_SHOT,
                0, UserHandle.USER_CURRENT) == 1;
    }

    private float getAutoBrightnessAdjustmentSetting() {
        final float adj = Settings.System.getFloatForUser(mContext.getContentResolver(),
                Settings.System.SCREEN_AUTO_BRIGHTNESS_ADJ, 0.0f, UserHandle.USER_CURRENT);