Add auto-brightness mode to the list of backed-up settings

Change-Id: I4302b79691ed717d810748b239311cba198f6381
diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java
index e3fc72d..2b6313d 100644
--- a/core/java/android/provider/Settings.java
+++ b/core/java/android/provider/Settings.java
@@ -1416,6 +1416,7 @@
             DIM_SCREEN,
             SCREEN_OFF_TIMEOUT,
             SCREEN_BRIGHTNESS,
+            SCREEN_BRIGHTNESS_MODE,
             VIBRATE_ON,
             NOTIFICATIONS_USE_RING_VOLUME,
             MODE_RINGER,
diff --git a/packages/SettingsProvider/src/com/android/providers/settings/SettingsHelper.java b/packages/SettingsProvider/src/com/android/providers/settings/SettingsHelper.java
index 77da8f1..3b91a38 100644
--- a/packages/SettingsProvider/src/com/android/providers/settings/SettingsHelper.java
+++ b/packages/SettingsProvider/src/com/android/providers/settings/SettingsHelper.java
@@ -40,16 +40,23 @@
     private Context mContext;
     private AudioManager mAudioManager;
     private IContentService mContentService;
+    private IPowerManager mPowerManager;
     private static final String[] PROVIDERS = { "gmail-ls", "calendar", "contacts" };
 
     private boolean mSilent;
     private boolean mVibrate;
+    private boolean mHasAutoBrightness;
 
     public SettingsHelper(Context context) {
         mContext = context;
         mAudioManager = (AudioManager) context
                 .getSystemService(Context.AUDIO_SERVICE);
         mContentService = ContentResolver.getContentService();
+        mPowerManager = IPowerManager.Stub.asInterface(
+                ServiceManager.getService("power"));
+
+        mHasAutoBrightness = context.getResources().getBoolean(
+                com.android.internal.R.bool.config_automatic_brightness_available);
     }
 
     /**
@@ -64,6 +71,18 @@
     public boolean restoreValue(String name, String value) {
         if (Settings.System.SCREEN_BRIGHTNESS.equals(name)) {
             setBrightness(Integer.parseInt(value));
+        } else if (Settings.System.SCREEN_BRIGHTNESS_MODE.equals(name)) {
+            if (mHasAutoBrightness) {
+                // When setting auto-brightness, must reset the brightness afterwards
+                try {
+                    int curBrightness = Settings.System.getInt(mContext.getContentResolver(),
+                            Settings.System.SCREEN_BRIGHTNESS);
+                    setAutoBrightness(Integer.parseInt(value) != 0);
+                    setBrightness(curBrightness);
+                } catch (Settings.SettingNotFoundException e) {
+                    // no brightness setting at all?  weird.  skip this then.
+                }
+            }
         } else if (Settings.System.SOUND_EFFECTS_ENABLED.equals(name)) {
             setSoundEffects(Integer.parseInt(value) == 1);
         } else if (Settings.Secure.LOCATION_PROVIDERS_ALLOWED.equals(name)) {
@@ -73,6 +92,16 @@
         return true;
     }
 
+    private void setAutoBrightness(boolean value) {
+        if (mPowerManager != null) {
+            try {
+                mPowerManager.setAutoBrightness(value);
+            } catch (RemoteException e) {
+                // unable to reach the power manager; skip
+            }
+        }
+    }
+
     private void setGpsLocation(String value) {
         final String GPS = LocationManager.GPS_PROVIDER;
         boolean enabled =