Skip to content

Commit

Permalink
Keyboard backlight for non-autobrightness fix
Browse files Browse the repository at this point in the history
  • Loading branch information
corcoran authored and existz committed Apr 3, 2012
1 parent b28f884 commit 07bb1e4
Showing 1 changed file with 39 additions and 13 deletions.
52 changes: 39 additions & 13 deletions services/java/com/android/server/PowerManagerService.java
Expand Up @@ -31,6 +31,7 @@
import android.content.IntentFilter; import android.content.IntentFilter;
import android.content.pm.PackageManager; import android.content.pm.PackageManager;
import android.content.res.Resources; import android.content.res.Resources;
import android.content.res.Configuration;
import android.database.ContentObserver; import android.database.ContentObserver;
import android.database.Cursor; import android.database.Cursor;
import android.hardware.Sensor; import android.hardware.Sensor;
Expand Down Expand Up @@ -178,6 +179,14 @@ public class PowerManagerService extends IPowerManager.Stub
private int mScreenOffReason; private int mScreenOffReason;
private int mUserState; private int mUserState;
private boolean mKeyboardVisible = false; private boolean mKeyboardVisible = false;
private boolean mHardwareKeyboardVisible() { return mContext.getResources().getConfiguration().hardKeyboardHidden == Configuration.HARDKEYBOARDHIDDEN_NO; }
private boolean mAutoBrightnessToggledOn() {
try {
return Settings.System.getInt(mContext.getContentResolver(), "screen_brightness_mode") == SCREEN_BRIGHTNESS_MODE_AUTOMATIC;
} catch (SettingNotFoundException snfe) {
return false;
}
}
private boolean mUserActivityAllowed = true; private boolean mUserActivityAllowed = true;
private int mProximityWakeLockCount = 0; private int mProximityWakeLockCount = 0;
private boolean mProximitySensorEnabled = false; private boolean mProximitySensorEnabled = false;
Expand Down Expand Up @@ -851,7 +860,7 @@ public void acquireWakeLockLocked(int flags, IBinder lock, int uid, int pid, Str
switch (wl.flags & LOCK_MASK) switch (wl.flags & LOCK_MASK)
{ {
case PowerManager.FULL_WAKE_LOCK: case PowerManager.FULL_WAKE_LOCK:
if (mAutoBrightnessButtonKeyboard) { if (mAutoBrightnessToggledOn()) {
wl.minState = SCREEN_BRIGHT; wl.minState = SCREEN_BRIGHT;
} else { } else {
wl.minState = (mKeyboardVisible ? ALL_BRIGHT : SCREEN_BUTTON_BRIGHT); wl.minState = (mKeyboardVisible ? ALL_BRIGHT : SCREEN_BUTTON_BRIGHT);
Expand Down Expand Up @@ -1681,8 +1690,8 @@ public void setButtonBrightnessOverride(int brightness) {
synchronized (mLocks) { synchronized (mLocks) {
if (mButtonBrightnessOverride != brightness) { if (mButtonBrightnessOverride != brightness) {
mButtonBrightnessOverride = brightness; mButtonBrightnessOverride = brightness;
if (isScreenOn()) { if (isScreenOn() && brightness >= 0) {
updateLightsLocked(mPowerState, BUTTON_BRIGHT_BIT | KEYBOARD_BRIGHT_BIT); updateLightsLocked(mPowerState, (mHardwareKeyboardVisible() ? SCREEN_BUTTON_BRIGHT : LIGHTS_MASK));
} }
} }
} }
Expand Down Expand Up @@ -1807,7 +1816,7 @@ private void setPowerState(int newState, boolean noChangeLights, int reason)
return; return;
} }


if (!mBootCompleted && !mAutoBrightnessButtonKeyboard) { if (!mBootCompleted && !mUseSoftwareAutoBrightness) {
newState |= ALL_BRIGHT; newState |= ALL_BRIGHT;
} }


Expand Down Expand Up @@ -2320,9 +2329,13 @@ private int applyButtonState(int state) {
} }
if (mButtonBrightnessOverride >= 0) { if (mButtonBrightnessOverride >= 0) {
brightness = mButtonBrightnessOverride; brightness = mButtonBrightnessOverride;
} else if (mLightSensorButtonBrightness >= 0 && mAutoBrightnessButtonKeyboard) { } else if (!mAutoBrightnessToggledOn()) {
// Light sensor is not on, mLightSensorButtonBrightness has not been cleared
brightness = getPreferredBrightness();
} else if (mLightSensorButtonBrightness >= 0 && mUseSoftwareAutoBrightness) {
brightness = mLightSensorButtonBrightness; brightness = mLightSensorButtonBrightness;
} }
Slog.d(TAG, "applyButtonState brightness:" + brightness + " mButtonBrightnessOverride:" + mButtonBrightnessOverride + " mLightSensorButtonBrightness:" + mLightSensorButtonBrightness);
if (brightness > 0) { if (brightness > 0) {
return state | BUTTON_BRIGHT_BIT; return state | BUTTON_BRIGHT_BIT;
} else if (brightness == 0) { } else if (brightness == 0) {
Expand All @@ -2342,9 +2355,13 @@ private int applyKeyboardState(int state) {
brightness = 0; brightness = 0;
} else if (mButtonBrightnessOverride >= 0) { } else if (mButtonBrightnessOverride >= 0) {
brightness = mButtonBrightnessOverride; brightness = mButtonBrightnessOverride;
} else if (mLightSensorKeyboardBrightness >= 0 && mAutoBrightnessButtonKeyboard) { } else if (!mAutoBrightnessToggledOn() && mHardwareKeyboardVisible()) {
// Light sensor is not on, mLightSensorButtonBrightness has not been cleared
brightness = getPreferredBrightness();
} else if (mLightSensorKeyboardBrightness >= 0 && mUseSoftwareAutoBrightness) {
brightness = mLightSensorKeyboardBrightness; brightness = mLightSensorKeyboardBrightness;
} }
Slog.d(TAG, "applyKeyboardState brightness:" + brightness + " mButtonBrightnessOverride:" + mButtonBrightnessOverride + " mLightSensorKeyboardBrightness:" + mLightSensorKeyboardBrightness);
if (brightness > 0) { if (brightness > 0) {
return state | KEYBOARD_BRIGHT_BIT; return state | KEYBOARD_BRIGHT_BIT;
} else if (brightness == 0) { } else if (brightness == 0) {
Expand Down Expand Up @@ -2465,12 +2482,10 @@ private void userActivity(long time, long timeoutOverride, boolean noChangeLight
if (mLastEventTime <= time || force) { if (mLastEventTime <= time || force) {
mLastEventTime = time; mLastEventTime = time;
if ((mUserActivityAllowed && !mProximitySensorActive) || force) { if ((mUserActivityAllowed && !mProximitySensorActive) || force) {
if (!mAutoBrightnessButtonKeyboard) { // Only turn on button backlights if a button was pressed
// Turn on button (and keyboard) backlights on any event, so that they // and auto brightness is disabled
// don't suddenly disappear when the lock screen is unlocked (OTHER_EVENT), if (eventType == BUTTON_EVENT && mAutoBrightnessToggledOn()) {
// and so capacitive buttons can be found on devices where they lack mUserState = (mHardwareKeyboardVisible() ? ALL_BRIGHT : SCREEN_BUTTON_BRIGHT);
// identifying surface features.
mUserState = (mKeyboardVisible ? ALL_BRIGHT : SCREEN_BUTTON_BRIGHT);
} else { } else {
// don't clear button/keyboard backlights when the screen is touched. // don't clear button/keyboard backlights when the screen is touched.
mUserState |= SCREEN_BRIGHT; mUserState |= SCREEN_BRIGHT;
Expand Down Expand Up @@ -2897,17 +2912,28 @@ public void setKeyboardVisibility(boolean visible) {
// will take care of turning on due to a true change to the lid // will take care of turning on due to a true change to the lid
// switch and synchronized with the lock screen. // switch and synchronized with the lock screen.
if ((mPowerState & SCREEN_ON_BIT) != 0) { if ((mPowerState & SCREEN_ON_BIT) != 0) {
Slog.w(TAG, "mKeyboardVisible:" + mKeyboardVisible + " mAutoBrightnessToggledOn:" + mAutoBrightnessToggledOn() + " mUseSoftwareAutoBrightness:" + mUseSoftwareAutoBrightness + " mLightSensorValue:" + mLightSensorValue + " mHardwareKeyboardVisible():" + mHardwareKeyboardVisible());
if (mUseSoftwareAutoBrightness) { if (mUseSoftwareAutoBrightness) {
// force recompute of backlight values // force recompute of backlight values
if (mLightSensorValue >= 0) { if (mLightSensorValue >= 0) {
int value = (int)mLightSensorValue; int value = (int)mLightSensorValue;
mLightSensorValue = -1; mLightSensorValue = -1;
lightSensorChangedLocked(value); lightSensorChangedLocked(value);
lightFilterReset((int)mLightSensorValue); lightFilterReset((int)mLightSensorValue);
} else {
int preferredBrightness = getPreferredBrightness();
Slog.d(TAG, "mButtonBrightnessOverride:" + preferredBrightness);
// mLightSensorValue is not active, use preferredBrightness instead
if (preferredBrightness > 0) {
setButtonBrightnessOverride(preferredBrightness);
}
} }
} }
userActivity(SystemClock.uptimeMillis(), false, BUTTON_EVENT, true); userActivity(SystemClock.uptimeMillis(), false, BUTTON_EVENT, true);
} }
else if (mHardwareKeyboardVisible()) {
mKeyboardLight.turnOff();
}
} }
} }
} }
Expand Down Expand Up @@ -3231,7 +3257,7 @@ void systemReady() {
// wait until sensors are enabled before turning on screen. // wait until sensors are enabled before turning on screen.
// some devices will not activate the light sensor properly on boot // some devices will not activate the light sensor properly on boot
// unless we do this. // unless we do this.
if (mAutoBrightnessButtonKeyboard) { if (mAutoBrightnessToggledOn()) {
// turn the screen on // turn the screen on
setPowerState(SCREEN_BRIGHT); setPowerState(SCREEN_BRIGHT);
} else { } else {
Expand Down

0 comments on commit 07bb1e4

Please sign in to comment.