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

Commit 231375bd authored by Danny Baumann's avatar Danny Baumann Committed by Michael Bestas
Browse files

PowerManager: Re-integrate button brightness

This is a squash of the following commits:

Author: Danny Baumann <dannybaumann@web.de>
Date:   Thu Aug 22 08:53:24 2013 +0200

    Add PowerManager integration for button and keyboard backlight.

    Allows setting button and keyboard backlight brightness as well as
    button timeout.

    Change-Id: I550cccafc0a8f90d6347de9261adb26b75955cc4

Author: nadlabak <pavel@doshaska.net>
Date:   Sun Jun 7 02:01:05 2015 +0200

    PowerManagerService: Fix updating of mUserActivitySummary

    I7f1fc35a1573717d1ea101a07c4171d6f66d1553 missed the fact that the primary
    purpose of the affected condition block was to update mUserActivitySummary
    and the button/keyboard light handling was just appended to it later.

    This fixes the waking from dream/screensaver by user activity.

    I30c5c8c9c09e3d57ace18cac72b783510b9b3bf3 is removed here as well as it was
    just a band aid.

    jira: NIGHTLIES-1285

    Change-Id: I6b2f6c58e73110787d62e86d4d2ef538638cf491

Author: Bruno Martins <bgcngm@gmail.com>
Date:   Tue Dec 26 17:15:05 2017 +0000

    Forward-port button brightness implementation to O

     * Reworked for the new handler interface, restoring also removed
       methods (partial revert of commit 86c39f9e).

     * Keyboard backlight brightness support left out for now.

