diff options
| -rwxr-xr-x | services/java/com/android/server/HardwareService.java | 28 | ||||
| -rw-r--r-- | services/java/com/android/server/PowerManagerService.java | 47 | ||||
| -rw-r--r-- | services/jni/com_android_server_HardwareService.cpp | 5 |
3 files changed, 58 insertions, 22 deletions
diff --git a/services/java/com/android/server/HardwareService.java b/services/java/com/android/server/HardwareService.java index 3e3cf065bedb..88074c2c59ea 100755 --- a/services/java/com/android/server/HardwareService.java +++ b/services/java/com/android/server/HardwareService.java @@ -54,6 +54,16 @@ public class HardwareService extends IHardwareService.Stub { static final int LIGHT_FLASH_TIMED = 1; static final int LIGHT_FLASH_HARDWARE = 2; + /** + * Light brightness is managed by a user setting. + */ + static final int BRIGHTNESS_MODE_USER = 0; + + /** + * Light brightness is managed by a light sensor. + */ + static final int BRIGHTNESS_MODE_SENSOR = 1; + private final LinkedList<Vibration> mVibrations; private Vibration mCurrentVibration; @@ -266,21 +276,21 @@ public class HardwareService extends IHardwareService.Stub { } void setLightOff_UNCHECKED(int light) { - setLight_native(mNativePointer, light, 0, LIGHT_FLASH_NONE, 0, 0); + setLight_native(mNativePointer, light, 0, LIGHT_FLASH_NONE, 0, 0, 0); } - void setLightBrightness_UNCHECKED(int light, int brightness) { + void setLightBrightness_UNCHECKED(int light, int brightness, int brightnessMode) { int b = brightness & 0x000000ff; b = 0xff000000 | (b << 16) | (b << 8) | b; - setLight_native(mNativePointer, light, b, LIGHT_FLASH_NONE, 0, 0); + setLight_native(mNativePointer, light, b, LIGHT_FLASH_NONE, 0, 0, brightnessMode); } void setLightColor_UNCHECKED(int light, int color) { - setLight_native(mNativePointer, light, color, LIGHT_FLASH_NONE, 0, 0); + setLight_native(mNativePointer, light, color, LIGHT_FLASH_NONE, 0, 0, 0); } void setLightFlashing_UNCHECKED(int light, int color, int mode, int onMS, int offMS) { - setLight_native(mNativePointer, light, color, mode, onMS, offMS); + setLight_native(mNativePointer, light, color, mode, onMS, offMS, 0); } public void setAttentionLight(boolean on, int color) { @@ -289,7 +299,7 @@ public class HardwareService extends IHardwareService.Stub { mAttentionLightOn = on; mPulsing = false; setLight_native(mNativePointer, LIGHT_ID_ATTENTION, color, - LIGHT_FLASH_HARDWARE, on ? 3 : 0, 0); + LIGHT_FLASH_HARDWARE, on ? 3 : 0, 0, 0); } } @@ -304,7 +314,7 @@ public class HardwareService extends IHardwareService.Stub { if (!mAttentionLightOn && !mPulsing) { mPulsing = true; setLight_native(mNativePointer, LIGHT_ID_ATTENTION, 0x00ffffff, - LIGHT_FLASH_HARDWARE, 7, 0); + LIGHT_FLASH_HARDWARE, 7, 0, 0); mH.sendMessageDelayed(Message.obtain(mH, 1), 3000); } } @@ -321,7 +331,7 @@ public class HardwareService extends IHardwareService.Stub { mPulsing = false; setLight_native(mNativePointer, LIGHT_ID_ATTENTION, mAttentionLightOn ? 0xffffffff : 0, - LIGHT_FLASH_NONE, 0, 0); + LIGHT_FLASH_NONE, 0, 0, 0); } } } @@ -484,7 +494,7 @@ public class HardwareService extends IHardwareService.Stub { private static native void finalize_native(int ptr); private static native void setLight_native(int ptr, int light, int color, int mode, - int onMS, int offMS); + int onMS, int offMS, int brightnessMode); private final Context mContext; private final PowerManager.WakeLock mWakeLock; diff --git a/services/java/com/android/server/PowerManagerService.java b/services/java/com/android/server/PowerManagerService.java index 3000e9d4e4ee..e1425d444c34 100644 --- a/services/java/com/android/server/PowerManagerService.java +++ b/services/java/com/android/server/PowerManagerService.java @@ -1324,8 +1324,13 @@ class PowerManagerService extends IPowerManager.Stub enableLightSensor(on); if (!on) { // make sure button and key backlights are off too - mHardware.setLightBrightness_UNCHECKED(HardwareService.LIGHT_ID_BUTTONS, 0); - mHardware.setLightBrightness_UNCHECKED(HardwareService.LIGHT_ID_KEYBOARD, 0); + int brightnessMode = (mUseSoftwareAutoBrightness + ? HardwareService.BRIGHTNESS_MODE_SENSOR + : HardwareService.BRIGHTNESS_MODE_USER); + mHardware.setLightBrightness_UNCHECKED(HardwareService.LIGHT_ID_BUTTONS, 0, + brightnessMode); + mHardware.setLightBrightness_UNCHECKED(HardwareService.LIGHT_ID_KEYBOARD, 0, + brightnessMode); // clear current value so we will update based on the new conditions // when the sensor is reenabled. mLightSensorValue = -1; @@ -1680,14 +1685,23 @@ class PowerManagerService extends IPowerManager.Stub } private void setLightBrightness(int mask, int value) { + int brightnessMode = (mAutoBrightessEnabled + ? HardwareService.BRIGHTNESS_MODE_SENSOR + : HardwareService.BRIGHTNESS_MODE_USER); if ((mask & SCREEN_BRIGHT_BIT) != 0) { - mHardware.setLightBrightness_UNCHECKED(HardwareService.LIGHT_ID_BACKLIGHT, value); + mHardware.setLightBrightness_UNCHECKED(HardwareService.LIGHT_ID_BACKLIGHT, value, + brightnessMode); } + brightnessMode = (mUseSoftwareAutoBrightness + ? HardwareService.BRIGHTNESS_MODE_SENSOR + : HardwareService.BRIGHTNESS_MODE_USER); if ((mask & BUTTON_BRIGHT_BIT) != 0) { - mHardware.setLightBrightness_UNCHECKED(HardwareService.LIGHT_ID_BUTTONS, value); + mHardware.setLightBrightness_UNCHECKED(HardwareService.LIGHT_ID_BUTTONS, value, + brightnessMode); } if ((mask & KEYBOARD_BRIGHT_BIT) != 0) { - mHardware.setLightBrightness_UNCHECKED(HardwareService.LIGHT_ID_KEYBOARD, value); + mHardware.setLightBrightness_UNCHECKED(HardwareService.LIGHT_ID_KEYBOARD, value, + brightnessMode); } } @@ -1986,8 +2000,11 @@ class PowerManagerService extends IPowerManager.Stub startAnimation = true; } } else { + int brightnessMode = (mAutoBrightessEnabled + ? HardwareService.BRIGHTNESS_MODE_SENSOR + : HardwareService.BRIGHTNESS_MODE_USER); mHardware.setLightBrightness_UNCHECKED(HardwareService.LIGHT_ID_BACKLIGHT, - lcdValue); + lcdValue, brightnessMode); } } if (ANIMATE_BUTTON_LIGHTS) { @@ -1997,8 +2014,11 @@ class PowerManagerService extends IPowerManager.Stub startAnimation = true; } } else { + int brightnessMode = (mUseSoftwareAutoBrightness + ? HardwareService.BRIGHTNESS_MODE_SENSOR + : HardwareService.BRIGHTNESS_MODE_USER); mHardware.setLightBrightness_UNCHECKED(HardwareService.LIGHT_ID_BUTTONS, - buttonValue); + buttonValue, brightnessMode); } if (ANIMATE_KEYBOARD_LIGHTS) { if (mKeyboardBrightness.setTargetLocked(keyboardValue, @@ -2007,8 +2027,11 @@ class PowerManagerService extends IPowerManager.Stub startAnimation = true; } } else { + int brightnessMode = (mUseSoftwareAutoBrightness + ? HardwareService.BRIGHTNESS_MODE_SENSOR + : HardwareService.BRIGHTNESS_MODE_USER); mHardware.setLightBrightness_UNCHECKED(HardwareService.LIGHT_ID_KEYBOARD, - keyboardValue); + keyboardValue, brightnessMode); } if (startAnimation) { if (mDebugLightSensor) { @@ -2329,10 +2352,12 @@ class PowerManagerService extends IPowerManager.Stub mContext.enforceCallingOrSelfPermission(android.Manifest.permission.DEVICE_POWER, null); // Don't let applications turn the screen all the way off brightness = Math.max(brightness, Power.BRIGHTNESS_DIM); - mHardware.setLightBrightness_UNCHECKED(HardwareService.LIGHT_ID_BACKLIGHT, brightness); + mHardware.setLightBrightness_UNCHECKED(HardwareService.LIGHT_ID_BACKLIGHT, brightness, + HardwareService.BRIGHTNESS_MODE_USER); mHardware.setLightBrightness_UNCHECKED(HardwareService.LIGHT_ID_KEYBOARD, - (mKeyboardVisible ? brightness : 0)); - mHardware.setLightBrightness_UNCHECKED(HardwareService.LIGHT_ID_BUTTONS, brightness); + (mKeyboardVisible ? brightness : 0), HardwareService.BRIGHTNESS_MODE_USER); + mHardware.setLightBrightness_UNCHECKED(HardwareService.LIGHT_ID_BUTTONS, brightness, + HardwareService.BRIGHTNESS_MODE_USER); long identity = Binder.clearCallingIdentity(); try { mBatteryStats.noteScreenBrightness(brightness); diff --git a/services/jni/com_android_server_HardwareService.cpp b/services/jni/com_android_server_HardwareService.cpp index 22d4bd8766e8..253e6558de36 100644 --- a/services/jni/com_android_server_HardwareService.cpp +++ b/services/jni/com_android_server_HardwareService.cpp @@ -101,7 +101,7 @@ static void finalize_native(JNIEnv *env, jobject clazz, int ptr) } static void setLight_native(JNIEnv *env, jobject clazz, int ptr, - int light, int colorARGB, int flashMode, int onMS, int offMS) + int light, int colorARGB, int flashMode, int onMS, int offMS, int brightnessMode) { Devices* devices = (Devices*)ptr; light_state_t state; @@ -115,6 +115,7 @@ static void setLight_native(JNIEnv *env, jobject clazz, int ptr, state.flashMode = flashMode; state.flashOnMS = onMS; state.flashOffMS = offMS; + state.brightnessMode = brightnessMode; devices->lights[light]->set_light(devices->lights[light], &state); } @@ -134,7 +135,7 @@ static void vibratorOff(JNIEnv *env, jobject clazz) static JNINativeMethod method_table[] = { { "init_native", "()I", (void*)init_native }, { "finalize_native", "(I)V", (void*)finalize_native }, - { "setLight_native", "(IIIIII)V", (void*)setLight_native }, + { "setLight_native", "(IIIIIII)V", (void*)setLight_native }, { "vibratorOn", "(J)V", (void*)vibratorOn }, { "vibratorOff", "()V", (void*)vibratorOff } }; |