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

Unverified Commit a2024f9f authored by Anas Karbila's avatar Anas Karbila Committed by Michael Bestas
Browse files

PowerManagerService: Allow to light up buttons only when pressed



Author: Anas Karbila <anaskarbila@gmail.com>
Date:   Sat Jun 3 03:21:32 2017 +0200

    PowerManagerService: Allow to light up buttons only when pressed

     * Right now capactive, lit hardware keys are being
       lit every time you either touch them or the screen.

       But some devices handle this differently on stock:

       Display touch => buttons not lit
       Buttons touch => buttons lit

     * Thus, add a setting in order to allow the user
       to choose the preferred behavior.

    Change-Id: I35ac71a8274568901f962c9692788d1c682a98dd

Author: Corinna Vinschen <xda@vinschen.de>
Date:   Sun Aug 6 15:05:54 2017 +0200

    PowerManagerService: fix HW button illumination timeout

    Change I35ac71a8274568901f962c9692788d1c682a98dd, introducing hardware
    button backlight on button keypress only, also introduced a bug:

    When touching a button and then performing display activity while
    the buttons are still on, the buttons would keep lightened up until
    the next user interaction, potentially only switched off at the next
    screen off timeout.  Also, the buttons were not illuminated on
    device wakeup.

    This patch fixes it, together with another, long-standing problem:

    When touching a hardware button, nextTimeout was set to
    now + mButtonTimeout, even if mButtonTimeout is longer than the timeout
    determined by the screen off timeout.  To wit, if screen timeout is set
    to 15 secs, but button timeout to values > 15 secs.

    Change-Id: I8a56f1d1e0138c38ed6fe294e4816a9f7f744f1e
    Signed-off-by: default avatarCorinna Vinschen <xda@vinschen.de>

