Use separate flags for enabling hardware and software auto-brightness.

This cleans up the code in preparation for some other auto-brightness changes
and fixes support for devices without light sensors.

Change-Id: I3d4802cf860a865ffd86a8bb57cd57b46359433d
Signed-off-by: Mike Lockwood <lockwood@android.com>
diff --git a/services/java/com/android/server/PowerManagerService.java b/services/java/com/android/server/PowerManagerService.java
index 4bf606d..be1e8a5 100644
--- a/services/java/com/android/server/PowerManagerService.java
+++ b/services/java/com/android/server/PowerManagerService.java
@@ -211,7 +211,8 @@
     private long mScreenOnStartTime;
     private boolean mPreventScreenOn;
     private int mScreenBrightnessOverride = -1;
-    private boolean mHasHardwareAutoBrightness;
+    private boolean mUseSoftwareAutoBrightness;
+    private boolean mUseHardwareAutoBrightness;
     private boolean mAutoBrightessEnabled;
     private int[] mAutoBrightnessLevels;
     private int[] mLcdBacklightValues;
@@ -438,9 +439,16 @@
         mScreenOffIntent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY);
 
         Resources resources = mContext.getResources();
-        mHasHardwareAutoBrightness = resources.getBoolean(
+
+        // read settings for auto-brightness
+        mUseSoftwareAutoBrightness = resources.getBoolean(
+                com.android.internal.R.bool.config_automatic_brightness_available);
+        mUseHardwareAutoBrightness = resources.getBoolean(
                 com.android.internal.R.bool.config_hardware_automatic_brightness_available);
-        if (!mHasHardwareAutoBrightness) {
+        if (mUseHardwareAutoBrightness) {
+            mUseSoftwareAutoBrightness = false;
+        }
+        if (mUseSoftwareAutoBrightness) {
             mAutoBrightnessLevels = resources.getIntArray(
                     com.android.internal.R.array.config_autoBrightnessLevels);
             mLcdBacklightValues = resources.getIntArray(
@@ -479,7 +487,7 @@
         // And explicitly do the initial update of our cached settings
         updateGservicesValues();
 
-        if (mAutoBrightessEnabled && !mHasHardwareAutoBrightness) {
+        if (mUseSoftwareAutoBrightness && mAutoBrightessEnabled) {
             // turn the screen on
             setPowerState(SCREEN_BRIGHT);
         } else {
@@ -581,7 +589,7 @@
             switch (wl.flags & LOCK_MASK)
             {
                 case PowerManager.FULL_WAKE_LOCK:
-                    if (mAutoBrightessEnabled && !mHasHardwareAutoBrightness) {
+                    if (mAutoBrightessEnabled && mUseSoftwareAutoBrightness) {
                         wl.minState = SCREEN_BRIGHT;
                     } else {
                         wl.minState = (mKeyboardVisible ? ALL_BRIGHT : SCREEN_BUTTON_BRIGHT);
@@ -887,7 +895,8 @@
         pw.println("  mLightSensorEnabled=" + mLightSensorEnabled);
         pw.println("  mLightSensorValue=" + mLightSensorValue);
         pw.println("  mLightSensorPendingValue=" + mLightSensorPendingValue);
-        pw.println("  mHasHardwareAutoBrightness=" + mHasHardwareAutoBrightness);
+        pw.println("  mUseHardwareAutoBrightness=" + mUseHardwareAutoBrightness);
+        pw.println("  mUseSoftwareAutoBrightness=" + mUseSoftwareAutoBrightness);
         pw.println("  mAutoBrightessEnabled=" + mAutoBrightessEnabled);
         mScreenBrightness.dump(pw, "  mScreenBrightness: ");
         mKeyboardBrightness.dump(pw, "  mKeyboardBrightness: ");
@@ -1290,7 +1299,7 @@
 
     private int setScreenStateLocked(boolean on) {
         int err = Power.setScreenState(on);
-        if (err == 0 && !mHasHardwareAutoBrightness) {
+        if (err == 0 && mUseSoftwareAutoBrightness) {
             enableLightSensor(on && mAutoBrightessEnabled);
             if (!on) {
                 // make sure button and key backlights are off too
@@ -1337,7 +1346,7 @@
                 return;
             }
 
-            if (!mDoneBooting && !(mAutoBrightessEnabled && !mHasHardwareAutoBrightness)) {
+            if (!mDoneBooting && !(mAutoBrightessEnabled && mUseSoftwareAutoBrightness)) {
                 newState |= ALL_BRIGHT;
             }
 
@@ -1758,7 +1767,7 @@
         try {
             if (mScreenBrightnessOverride >= 0) {
                 return mScreenBrightnessOverride;
-            } else if (mLightSensorBrightness >= 0 && !mHasHardwareAutoBrightness) {
+            } else if (mLightSensorBrightness >= 0 && mUseSoftwareAutoBrightness) {
                 return mLightSensorBrightness;
             }
             final int brightness = Settings.System.getInt(mContext.getContentResolver(),
@@ -1850,7 +1859,7 @@
                     // Only turn on button backlights if a button was pressed
                     // and auto brightness is disabled
                     if (eventType == BUTTON_EVENT &&
-                            !(mAutoBrightessEnabled && !mHasHardwareAutoBrightness)) {
+                            !(mAutoBrightessEnabled && mUseSoftwareAutoBrightness)) {
                         mUserState = (mKeyboardVisible ? ALL_BRIGHT : SCREEN_BUTTON_BRIGHT);
                     } else {
                         // don't clear button/keyboard backlights when the screen is touched.
@@ -1908,8 +1917,6 @@
             Log.d(TAG, "lightSensorChangedLocked " + value);
         }
 
-        if (mHasHardwareAutoBrightness) return;
-
         if (mLightSensorValue != value) {
             mLightSensorValue = value;
             if ((mPowerState & BATTERY_LOW_BIT) == 0) {
@@ -2057,17 +2064,17 @@
         boolean enabled = (mode == SCREEN_BRIGHTNESS_MODE_AUTOMATIC);
         if (mAutoBrightessEnabled != enabled) {
             mAutoBrightessEnabled = enabled;
-            // reset computed brightness
-            mLightSensorValue = -1;
-            mLightSensorBrightness = -1;
 
-            if (mHasHardwareAutoBrightness) {
+            if (mUseHardwareAutoBrightness) {
                 // When setting auto-brightness, must reset the brightness afterwards
                 mHardware.setAutoBrightness_UNCHECKED(enabled);
                 if (screenIsOn()) {
                     setBacklightBrightness((int)mScreenBrightness.curValue);
                 }
-            } else {
+            } else if (mUseSoftwareAutoBrightness) {
+                // reset computed brightness
+                mLightSensorValue = -1;
+                mLightSensorBrightness = -1;
                 enableLightSensor(screenIsOn() && enabled);
             }
         }
@@ -2222,7 +2229,7 @@
         mSensorManager = new SensorManager(mHandlerThread.getLooper());
         mProximitySensor = mSensorManager.getDefaultSensor(Sensor.TYPE_PROXIMITY);
         // don't bother with the light sensor if auto brightness is handled in hardware
-        if (!mHasHardwareAutoBrightness) {
+        if (mUseSoftwareAutoBrightness) {
             mLightSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_LIGHT);
             enableLightSensor(mAutoBrightessEnabled);
         }