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

Commit 51534594 authored by Pawit Pornkitprasan's avatar Pawit Pornkitprasan Committed by Gerrit Code Review
Browse files

Fix automatic brightness

Broken in Iddcbee98f6588bba428c4059e786d946d7ce2298

- Brightness is now handled in handleLightSensorValue instead of
  onSensorChanged, but the previous patch copied the old handling
  code into onSensorChanged in addition to calling handleLightSensorValue.
  This patch integrates the brightness filter change from
  onSensorChanged into handleLightSensorValue.
- onSensorChanged called mHandler.removeCallbacks(mAutoBrightnessTask)
  every time a value is received from the sensor ensuring that the
  task never get ran! (We schedule it 2 seconds into the future
  but receives a value from the sensor every second.)
  This patch removes the call.

(Note: similar to http://review.cyanogenmod.com/11341)

Change-Id: Id3e4f0f02f91f27c7c12cb2e274e0c13213d4774
parent 9a8117c4
Loading
Loading
Loading
Loading
+36 −60
Original line number Diff line number Diff line
@@ -3765,58 +3765,6 @@ public class PowerManagerService extends IPowerManager.Stub

    private void handleLightSensorValue(int value, boolean immediate) {
        long milliseconds = SystemClock.elapsedRealtime();
        if (mLightSensorValue == -1
                || milliseconds < mLastScreenOnTime + mLightSensorWarmupTime
                || mWaitingForFirstLightSensor) {
            // process the value immediately if screen has just turned on
            mHandler.removeCallbacks(mAutoBrightnessTask);
            mLightSensorPendingDecrease = false;
            mLightSensorPendingIncrease = false;
            lightSensorChangedLocked(value, immediate);
        } else {
            if ((value > mLightSensorValue && mLightSensorPendingDecrease) ||
                    (value < mLightSensorValue && mLightSensorPendingIncrease) ||
                    (value == mLightSensorValue) ||
                    (!mLightSensorPendingDecrease && !mLightSensorPendingIncrease)) {
                // delay processing to debounce the sensor
                mHandler.removeCallbacks(mAutoBrightnessTask);
                mLightSensorPendingDecrease = (value < mLightSensorValue);
                mLightSensorPendingIncrease = (value > mLightSensorValue);
                if (mLightSensorPendingDecrease || mLightSensorPendingIncrease) {
                    mLightSensorPendingValue = value;
                    mHandler.postDelayed(mAutoBrightnessTask, LIGHT_SENSOR_DELAY);
                }
            } else {
                mLightSensorPendingValue = value;
            }
        }
    }

    SensorEventListener mLightListener = new SensorEventListener() {
        @Override
        public void onSensorChanged(SensorEvent event) {
            if (mDebugLightSensor) {
                Slog.d(TAG, "onSensorChanged: light value: " + event.values[0]);
            }
            synchronized (mLocks) {
                // ignore light sensor while screen is turning off
                if (isScreenTurningOffLocked()) {
                    return;
                }
                handleLightSensorValue((int)event.values[0], mWaitingForFirstLightSensor);
                if (mWaitingForFirstLightSensor && !mPreparingForScreenOn) {
                    if (mDebugLightAnimation) {
                        Slog.d(TAG, "onSensorChanged: Clearing mWaitingForFirstLightSensor.");
                    }
                    mWaitingForFirstLightSensor = false;
                }

                int value = (int)event.values[0];
                long milliseconds = SystemClock.elapsedRealtime();
                if (mDebugLightSensor) {
                    Slog.d(TAG, "onSensorChanged: light value: " + value);
                }
                mHandler.removeCallbacks(mAutoBrightnessTask);
        mLightFilterSample = value;
        if (mAutoBrightessEnabled && mLightFilterEnabled) {
            if (mLightFilterRunning && mLightSensorValue != -1) {
@@ -3852,12 +3800,20 @@ public class PowerManagerService extends IPowerManager.Stub
            return;
        }

                if (mLightSensorValue != value) {
                    if (mLightSensorValue == -1 ||
                            milliseconds < mLastScreenOnTime + mLightSensorWarmupTime) {
        // Light filter disabled
        if (mLightSensorValue == -1
                || milliseconds < mLastScreenOnTime + mLightSensorWarmupTime
                || mWaitingForFirstLightSensor) {
            // process the value immediately if screen has just turned on
                        lightSensorChangedLocked(value, true);
            mHandler.removeCallbacks(mAutoBrightnessTask);
            mLightSensorPendingDecrease = false;
            mLightSensorPendingIncrease = false;
            lightSensorChangedLocked(value, immediate);
        } else {
            if ((value > mLightSensorValue && mLightSensorPendingDecrease) ||
                    (value < mLightSensorValue && mLightSensorPendingIncrease) ||
                    (value == mLightSensorValue) ||
                    (!mLightSensorPendingDecrease && !mLightSensorPendingIncrease)) {
                // delay processing to debounce the sensor
                mHandler.removeCallbacks(mAutoBrightnessTask);
                mLightSensorPendingDecrease = (value < mLightSensorValue);
@@ -3866,13 +3822,33 @@ public class PowerManagerService extends IPowerManager.Stub
                    mLightSensorPendingValue = value;
                    mHandler.postDelayed(mAutoBrightnessTask, LIGHT_SENSOR_DELAY);
                }
                    }
            } else {
                mLightSensorPendingValue = value;
            }
        }
    }

    SensorEventListener mLightListener = new SensorEventListener() {
        @Override
        public void onSensorChanged(SensorEvent event) {
            if (mDebugLightSensor) {
                Slog.d(TAG, "onSensorChanged: light value: " + event.values[0]);
            }
            synchronized (mLocks) {
                // ignore light sensor while screen is turning off
                if (isScreenTurningOffLocked()) {
                    return;
                }
                handleLightSensorValue((int)event.values[0], mWaitingForFirstLightSensor);
                if (mWaitingForFirstLightSensor && !mPreparingForScreenOn) {
                    if (mDebugLightAnimation) {
                        Slog.d(TAG, "onSensorChanged: Clearing mWaitingForFirstLightSensor.");
                    }
                    mWaitingForFirstLightSensor = false;
                }
            }
        }

        @Override
        public void onAccuracyChanged(Sensor sensor, int accuracy) {
            // ignore