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

Commit 8a4dd0f4 authored by Danny Baumann's avatar Danny Baumann Committed by Gerrit Code Review
Browse files

Merge "Add PowerManager integration for button and keyboard backlight." into cm-10.2

parents 1faee741 b4d09e71
Loading
Loading
Loading
Loading
+16 −0
Original line number Diff line number Diff line
@@ -885,5 +885,21 @@ public final class PowerManager {
        }
    }

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

    /**
     * Gets the default keyboard brightness value.
     * @hide
     */
    public int getDefaultKeyboardBrightness() {
        return mContext.getResources().getInteger(
                com.android.internal.R.integer.config_keyboardBrightnessSettingDefault);
    }
}
+22 −0
Original line number Diff line number Diff line
@@ -1800,6 +1800,28 @@ public final class Settings {
         */
        public static final String AUTO_BRIGHTNESS_TWILIGHT_ADJUSTMENT = "auto_brightness_twilight_adjustment";

        /**
         * The keyboard brightness to be used while the screen is on.
         * Valid value range is between 0 and {@link PowerManager#getMaximumKeyboardBrightness()}
         * @hide
         */
        public static final String KEYBOARD_BRIGHTNESS = "keyboard_brightness";

        /**
         * The button brightness to be used while the screen is on or after a button press,
         * depending on the value of {@link BUTTON_BACKLIGHT_TIMEOUT}.
         * Valid value range is between 0 and {@link PowerManager#getMaximumButtonBrightness()}
         * @hide
         */
        public static final String BUTTON_BRIGHTNESS = "button_brightness";

        /**
         * The time in ms to keep the button backlight on after pressing a button.
         * A value of 0 will keep the buttons on for as long as the screen is on.
         * @hide
         */
        public static final String BUTTON_BACKLIGHT_TIMEOUT = "button_backlight_timeout";

        /**
         * Whether to enable the electron beam animation when turning screen off
         *
+4 −0
Original line number Diff line number Diff line
@@ -651,6 +651,10 @@
    <integer-array name="config_autoBrightnessKeyboardBacklightValues">
    </integer-array>

    <integer name="config_buttonBrightnessSettingDefault">255</integer>
    <integer name="config_keyboardBrightnessSettingDefault">0</integer>
    <bool name="config_deviceHasVariableButtonBrightness">false</bool>

    <!-- Amount of time it takes for the light sensor to warm up in milliseconds.
         For this time after the screen turns on, the Power Manager
         will not debounce light sensor readings -->
+3 −0
Original line number Diff line number Diff line
@@ -1617,6 +1617,9 @@
  <java-symbol type="integer" name="config_screenBrightnessSettingMaximum" />
  <java-symbol type="integer" name="config_screenBrightnessSettingDefault" />
  <java-symbol type="integer" name="config_screenBrightnessDim" />
  <java-symbol type="integer" name="config_buttonBrightnessSettingDefault" />
  <java-symbol type="integer" name="config_keyboardBrightnessSettingDefault" />
  <java-symbol type="bool" name="config_deviceHasVariableButtonBrightness" />
  <java-symbol type="integer" name="config_shutdownBatteryTemperature" />
  <java-symbol type="integer" name="config_undockedHdmiRotation" />
  <java-symbol type="integer" name="config_virtualKeyQuietTimeMillis" />
+45 −9
Original line number Diff line number Diff line
@@ -148,7 +148,7 @@ public final class PowerManagerService extends IPowerManager.Stub
    // This is subtracted from the end of the screen off timeout so the
    // minimum screen off timeout should be longer than this.
    private static final int SCREEN_DIM_DURATION = 7 * 1000;
    private static final int BUTTON_ON_DURATION = 5 * 1000;
    private static final int DEFAULT_BUTTON_ON_DURATION = 5 * 1000;

    // The maximum screen dim time expressed as a ratio relative to the screen
    // off timeout.  If the screen off timeout is very short then we want the
@@ -190,6 +190,12 @@ public final class PowerManagerService extends IPowerManager.Stub
    private LightsService.Light mCapsLight;
    private LightsService.Light mFnLight;

    private int mButtonTimeout;
    private int mButtonBrightness;
    private int mButtonBrightnessSettingDefault;
    private int mKeyboardBrightness;
    private int mKeyboardBrightnessSettingDefault;

    private final Object mLock = new Object();

    // A bitfield that indicates what parts of the power state have
@@ -457,6 +463,9 @@ public final class PowerManagerService extends IPowerManager.Stub
            mScreenBrightnessSettingMaximum = pm.getMaximumScreenBrightnessSetting();
            mScreenBrightnessSettingDefault = pm.getDefaultScreenBrightnessSetting();

            mButtonBrightnessSettingDefault = pm.getDefaultButtonBrightness();
            mKeyboardBrightnessSettingDefault = pm.getDefaultKeyboardBrightness();

            SensorManager sensorManager = new SystemSensorManager(mContext, mHandler.getLooper());

            // The notifier runs on the system server's main looper so as not to interfere
@@ -532,6 +541,15 @@ public final class PowerManagerService extends IPowerManager.Stub
            resolver.registerContentObserver(Settings.System.getUriFor(
                    Settings.System.AUTO_BRIGHTNESS_RESPONSIVENESS),
                    false, mSettingsObserver, UserHandle.USER_ALL);
            resolver.registerContentObserver(Settings.System.getUriFor(
                    Settings.System.BUTTON_BRIGHTNESS),
                    false, mSettingsObserver, UserHandle.USER_ALL);
            resolver.registerContentObserver(Settings.System.getUriFor(
                    Settings.System.KEYBOARD_BRIGHTNESS),
                    false, mSettingsObserver, UserHandle.USER_ALL);
            resolver.registerContentObserver(Settings.System.getUriFor(
                    Settings.System.BUTTON_BACKLIGHT_TIMEOUT),
                    false, mSettingsObserver, UserHandle.USER_ALL);

            // Go.
            readConfigurationLocked();
@@ -612,6 +630,17 @@ public final class PowerManagerService extends IPowerManager.Stub
        mAutoBrightnessResponsitivityFactor =
                Math.min(Math.max(newAutoBrightnessResponsitivityFactor, 0.2f), 3.0f);

        mButtonTimeout = Settings.System.getIntForUser(resolver,
                Settings.System.BUTTON_BACKLIGHT_TIMEOUT,
                DEFAULT_BUTTON_ON_DURATION, UserHandle.USER_CURRENT);

        mButtonBrightness = Settings.System.getIntForUser(resolver,
                Settings.System.BUTTON_BRIGHTNESS, mButtonBrightnessSettingDefault,
                UserHandle.USER_CURRENT);
        mKeyboardBrightness = Settings.System.getIntForUser(resolver,
                Settings.System.KEYBOARD_BRIGHTNESS, mKeyboardBrightnessSettingDefault,
                UserHandle.USER_CURRENT);

        mDirty |= DIRTY_SETTINGS;
    }

@@ -1411,22 +1440,29 @@ public final class PowerManagerService extends IPowerManager.Stub
                    nextTimeout = mLastUserActivityTime
                            + screenOffTimeout - screenDimDuration;
                    if (now < nextTimeout) {
                        int brightness = mButtonBrightnessOverrideFromWindowManager >= 0
                                ? mButtonBrightnessOverrideFromWindowManager
                                : mDisplayPowerRequest.screenBrightness;
                        mKeyboardLight.setBrightness(mKeyboardVisible ? brightness : 0);
                        if (now > mLastUserActivityTime + BUTTON_ON_DURATION) {
                        int buttonBrightness, keyboardBrightness;
                        if (mButtonBrightnessOverrideFromWindowManager >= 0) {
                            buttonBrightness = mButtonBrightnessOverrideFromWindowManager;
                            keyboardBrightness = mButtonBrightnessOverrideFromWindowManager;
                        } else {
                            buttonBrightness = mButtonBrightness;
                            keyboardBrightness = mKeyboardBrightness;
                        }

                        mKeyboardLight.setBrightness(mKeyboardVisible ? keyboardBrightness : 0);
                        if (mButtonTimeout != 0 && now > mLastUserActivityTime + mButtonTimeout) {
                            mButtonsLight.setBrightness(0);
                        } else {
                            mButtonsLight.setBrightness(brightness);
                            if (brightness != 0) {
                                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) {
                            mButtonsLight.setBrightness(0);
                            mKeyboardLight.setBrightness(0);
                            mUserActivitySummary |= USER_ACTIVITY_SCREEN_DIM;
                        }