PowerManagerService: Allow to light up buttons only when pressed
Co-authored-by: Corinna Vinschen <xda@vinschen.de>
Change-Id: I5b486e65a5b7d9d16590941df0af4d9c604dedc4
diff --git a/services/core/java/com/android/server/power/PowerGroup.java b/services/core/java/com/android/server/power/PowerGroup.java
index 7439960..66192a7 100644
--- a/services/core/java/com/android/server/power/PowerGroup.java
+++ b/services/core/java/com/android/server/power/PowerGroup.java
@@ -89,6 +89,9 @@
/** 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;
@@ -369,10 +372,34 @@
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;
diff --git a/services/core/java/com/android/server/power/PowerManagerService.java b/services/core/java/com/android/server/power/PowerManagerService.java
index 404d776..b081015 100644
--- a/services/core/java/com/android/server/power/PowerManagerService.java
+++ b/services/core/java/com/android/server/power/PowerManagerService.java
@@ -378,6 +378,8 @@
private int mButtonTimeout;
private float mButtonBrightness;
+ private boolean mButtonLightOnKeypressOnly;
+
private final InattentiveSleepWarningController mInattentiveSleepWarningOverlayController;
private final AmbientDisplaySuppressionController mAmbientDisplaySuppressionController;
@@ -1579,6 +1581,9 @@
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();
@@ -1719,6 +1724,9 @@
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;
}
@@ -2318,6 +2326,13 @@
}
} 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) {
@@ -3185,14 +3200,32 @@
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 {
- mButtonsLight.setBrightness(buttonBrightness);
- if (buttonBrightness != BRIGHTNESS_OFF_FLOAT &&
- mButtonTimeout != 0) {
- groupNextTimeout = now + mButtonTimeout;
+ 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;
}
}
}
@@ -3204,6 +3237,7 @@
if (wakefulness == WAKEFULNESS_AWAKE) {
if (mButtonsLight != null) {
mButtonsLight.setBrightness(BRIGHTNESS_OFF_FLOAT);
+ powerGroup.setButtonOnLocked(false);
}
}
}