summaryrefslogtreecommitdiffstats
path: root/src/com/android/settings/BrightnessPreference.java
diff options
context:
space:
mode:
authorAmith Yamasani <yamasani@google.com>2011-01-03 15:15:41 -0800
committerAmith Yamasani <yamasani@google.com>2011-01-03 15:15:41 -0800
commita80cf2cbf549be3d6f788a7bf391e3c7522e24ce (patch)
treeef89baad4ebe5fcd76fd76393460ad7b1084d3db /src/com/android/settings/BrightnessPreference.java
parent762d2646582c073152a8774c1c6c49e1dc441d2e (diff)
downloadpackages_apps_Settings-a80cf2cbf549be3d6f788a7bf391e3c7522e24ce.zip
packages_apps_Settings-a80cf2cbf549be3d6f788a7bf391e3c7522e24ce.tar.gz
packages_apps_Settings-a80cf2cbf549be3d6f788a7bf391e3c7522e24ce.tar.bz2
Save and restore brightness on orientation changes.
Bug: 2524213
Diffstat (limited to 'src/com/android/settings/BrightnessPreference.java')
-rw-r--r--src/com/android/settings/BrightnessPreference.java108
1 files changed, 97 insertions, 11 deletions
diff --git a/src/com/android/settings/BrightnessPreference.java b/src/com/android/settings/BrightnessPreference.java
index 7494e2f..00f5deb 100644
--- a/src/com/android/settings/BrightnessPreference.java
+++ b/src/com/android/settings/BrightnessPreference.java
@@ -17,10 +17,13 @@
package com.android.settings;
import android.content.Context;
+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;
@@ -37,12 +40,14 @@ public class BrightnessPreference extends SeekBarPreference implements
private SeekBar mSeekBar;
private CheckBox mCheckBox;
-
+
private int mOldBrightness;
private int mOldAutomatic;
private boolean mAutomaticAvailable;
-
+
+ private boolean mRestoredOldState;
+
// Backlight range is from 0 - 255. Need to make sure that user
// doesn't set the backlight to 0 and get stuck
private static final int MINIMUM_BACKLIGHT = android.os.Power.BRIGHTNESS_DIM + 10;
@@ -112,21 +117,28 @@ public class BrightnessPreference extends SeekBarPreference implements
@Override
protected void onDialogClosed(boolean positiveResult) {
super.onDialogClosed(positiveResult);
-
+
if (positiveResult) {
Settings.System.putInt(getContext().getContentResolver(),
Settings.System.SCREEN_BRIGHTNESS,
mSeekBar.getProgress() + MINIMUM_BACKLIGHT);
} else {
- if (mAutomaticAvailable) {
- setMode(mOldAutomatic);
- }
- if (!mAutomaticAvailable || mOldAutomatic == 0) {
- setBrightness(mOldBrightness);
- }
+ restoreOldState();
+ }
+ }
+
+ private void restoreOldState() {
+ if (mRestoredOldState) return;
+
+ if (mAutomaticAvailable) {
+ setMode(mOldAutomatic);
+ }
+ if (!mAutomaticAvailable || mOldAutomatic == 0) {
+ setBrightness(mOldBrightness);
}
+ mRestoredOldState = true;
}
-
+
private void setBrightness(int brightness) {
try {
IPowerManager power = IPowerManager.Stub.asInterface(
@@ -136,7 +148,7 @@ public class BrightnessPreference extends SeekBarPreference implements
}
} catch (RemoteException doe) {
- }
+ }
}
private void setMode(int mode) {
@@ -148,5 +160,79 @@ public class BrightnessPreference extends SeekBarPreference implements
Settings.System.putInt(getContext().getContentResolver(),
Settings.System.SCREEN_BRIGHTNESS_MODE, mode);
}
+
+ @Override
+ protected Parcelable onSaveInstanceState() {
+ final Parcelable superState = super.onSaveInstanceState();
+ if (getDialog() == null || !getDialog().isShowing()) return superState;
+
+ // Save the dialog state
+ final SavedState myState = new SavedState(superState);
+ myState.automatic = mCheckBox.isChecked();
+ myState.progress = mSeekBar.getProgress();
+ myState.oldAutomatic = mOldAutomatic == 1;
+ myState.oldProgress = mOldBrightness;
+
+ // Restore the old state when the activity or dialog is being paused
+ restoreOldState();
+ return myState;
+ }
+
+ @Override
+ protected void onRestoreInstanceState(Parcelable state) {
+ if (state == null || !state.getClass().equals(SavedState.class)) {
+ // Didn't save state for us in onSaveInstanceState
+ super.onRestoreInstanceState(state);
+ return;
+ }
+
+ SavedState myState = (SavedState) state;
+ super.onRestoreInstanceState(myState.getSuperState());
+ mOldBrightness = myState.oldProgress;
+ mOldAutomatic = myState.oldAutomatic ? 1 : 0;
+ setMode(myState.automatic ? 1 : 0);
+ setBrightness(myState.progress + MINIMUM_BACKLIGHT);
+ }
+
+ private static class SavedState extends BaseSavedState {
+
+ boolean automatic;
+ boolean oldAutomatic;
+ int progress;
+ int oldProgress;
+
+ public SavedState(Parcel source) {
+ super(source);
+ automatic = source.readInt() == 1;
+ progress = source.readInt();
+ oldAutomatic = source.readInt() == 1;
+ oldProgress = source.readInt();
+ }
+
+ @Override
+ public void writeToParcel(Parcel dest, int flags) {
+ super.writeToParcel(dest, flags);
+ dest.writeInt(automatic ? 1 : 0);
+ dest.writeInt(progress);
+ dest.writeInt(oldAutomatic ? 1 : 0);
+ dest.writeInt(oldProgress);
+ }
+
+ public SavedState(Parcelable superState) {
+ super(superState);
+ }
+
+ public static final Parcelable.Creator<SavedState> CREATOR =
+ new Parcelable.Creator<SavedState>() {
+
+ public SavedState createFromParcel(Parcel in) {
+ return new SavedState(in);
+ }
+
+ public SavedState[] newArray(int size) {
+ return new SavedState[size];
+ }
+ };
+ }
}