From 951764b97010dfa073126f52b43ea1bdf1b35998 Mon Sep 17 00:00:00 2001 From: Dan Murphy Date: Thu, 27 Aug 2009 14:59:03 -0500 Subject: [PATCH] Add automatic lighting control framework Add changes to have the ability to turn on and off the automatic light sensing for the device. This is fully configurable and is by default not present. Vendors should override the ALS setting to enable the automatic lighting controls. These changes will add a check box to the Brightness settings menu to give control to the user to allow the device's display lighting to be controlled via the slide bar or the auto lighting system. If the user selects auto then the slide bar will become invisible. Manual mode will present the slide bar to the user. Change-Id: I146a6d75b99b08c9b839218ce6b85adf21f9fd73 Signed-off-by: Dan Murphy Signed-off-by: Mike Lockwood --- core/java/android/os/IHardwareService.aidl | 3 +++ core/java/android/provider/Settings.java | 6 ++++++ core/res/res/values/config.xml | 2 ++ packages/SettingsProvider/res/values/defaults.xml | 1 + .../android/providers/settings/DatabaseHelper.java | 21 ++++++++++++++++++++- .../java/com/android/server/HardwareService.java | 20 ++++++++++++++++++++ .../com/android/server/PowerManagerService.java | 7 ++++++- services/jni/com_android_server_HardwareService.cpp | 13 +++++++++++++ 8 files changed, 71 insertions(+), 2 deletions(-) diff --git a/core/java/android/os/IHardwareService.aidl b/core/java/android/os/IHardwareService.aidl index aebcb3c049fc..a6ef64739434 100755 --- a/core/java/android/os/IHardwareService.aidl +++ b/core/java/android/os/IHardwareService.aidl @@ -32,6 +32,9 @@ interface IHardwareService // sets the brightness of the backlights (screen, keyboard, button) 0-255 void setBacklights(int brightness); + // enables or disables automatic brightness mode + void setAutoBrightness(boolean on); + // for the phone void setAttentionLight(boolean on); } diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java index 688f37720541..0bbd1fc57f20 100644 --- a/core/java/android/provider/Settings.java +++ b/core/java/android/provider/Settings.java @@ -1061,6 +1061,12 @@ public final class Settings { public static final String SCREEN_BRIGHTNESS = "screen_brightness"; /** + * Control whether to enable automatic brightness mode. + * @hide + */ + public static final String SCREEN_BRIGHTNESS_MODE = "screen_brightness_mode"; + + /** * Control whether the process CPU usage meter should be shown. */ public static final String SHOW_PROCESSES = "show_processes"; diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml index abb575c7d9d0..117e1398e6ea 100644 --- a/core/res/res/values/config.xml +++ b/core/res/res/values/config.xml @@ -81,4 +81,6 @@ 30 + + false diff --git a/packages/SettingsProvider/res/values/defaults.xml b/packages/SettingsProvider/res/values/defaults.xml index 6b2044590e43..d5f1c614192f 100644 --- a/packages/SettingsProvider/res/values/defaults.xml +++ b/packages/SettingsProvider/res/values/defaults.xml @@ -27,6 +27,7 @@ true 102 + false 100% 0% diff --git a/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java b/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java index 2524a305b973..f99eb5859d68 100644 --- a/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java +++ b/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java @@ -71,7 +71,7 @@ public class DatabaseHelper extends SQLiteOpenHelper { // database gets upgraded properly. At a minimum, please confirm that 'upgradeVersion' // is properly propagated through your change. Not doing so will result in a loss of user // settings. - private static final int DATABASE_VERSION = 39; + private static final int DATABASE_VERSION = 40; private Context mContext; @@ -465,6 +465,22 @@ public class DatabaseHelper extends SQLiteOpenHelper { upgradeVersion = 39; } + if (upgradeVersion == 39) { + db.beginTransaction(); + try { + String value = + mContext.getResources().getBoolean( + R.bool.def_screen_brightness_automatic_mode) ? "1" : "0"; + db.execSQL("INSERT OR IGNORE INTO system(name,value) values('" + + Settings.System.SCREEN_BRIGHTNESS_MODE + "','" + value + "');"); + db.setTransactionSuccessful(); + } finally { + db.endTransaction(); + } + + upgradeVersion = 40; + } + if (upgradeVersion != currentVersion) { Log.w(TAG, "Got stuck trying to upgrade from version " + upgradeVersion + ", must wipe the settings provider"); @@ -701,6 +717,9 @@ public class DatabaseHelper extends SQLiteOpenHelper { loadIntegerSetting(stmt, Settings.System.SCREEN_BRIGHTNESS, R.integer.def_screen_brightness); + loadBooleanSetting(stmt, Settings.System.SCREEN_BRIGHTNESS_MODE, + R.bool.def_screen_brightness_automatic_mode); + loadDefaultAnimationSettings(stmt); loadBooleanSetting(stmt, Settings.System.ACCELEROMETER_ROTATION, diff --git a/services/java/com/android/server/HardwareService.java b/services/java/com/android/server/HardwareService.java index 6ac72e0d57c8..01daae344197 100755 --- a/services/java/com/android/server/HardwareService.java +++ b/services/java/com/android/server/HardwareService.java @@ -59,6 +59,8 @@ public class HardwareService extends IHardwareService.Stub { private boolean mAttentionLightOn; private boolean mPulsing; + private boolean mAutoBrightnessAvailable; + private class Vibration implements IBinder.DeathRecipient { private final IBinder mToken; private final long mTimeout; @@ -129,6 +131,9 @@ public class HardwareService extends IHardwareService.Stub { IntentFilter filter = new IntentFilter(); filter.addAction(Intent.ACTION_SCREEN_OFF); context.registerReceiver(mIntentReceiver, filter); + + mAutoBrightnessAvailable = context.getResources().getBoolean( + com.android.internal.R.bool.config_automatic_brightness_available); } protected void finalize() throws Throwable { @@ -302,6 +307,20 @@ public class HardwareService extends IHardwareService.Stub { setLight_native(mNativePointer, light, color, mode, onMS, offMS); } + public void setAutoBrightness(boolean on) { + if (mContext.checkCallingOrSelfPermission(android.Manifest.permission.HARDWARE_TEST) + != PackageManager.PERMISSION_GRANTED) { + throw new SecurityException("Requires HARDWARE_TEST permission"); + } + setAutoBrightness_UNCHECKED(on); + } + + void setAutoBrightness_UNCHECKED(boolean on) { + if (mAutoBrightnessAvailable) { + setAutoBrightness_native(mNativePointer, on); + } + } + public void setAttentionLight(boolean on) { // Not worthy of a permission. We shouldn't have a flashlight permission. synchronized (this) { @@ -502,6 +521,7 @@ public class HardwareService extends IHardwareService.Stub { private static native int init_native(); private static native void finalize_native(int ptr); + private static native void setAutoBrightness_native(int ptr, boolean automatic); private static native void setLight_native(int ptr, int light, int color, int mode, int onMS, int offMS); diff --git a/services/java/com/android/server/PowerManagerService.java b/services/java/com/android/server/PowerManagerService.java index ba65f01ef686..e64a1def0f36 100644 --- a/services/java/com/android/server/PowerManagerService.java +++ b/services/java/com/android/server/PowerManagerService.java @@ -52,6 +52,7 @@ import android.util.Log; import android.view.WindowManagerPolicy; import static android.provider.Settings.System.DIM_SCREEN; import static android.provider.Settings.System.SCREEN_BRIGHTNESS; +import static android.provider.Settings.System.SCREEN_BRIGHTNESS_MODE; import static android.provider.Settings.System.SCREEN_OFF_TIMEOUT; import static android.provider.Settings.System.STAY_ON_WHILE_PLUGGED_IN; @@ -442,7 +443,11 @@ class PowerManagerService extends IPowerManager.Stub // turn everything on setPowerState(ALL_BRIGHT); - + + // set auto brightness mode to user setting + boolean brightnessMode = Settings.System.getInt(resolver, SCREEN_BRIGHTNESS_MODE, 1) != 0; + mHardware.setAutoBrightness_UNCHECKED(brightnessMode); + synchronized (mHandlerThread) { mInitComplete = true; mHandlerThread.notifyAll(); diff --git a/services/jni/com_android_server_HardwareService.cpp b/services/jni/com_android_server_HardwareService.cpp index 22d4bd8766e8..a17e29fbf60d 100644 --- a/services/jni/com_android_server_HardwareService.cpp +++ b/services/jni/com_android_server_HardwareService.cpp @@ -100,6 +100,18 @@ static void finalize_native(JNIEnv *env, jobject clazz, int ptr) free(devices); } +static void setAutoBrightness_native(JNIEnv *env, jobject clazz, int ptr, + jboolean automatic) +{ + Devices* devices = (Devices*)ptr; + + if (devices->lights[LIGHT_INDEX_BACKLIGHT] == NULL) { + return; + } + + devices->lights[LIGHT_INDEX_BACKLIGHT]->set_als_mode(automatic ? 0 : 1); +} + static void setLight_native(JNIEnv *env, jobject clazz, int ptr, int light, int colorARGB, int flashMode, int onMS, int offMS) { @@ -134,6 +146,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 }, + { "setAutoBrightness_native", "(IZ)V", (void*)setAutoBrightness_native }, { "setLight_native", "(IIIIII)V", (void*)setLight_native }, { "vibratorOn", "(J)V", (void*)vibratorOn }, { "vibratorOff", "()V", (void*)vibratorOff } -- 2.11.0