From fb73f79340375013225618a5d87f46b958f698ef Mon Sep 17 00:00:00 2001 From: Mike Lockwood Date: Fri, 20 Nov 2009 11:31:18 -0500 Subject: [PATCH] Add window manager support for overriding button and keyboard backlight values. The new backlightBrightness field works similarly as the existing WindowManager.LayoutParams.screenBrightness field Needed for bugs: b/2233655 (under low ambient light the touch keys remain illuminated during video playback and never timeout) b/2221079 (Backlight for home/search/back/etc buttons should turn off when in dock in night mode) Change-Id: I60dfecdc7bb653b0db38094464de651220b3d438 --- api/current.xml | 43 ++++++ core/java/android/os/LocalPowerManager.java | 1 + core/java/android/view/WindowManager.java | 41 +++++- .../android/server/PowerManagerService.java | 131 +++++++++++++----- .../android/server/WindowManagerService.java | 11 ++ 5 files changed, 189 insertions(+), 38 deletions(-) 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);