diff options
author | Amith Yamasani <yamasani@google.com> | 2011-02-28 17:24:31 -0800 |
---|---|---|
committer | Amith Yamasani <yamasani@google.com> | 2011-02-28 17:27:04 -0800 |
commit | 26a1f898e04ca68dc8d1a58d15e9f901b09c90e2 (patch) | |
tree | 45d36c7fbc8747890cdc735d995020569b8f42be /src/com/android/settings/BrightnessPreference.java | |
parent | e18897bc2242110782fca135e9e47fcdb5839d64 (diff) | |
download | packages_apps_Settings-26a1f898e04ca68dc8d1a58d15e9f901b09c90e2.zip packages_apps_Settings-26a1f898e04ca68dc8d1a58d15e9f901b09c90e2.tar.gz packages_apps_Settings-26a1f898e04ca68dc8d1a58d15e9f901b09c90e2.tar.bz2 |
Track changes to brightness and orientation lock in Settings.
Bug: 3491814
Bug: 3482859
Bug: 3497535
Since the system bar can now change brightness and orientation lock, Settings needs to listen
to changes to those settings and reflect in the UI.
Also fix a problem with restoring state on cancel when the brightness dialog is invoked a
second time.
Change-Id: I3ada6e77df9a6b013a16061877fcb6b55c94a903
Diffstat (limited to 'src/com/android/settings/BrightnessPreference.java')
-rw-r--r-- | src/com/android/settings/BrightnessPreference.java | 89 |
1 files changed, 71 insertions, 18 deletions
diff --git a/src/com/android/settings/BrightnessPreference.java b/src/com/android/settings/BrightnessPreference.java index 00f5deb..9bbb66a 100644 --- a/src/com/android/settings/BrightnessPreference.java +++ b/src/com/android/settings/BrightnessPreference.java @@ -16,25 +16,25 @@ package com.android.settings; +import android.content.ContentResolver; import android.content.Context; +import android.database.ContentObserver; +import android.os.Bundle; +import android.os.Handler; +import android.os.IPowerManager; import android.os.Parcel; import android.os.Parcelable; import android.os.RemoteException; -import android.os.IPowerManager; import android.os.ServiceManager; import android.preference.SeekBarPreference; -import android.preference.Preference.BaseSavedState; import android.provider.Settings; import android.provider.Settings.SettingNotFoundException; import android.util.AttributeSet; -import android.util.Log; import android.view.View; import android.widget.CheckBox; import android.widget.CompoundButton; import android.widget.SeekBar; -import java.util.Map; - public class BrightnessPreference extends SeekBarPreference implements SeekBar.OnSeekBarChangeListener, CheckBox.OnCheckedChangeListener { @@ -53,6 +53,20 @@ public class BrightnessPreference extends SeekBarPreference implements private static final int MINIMUM_BACKLIGHT = android.os.Power.BRIGHTNESS_DIM + 10; private static final int MAXIMUM_BACKLIGHT = android.os.Power.BRIGHTNESS_ON; + private ContentObserver mBrightnessObserver = new ContentObserver(new Handler()) { + @Override + public void onChange(boolean selfChange) { + onBrightnessChanged(); + } + }; + + private ContentObserver mBrightnessModeObserver = new ContentObserver(new Handler()) { + @Override + public void onChange(boolean selfChange) { + onBrightnessModeChanged(); + } + }; + public BrightnessPreference(Context context, AttributeSet attrs) { super(context, attrs); @@ -64,28 +78,32 @@ public class BrightnessPreference extends SeekBarPreference implements } @Override + protected void showDialog(Bundle state) { + super.showDialog(state); + + getContext().getContentResolver().registerContentObserver( + Settings.System.getUriFor(Settings.System.SCREEN_BRIGHTNESS), true, + mBrightnessObserver); + + getContext().getContentResolver().registerContentObserver( + Settings.System.getUriFor(Settings.System.SCREEN_BRIGHTNESS_MODE), true, + mBrightnessModeObserver); + mRestoredOldState = false; + } + + @Override protected void onBindDialogView(View view) { super.onBindDialogView(view); mSeekBar = getSeekBar(view); mSeekBar.setMax(MAXIMUM_BACKLIGHT - MINIMUM_BACKLIGHT); - try { - mOldBrightness = Settings.System.getInt(getContext().getContentResolver(), - Settings.System.SCREEN_BRIGHTNESS); - } catch (SettingNotFoundException snfe) { - mOldBrightness = MAXIMUM_BACKLIGHT; - } + mOldBrightness = getBrightness(0); mSeekBar.setProgress(mOldBrightness - MINIMUM_BACKLIGHT); mCheckBox = (CheckBox)view.findViewById(R.id.automatic_mode); if (mAutomaticAvailable) { mCheckBox.setOnCheckedChangeListener(this); - try { - mOldAutomatic = Settings.System.getInt(getContext().getContentResolver(), - Settings.System.SCREEN_BRIGHTNESS_MODE); - } catch (SettingNotFoundException snfe) { - mOldAutomatic = 0; - } + mOldAutomatic = getBrightnessMode(0); mCheckBox.setChecked(mOldAutomatic != 0); } else { mCheckBox.setVisibility(View.GONE); @@ -114,17 +132,52 @@ public class BrightnessPreference extends SeekBarPreference implements } } + private int getBrightness(int defaultValue) { + int brightness = defaultValue; + try { + brightness = Settings.System.getInt(getContext().getContentResolver(), + Settings.System.SCREEN_BRIGHTNESS); + } catch (SettingNotFoundException snfe) { + } + return brightness; + } + + private int getBrightnessMode(int defaultValue) { + int brightnessMode = defaultValue; + try { + brightnessMode = Settings.System.getInt(getContext().getContentResolver(), + Settings.System.SCREEN_BRIGHTNESS_MODE); + } catch (SettingNotFoundException snfe) { + } + return brightnessMode; + } + + private void onBrightnessChanged() { + int brightness = getBrightness(MAXIMUM_BACKLIGHT); + mSeekBar.setProgress(brightness - MINIMUM_BACKLIGHT); + } + + private void onBrightnessModeChanged() { + boolean checked = getBrightnessMode(0) != 0; + mCheckBox.setChecked(checked); + } + @Override protected void onDialogClosed(boolean positiveResult) { super.onDialogClosed(positiveResult); + final ContentResolver resolver = getContext().getContentResolver(); + if (positiveResult) { - Settings.System.putInt(getContext().getContentResolver(), + Settings.System.putInt(resolver, Settings.System.SCREEN_BRIGHTNESS, mSeekBar.getProgress() + MINIMUM_BACKLIGHT); } else { restoreOldState(); } + + resolver.unregisterContentObserver(mBrightnessObserver); + resolver.unregisterContentObserver(mBrightnessModeObserver); } private void restoreOldState() { |