diff --git a/api/current.xml b/api/current.xml
index fed1e453048b1..12c2eeea7af38 100644
--- a/api/current.xml
+++ b/api/current.xml
@@ -167061,6 +167061,39 @@
visibility="public"
>
+
+
+
+
+
+
+
+
= 0) {
return mScreenBrightnessOverride;
- } else if (mLightSensorBrightness >= 0 && mUseSoftwareAutoBrightness
+ } else if (mLightSensorScreenBrightness >= 0 && mUseSoftwareAutoBrightness
&& mAutoBrightessEnabled) {
- return mLightSensorBrightness;
+ return mLightSensorScreenBrightness;
}
final int brightness = Settings.System.getInt(mContext.getContentResolver(),
SCREEN_BRIGHTNESS);
@@ -1833,6 +1852,40 @@ class PowerManagerService extends IPowerManager.Stub
}
}
+ private int applyButtonState(int state) {
+ int brightness = -1;
+ if (mButtonBrightnessOverride >= 0) {
+ brightness = mButtonBrightnessOverride;
+ } else if (mLightSensorButtonBrightness >= 0 && mUseSoftwareAutoBrightness) {
+ brightness = mLightSensorButtonBrightness;
+ }
+ if (brightness > 0) {
+ return state | BUTTON_BRIGHT_BIT;
+ } else if (brightness == 0) {
+ return state & ~BUTTON_BRIGHT_BIT;
+ } else {
+ return state;
+ }
+ }
+
+ private int applyKeyboardState(int state) {
+ int brightness = -1;
+ if (!mKeyboardVisible) {
+ brightness = 0;
+ } else if (mButtonBrightnessOverride >= 0) {
+ brightness = mButtonBrightnessOverride;
+ } else if (mLightSensorKeyboardBrightness >= 0 && mUseSoftwareAutoBrightness) {
+ brightness = mLightSensorKeyboardBrightness;
+ }
+ if (brightness > 0) {
+ return state | KEYBOARD_BRIGHT_BIT;
+ } else if (brightness == 0) {
+ return state & ~KEYBOARD_BRIGHT_BIT;
+ } else {
+ return state;
+ }
+ }
+
public boolean isScreenOn() {
synchronized (mLocks) {
return (mPowerState & SCREEN_ON_BIT) != 0;
@@ -2008,7 +2061,9 @@ class PowerManagerService extends IPowerManager.Stub
} else {
keyboardValue = 0;
}
- mLightSensorBrightness = lcdValue;
+ mLightSensorScreenBrightness = lcdValue;
+ mLightSensorButtonBrightness = buttonValue;
+ mLightSensorKeyboardBrightness = keyboardValue;
if (mDebugLightSensor) {
Log.d(TAG, "lcdValue " + lcdValue);
@@ -2032,31 +2087,35 @@ class PowerManagerService extends IPowerManager.Stub
lcdValue, brightnessMode);
}
}
- if (ANIMATE_BUTTON_LIGHTS) {
- if (mButtonBrightness.setTargetLocked(buttonValue,
- AUTOBRIGHTNESS_ANIM_STEPS, INITIAL_BUTTON_BRIGHTNESS,
- (int)mButtonBrightness.curValue)) {
- startAnimation = true;
+ if (mButtonBrightnessOverride < 0) {
+ if (ANIMATE_BUTTON_LIGHTS) {
+ if (mButtonBrightness.setTargetLocked(buttonValue,
+ AUTOBRIGHTNESS_ANIM_STEPS, INITIAL_BUTTON_BRIGHTNESS,
+ (int)mButtonBrightness.curValue)) {
+ startAnimation = true;
+ }
+ } else {
+ int brightnessMode = (mUseSoftwareAutoBrightness
+ ? HardwareService.BRIGHTNESS_MODE_SENSOR
+ : HardwareService.BRIGHTNESS_MODE_USER);
+ mHardware.setLightBrightness_UNCHECKED(HardwareService.LIGHT_ID_BUTTONS,
+ buttonValue, brightnessMode);
}
- } else {
- int brightnessMode = (mUseSoftwareAutoBrightness
- ? HardwareService.BRIGHTNESS_MODE_SENSOR
- : HardwareService.BRIGHTNESS_MODE_USER);
- mHardware.setLightBrightness_UNCHECKED(HardwareService.LIGHT_ID_BUTTONS,
- buttonValue, brightnessMode);
}
- if (ANIMATE_KEYBOARD_LIGHTS) {
- if (mKeyboardBrightness.setTargetLocked(keyboardValue,
- AUTOBRIGHTNESS_ANIM_STEPS, INITIAL_BUTTON_BRIGHTNESS,
- (int)mKeyboardBrightness.curValue)) {
- startAnimation = true;
+ if (mButtonBrightnessOverride < 0 || !mKeyboardVisible) {
+ if (ANIMATE_KEYBOARD_LIGHTS) {
+ if (mKeyboardBrightness.setTargetLocked(keyboardValue,
+ AUTOBRIGHTNESS_ANIM_STEPS, INITIAL_BUTTON_BRIGHTNESS,
+ (int)mKeyboardBrightness.curValue)) {
+ startAnimation = true;
+ }
+ } else {
+ int brightnessMode = (mUseSoftwareAutoBrightness
+ ? HardwareService.BRIGHTNESS_MODE_SENSOR
+ : HardwareService.BRIGHTNESS_MODE_USER);
+ mHardware.setLightBrightness_UNCHECKED(HardwareService.LIGHT_ID_KEYBOARD,
+ keyboardValue, brightnessMode);
}
- } else {
- int brightnessMode = (mUseSoftwareAutoBrightness
- ? HardwareService.BRIGHTNESS_MODE_SENSOR
- : HardwareService.BRIGHTNESS_MODE_USER);
- mHardware.setLightBrightness_UNCHECKED(HardwareService.LIGHT_ID_KEYBOARD,
- keyboardValue, brightnessMode);
}
if (startAnimation) {
if (mDebugLightSensor) {
diff --git a/services/java/com/android/server/WindowManagerService.java b/services/java/com/android/server/WindowManagerService.java
index a013c75e23840..048134027fc8e 100644
--- a/services/java/com/android/server/WindowManagerService.java
+++ b/services/java/com/android/server/WindowManagerService.java
@@ -9313,6 +9313,7 @@ public class WindowManagerService extends IWindowManager.Stub
boolean orientationChangeComplete = true;
Session holdScreen = null;
float screenBrightness = -1;
+ float buttonBrightness = -1;
boolean focusDisplayed = false;
boolean animating = false;
@@ -10072,6 +10073,10 @@ public class WindowManagerService extends IWindowManager.Stub
&& screenBrightness < 0) {
screenBrightness = w.mAttrs.screenBrightness;
}
+ if (!syswin && w.mAttrs.buttonBrightness >= 0
+ && buttonBrightness < 0) {
+ buttonBrightness = w.mAttrs.buttonBrightness;
+ }
if (attrs.type == WindowManager.LayoutParams.TYPE_SYSTEM_DIALOG
|| attrs.type == WindowManager.LayoutParams.TYPE_KEYGUARD
|| attrs.type == WindowManager.LayoutParams.TYPE_SYSTEM_ERROR) {
@@ -10318,6 +10323,12 @@ public class WindowManagerService extends IWindowManager.Stub
mPowerManager.setScreenBrightnessOverride((int)
(screenBrightness * Power.BRIGHTNESS_ON));
}
+ if (buttonBrightness < 0 || buttonBrightness > 1.0f) {
+ mPowerManager.setButtonBrightnessOverride(-1);
+ } else {
+ mPowerManager.setButtonBrightnessOverride((int)
+ (buttonBrightness * Power.BRIGHTNESS_ON));
+ }
if (holdScreen != mHoldingScreenOn) {
mHoldingScreenOn = holdScreen;
Message m = mH.obtainMessage(H.HOLD_SCREEN_CHANGED, holdScreen);