Change-Id: Ib22b727ed79752e3ae4666993e54b82aecd8d341
parent e46deef2
Loading
Loading
Loading
Loading
+9 −0
Original line number Diff line number Diff line
@@ -574,6 +574,15 @@ public final class PowerManager {
                com.android.internal.R.integer.config_screenBrightnessForVrSettingDefault);
    }

    /**
     * Gets the default button brightness value.
     * @hide
     */
    public int getDefaultButtonBrightness() {
        return mContext.getResources().getInteger(
                com.android.internal.R.integer.config_buttonBrightnessSettingDefault);
    }

    /**
     * Creates a new wake lock with the specified level and flags.
     * <p>
+10 −0
Original line number Diff line number Diff line
@@ -86,6 +86,16 @@ public abstract class PowerManagerInternal {
     */
    public abstract void setScreenBrightnessOverrideFromWindowManager(int brightness);

    /**
     * Used by the window manager to override the button brightness based on the
     * current foreground activity.
     *
     * This method must only be called by the window manager.
     *
     * @param brightness The overridden brightness, or -1 to disable the override.
     */
    public abstract void setButtonBrightnessOverrideFromWindowManager(int brightness);

    /**
     * Used by the window manager to override the user activity timeout based on the
     * current foreground activity.  It can only be used to make the timeout shorter
+4 −0
Original line number Diff line number Diff line
@@ -33,4 +33,8 @@
         size set. By setting this to false, devices can opt
         out of setting a batch size, which fixes rotation. -->
    <bool name="config_useDefaultBatchingForAccel">true</bool>

    <!-- Button backlight -->
    <integer name="config_buttonBrightnessSettingDefault">255</integer>
    <bool name="config_deviceHasVariableButtonBrightness">false</bool>
</resources>
+4 −0
Original line number Diff line number Diff line
@@ -37,4 +37,8 @@

    <!-- Screen unpinning -->
    <java-symbol type="string" name="lock_to_app_toast_no_navbar" />

    <!-- Button backlight -->
    <java-symbol type="integer" name="config_buttonBrightnessSettingDefault" />
    <java-symbol type="bool" name="config_deviceHasVariableButtonBrightness" />
</resources>
+71 −9
Original line number Diff line number Diff line
@@ -229,7 +229,7 @@ public final class PowerManagerService extends SystemService
    private static final int HALT_MODE_REBOOT = 1;
    private static final int HALT_MODE_REBOOT_SAFE_MODE = 2;

    private static final int BUTTON_ON_DURATION = 5 * 1000;
    private static final int DEFAULT_BUTTON_ON_DURATION = 5 * 1000;

    private static final float PROXIMITY_NEAR_THRESHOLD = 5.0f;

@@ -255,6 +255,10 @@ public final class PowerManagerService extends SystemService
    private Light mAttentionLight;
    private Light mButtonsLight;

    private int mButtonTimeout;
    private int mButtonBrightness;
    private int mButtonBrightnessSettingDefault;

    private final Object mLock = LockGuard.installNewLock(LockGuard.INDEX_POWER);

    // A bitfield that indicates what parts of the power state have
@@ -500,6 +504,11 @@ public final class PowerManagerService extends SystemService
    // Set to -1 when not told the user is inactive since the last period spent dozing or asleep.
    private long mOverriddenTimeout = -1;

    // The button brightness setting override from the window manager
    // to allow the current foreground activity to override the button brightness.
    // Use -1 to disable.
    private int mButtonBrightnessOverrideFromWindowManager = -1;

    // The user activity timeout override from the window manager
    // to allow the current foreground activity to override the user activity timeout.
    // Use -1 to disable.
@@ -756,6 +765,7 @@ public final class PowerManagerService extends SystemService
            mBatteryManagerInternal = getLocalService(BatteryManagerInternal.class);

            PowerManager pm = (PowerManager) mContext.getSystemService(Context.POWER_SERVICE);
            mButtonBrightnessSettingDefault = pm.getDefaultButtonBrightness();
            mScreenBrightnessSettingMinimum = pm.getMinimumScreenBrightnessSetting();
            mScreenBrightnessSettingMaximum = pm.getMaximumScreenBrightnessSetting();
            mScreenBrightnessSettingDefault = pm.getDefaultScreenBrightnessSetting();
@@ -853,6 +863,12 @@ public final class PowerManagerService extends SystemService
        resolver.registerContentObserver(LineageSettings.Global.getUriFor(
                LineageSettings.Global.DEV_FORCE_SHOW_NAVBAR),
                false, mSettingsObserver, UserHandle.USER_ALL);
        resolver.registerContentObserver(LineageSettings.Secure.getUriFor(
                LineageSettings.Secure.BUTTON_BRIGHTNESS),
                false, mSettingsObserver, UserHandle.USER_ALL);
        resolver.registerContentObserver(LineageSettings.Secure.getUriFor(
                LineageSettings.Secure.BUTTON_BACKLIGHT_TIMEOUT),
                false, mSettingsObserver, UserHandle.USER_ALL);
        IVrManager vrManager = (IVrManager) getBinderService(Context.VR_SERVICE);
        if (vrManager != null) {
            try {
@@ -1018,6 +1034,12 @@ public final class PowerManagerService extends SystemService
                mProximityWakeEnabledByDefaultConfig ? 1 : 0) == 1;
        mDevForceNavbar = LineageSettings.Global.getIntForUser(resolver,
                LineageSettings.Global.DEV_FORCE_SHOW_NAVBAR, 0, UserHandle.USER_CURRENT) == 1;
        mButtonTimeout = LineageSettings.Secure.getIntForUser(resolver,
                LineageSettings.Secure.BUTTON_BACKLIGHT_TIMEOUT,
                DEFAULT_BUTTON_ON_DURATION, UserHandle.USER_CURRENT);
        mButtonBrightness = LineageSettings.Secure.getIntForUser(resolver,
                LineageSettings.Secure.BUTTON_BRIGHTNESS, mButtonBrightnessSettingDefault,
                UserHandle.USER_CURRENT);

        mDirty |= DIRTY_SETTINGS;
    }
@@ -2001,23 +2023,41 @@ public final class PowerManagerService extends SystemService
                final boolean userInactiveOverride = mUserInactiveOverrideFromWindowManager;

                mUserActivitySummary = 0;
                if (mWakefulness == WAKEFULNESS_AWAKE && mLastUserActivityTime >= mLastWakeTime) {
                if (mLastUserActivityTime >= mLastWakeTime) {
                    nextTimeout = mLastUserActivityTime
                            + screenOffTimeout - screenDimDuration;
                    if (now < nextTimeout) {
                        if (mDevForceNavbar || now > mLastUserActivityTime + BUTTON_ON_DURATION) {
                        mUserActivitySummary = USER_ACTIVITY_SCREEN_BRIGHT;
                        if (mWakefulness == WAKEFULNESS_AWAKE) {
                            int buttonBrightness;
                            if (mButtonBrightnessOverrideFromWindowManager >= 0) {
                                buttonBrightness = mButtonBrightnessOverrideFromWindowManager;
                            } else {
                                if (!mDevForceNavbar) {
                                    buttonBrightness = mButtonBrightness;
                                } else {
                                    buttonBrightness = 0;
                                }
                            }

                            if (mButtonTimeout != 0 && now > mLastUserActivityTime + mButtonTimeout) {
                                mButtonsLight.setBrightness(0);
                            } else {
                                if (!mProximityPositive) {
                                mButtonsLight.setBrightness(mDisplayPowerRequest.screenBrightness);
                                nextTimeout = now + BUTTON_ON_DURATION;
                                    mButtonsLight.setBrightness(buttonBrightness);
                                    if (buttonBrightness != 0 && mButtonTimeout != 0) {
                                        nextTimeout = now + mButtonTimeout;
                                    }
                                }
                            }
                        }
                        mUserActivitySummary = USER_ACTIVITY_SCREEN_BRIGHT;
                    } else {
                        nextTimeout = mLastUserActivityTime + screenOffTimeout;
                        if (now < nextTimeout) {
                            mUserActivitySummary = USER_ACTIVITY_SCREEN_DIM;
                            if (mWakefulness == WAKEFULNESS_AWAKE) {
                                mButtonsLight.setBrightness(0);
                            }
                        }
                    }
                }
@@ -4790,6 +4830,16 @@ public final class PowerManagerService extends SystemService
        }
    }

    private void setButtonBrightnessOverrideFromWindowManagerInternal(int brightness) {
        synchronized (mLock) {
            if (mButtonBrightnessOverrideFromWindowManager != brightness) {
                mButtonBrightnessOverrideFromWindowManager = brightness;
                mDirty |= DIRTY_SETTINGS;
                updatePowerStateLocked();
            }
        }
    }

    private final class LocalService extends PowerManagerInternal {
        @Override
        public void setScreenBrightnessOverrideFromWindowManager(int screenBrightness) {
@@ -4800,6 +4850,18 @@ public final class PowerManagerService extends SystemService
            setScreenBrightnessOverrideFromWindowManagerInternal(screenBrightness);
        }

        @Override
        public void setButtonBrightnessOverrideFromWindowManager(int screenBrightness) {
            mContext.enforceCallingOrSelfPermission(android.Manifest.permission.DEVICE_POWER, null);

            final long ident = Binder.clearCallingIdentity();
            try {
                setButtonBrightnessOverrideFromWindowManagerInternal(screenBrightness);
            } finally {
                Binder.restoreCallingIdentity(ident);
            }
        }

        @Override
        public void setDozeOverrideFromDreamManager(int screenState, int screenBrightness) {
            switch (screenState) {
Loading