Change-Id: I5b486e65a5b7d9d16590941df0af4d9c604dedc4
parent ff729975
Loading
Loading
Loading
Loading
+27 −0
Original line number Diff line number Diff line
@@ -73,6 +73,9 @@ public class PowerGroup {
    /** The current wakefulness of this group */
    private int mWakefulness;
    private int mWakeLockSummary;
    private boolean mButtonOn;
    private boolean mButtonPressed;
    private long mLastButtonActivityTime;
    private long mLastPowerOnTime;
    private long mLastUserActivityTime;
    private long mLastUserActivityTimeNoChangeLights;
@@ -294,10 +297,34 @@ public class PowerGroup {
        return true;
    }

    boolean getButtonOnLocked() {
        return mButtonOn;
    }

    boolean getButtonPressedLocked() {
        return mButtonPressed;
    }

    long getLastButtonActivityTimeLocked() {
        return mLastButtonActivityTime;
    }

    long getLastUserActivityTimeLocked() {
        return mLastUserActivityTime;
    }

    void setButtonOnLocked(boolean on) {
        mButtonOn = on;
    }

    void setButtonPressedLocked(boolean pressed) {
        mButtonPressed = pressed;
    }

    void setLastButtonActivityTimeLocked(long lastButtonActivityTime) {
        mLastButtonActivityTime = lastButtonActivityTime;
    }

    void setLastUserActivityTimeLocked(long lastUserActivityTime,
            @PowerManager.UserActivityEvent int event) {
        mLastUserActivityTime = lastUserActivityTime;
+40 −6
Original line number Diff line number Diff line
@@ -358,6 +358,8 @@ public final class PowerManagerService extends SystemService
    private int mButtonTimeout;
    private float mButtonBrightness;

    private boolean mButtonLightOnKeypressOnly;

    private final InattentiveSleepWarningController mInattentiveSleepWarningOverlayController;
    private final AmbientDisplaySuppressionController mAmbientDisplaySuppressionController;

@@ -1499,6 +1501,9 @@ public final class PowerManagerService extends SystemService
        resolver.registerContentObserver(LineageSettings.Secure.getUriFor(
                LineageSettings.Secure.BUTTON_BACKLIGHT_TIMEOUT),
                false, mSettingsObserver, UserHandle.USER_ALL);
        resolver.registerContentObserver(LineageSettings.System.getUriFor(
                LineageSettings.System.BUTTON_BACKLIGHT_ONLY_WHEN_PRESSED),
                false, mSettingsObserver, UserHandle.USER_ALL);

        // Register for broadcasts from other components of the system.
        IntentFilter filter = new IntentFilter();
@@ -1640,6 +1645,9 @@ public final class PowerManagerService extends SystemService
        mButtonBrightness = LineageSettings.Secure.getFloatForUser(resolver,
                LineageSettings.Secure.BUTTON_BRIGHTNESS, mButtonBrightnessDefault,
                UserHandle.USER_CURRENT);
        mButtonLightOnKeypressOnly = LineageSettings.System.getIntForUser(resolver,
                LineageSettings.System.BUTTON_BACKLIGHT_ONLY_WHEN_PRESSED,
                0, UserHandle.USER_CURRENT) == 1;

        mDirty |= DIRTY_SETTINGS;
    }
@@ -2190,6 +2198,13 @@ public final class PowerManagerService extends SystemService
                }
            } else {
                if (eventTime > powerGroup.getLastUserActivityTimeLocked()) {
                    powerGroup.setButtonPressedLocked(
                            event == PowerManager.USER_ACTIVITY_EVENT_BUTTON);
                    if ((mButtonLightOnKeypressOnly && powerGroup.getButtonPressedLocked())
                            || eventTime == powerGroup.getLastWakeTimeLocked()) {
                        powerGroup.setButtonPressedLocked(true);
                        powerGroup.setLastButtonActivityTimeLocked(eventTime);
                    }
                    powerGroup.setLastUserActivityTimeLocked(eventTime, event);
                    mDirty |= DIRTY_USER_ACTIVITY;
                    if (event == PowerManager.USER_ACTIVITY_EVENT_BUTTON) {
@@ -3012,16 +3027,34 @@ public final class PowerManagerService extends SystemService
                                    buttonBrightness = mButtonBrightness;
                                }

                                if (mButtonTimeout != 0 &&
                                        now > lastUserActivityTime + mButtonTimeout) {
                                if (!mButtonLightOnKeypressOnly) {
                                    powerGroup.setLastButtonActivityTimeLocked(
                                            lastUserActivityTime);
                                }
                                final long lastButtonActivityTimeout = mButtonTimeout +
                                        powerGroup.getLastButtonActivityTimeLocked();

                                if (mButtonTimeout != 0 && now > lastButtonActivityTimeout) {
                                    mButtonsLight.setBrightness(BRIGHTNESS_OFF_FLOAT);
                                    powerGroup.setButtonOnLocked(false);
                                } else {
                                    if (!mProximityPositive && (!mButtonLightOnKeypressOnly ||
                                            powerGroup.getButtonPressedLocked())) {
                                        mButtonsLight.setBrightness(buttonBrightness);
                                        powerGroup.setButtonPressedLocked(false);
                                        if (buttonBrightness != BRIGHTNESS_OFF_FLOAT &&
                                                mButtonTimeout != 0) {
                                            powerGroup.setButtonOnLocked(true);
                                            if (now + mButtonTimeout < nextTimeout) {
                                                groupNextTimeout = now + mButtonTimeout;
                                            }
                                        }
                                    } else if (mButtonLightOnKeypressOnly &&
                                            lastButtonActivityTimeout < nextTimeout &&
                                            powerGroup.getButtonOnLocked()) {
                                        groupNextTimeout = lastButtonActivityTimeout;
                                    }
                                }
                            }
                        }
                    } else {
@@ -3031,6 +3064,7 @@ public final class PowerManagerService extends SystemService
                            if (wakefulness == WAKEFULNESS_AWAKE) {
                                if (mButtonsLight != null) {
                                    mButtonsLight.setBrightness(BRIGHTNESS_OFF_FLOAT);
                                    powerGroup.setButtonOnLocked(false);
                                }
                            }
                        }