When auto-brightness is on, you can now adjust its brightness.

Change-Id: Ie152def12cf7befd9c15a19f9975c207cbb5c541
This commit is contained in:
Dianne Hackborn
2012-01-20 18:37:42 -08:00
parent 8a3703d909
commit 9907f6b274

View File

@@ -45,6 +45,7 @@ public class BrightnessPreference extends SeekBarDialogPreference implements
private int mOldAutomatic; private int mOldAutomatic;
private boolean mAutomaticAvailable; private boolean mAutomaticAvailable;
private boolean mAutomaticMode;
private boolean mRestoredOldState; private boolean mRestoredOldState;
@@ -97,24 +98,23 @@ public class BrightnessPreference extends SeekBarDialogPreference implements
super.onBindDialogView(view); super.onBindDialogView(view);
mSeekBar = getSeekBar(view); mSeekBar = getSeekBar(view);
mSeekBar.setMax(MAXIMUM_BACKLIGHT - mScreenBrightnessDim); mSeekBar.setMax(10000);
mOldBrightness = getBrightness(0); mOldBrightness = getBrightness();
mSeekBar.setProgress(mOldBrightness - mScreenBrightnessDim); mSeekBar.setProgress(mOldBrightness);
mCheckBox = (CheckBox)view.findViewById(R.id.automatic_mode); mCheckBox = (CheckBox)view.findViewById(R.id.automatic_mode);
if (mAutomaticAvailable) { if (mAutomaticAvailable) {
mCheckBox.setOnCheckedChangeListener(this); mCheckBox.setOnCheckedChangeListener(this);
mOldAutomatic = getBrightnessMode(0); mOldAutomatic = getBrightnessMode(0);
mCheckBox.setChecked(mOldAutomatic != 0); mAutomaticMode = mOldAutomatic == Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC;
} else { mCheckBox.setChecked(mAutomaticMode);
mCheckBox.setVisibility(View.GONE);
} }
mSeekBar.setOnSeekBarChangeListener(this); mSeekBar.setOnSeekBarChangeListener(this);
} }
public void onProgressChanged(SeekBar seekBar, int progress, public void onProgressChanged(SeekBar seekBar, int progress,
boolean fromTouch) { boolean fromTouch) {
setBrightness(progress + mScreenBrightnessDim); setBrightness(progress, false);
} }
public void onStartTrackingTouch(SeekBar seekBar) { public void onStartTrackingTouch(SeekBar seekBar) {
@@ -128,19 +128,27 @@ public class BrightnessPreference extends SeekBarDialogPreference implements
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
setMode(isChecked ? Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC setMode(isChecked ? Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC
: Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL); : Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL);
if (!isChecked) { mSeekBar.setProgress(getBrightness());
setBrightness(mSeekBar.getProgress() + mScreenBrightnessDim);
}
} }
private int getBrightness(int defaultValue) { private int getBrightness() {
int brightness = defaultValue; int mode = getBrightnessMode(0);
float brightness = 0;
try { try {
if (mode == Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC) {
brightness = Settings.System.getFloat(getContext().getContentResolver(),
Settings.System.SCREEN_AUTO_BRIGHTNESS_ADJ);
brightness = (brightness+1)/2;
} else {
brightness = Settings.System.getInt(getContext().getContentResolver(), brightness = Settings.System.getInt(getContext().getContentResolver(),
Settings.System.SCREEN_BRIGHTNESS); Settings.System.SCREEN_BRIGHTNESS);
brightness = (MAXIMUM_BACKLIGHT - mScreenBrightnessDim)
/ (brightness - mScreenBrightnessDim);
}
} catch (SettingNotFoundException snfe) { } catch (SettingNotFoundException snfe) {
} }
return brightness; return (int)(brightness*10000);
} }
private int getBrightnessMode(int defaultValue) { private int getBrightnessMode(int defaultValue) {
@@ -154,13 +162,14 @@ public class BrightnessPreference extends SeekBarDialogPreference implements
} }
private void onBrightnessChanged() { private void onBrightnessChanged() {
int brightness = getBrightness(MAXIMUM_BACKLIGHT); mSeekBar.setProgress(getBrightness());
mSeekBar.setProgress(brightness - mScreenBrightnessDim);
} }
private void onBrightnessModeChanged() { private void onBrightnessModeChanged() {
boolean checked = getBrightnessMode(0) != 0; boolean checked = getBrightnessMode(0)
== Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC;
mCheckBox.setChecked(checked); mCheckBox.setChecked(checked);
mSeekBar.setProgress(getBrightness());
} }
@Override @Override
@@ -170,9 +179,7 @@ public class BrightnessPreference extends SeekBarDialogPreference implements
final ContentResolver resolver = getContext().getContentResolver(); final ContentResolver resolver = getContext().getContentResolver();
if (positiveResult) { if (positiveResult) {
Settings.System.putInt(resolver, setBrightness(mSeekBar.getProgress(), true);
Settings.System.SCREEN_BRIGHTNESS,
mSeekBar.getProgress() + mScreenBrightnessDim);
} else { } else {
restoreOldState(); restoreOldState();
} }
@@ -187,30 +194,47 @@ public class BrightnessPreference extends SeekBarDialogPreference implements
if (mAutomaticAvailable) { if (mAutomaticAvailable) {
setMode(mOldAutomatic); setMode(mOldAutomatic);
} }
if (!mAutomaticAvailable || mOldAutomatic == 0) { setBrightness(mOldBrightness, false);
setBrightness(mOldBrightness);
}
mRestoredOldState = true; mRestoredOldState = true;
} }
private void setBrightness(int brightness) { private void setBrightness(int brightness, boolean write) {
if (mAutomaticMode) {
float valf = (((float)brightness*2)/10000) - 1.0f;
try {
IPowerManager power = IPowerManager.Stub.asInterface(
ServiceManager.getService("power"));
if (power != null) {
power.setAutoBrightnessAdjustment(valf);
}
if (write) {
final ContentResolver resolver = getContext().getContentResolver();
Settings.System.putFloat(resolver,
Settings.System.SCREEN_AUTO_BRIGHTNESS_ADJ, valf);
}
} catch (RemoteException doe) {
}
} else {
int range = (MAXIMUM_BACKLIGHT - mScreenBrightnessDim);
brightness = (brightness*range)/10000 + mScreenBrightnessDim;
try { try {
IPowerManager power = IPowerManager.Stub.asInterface( IPowerManager power = IPowerManager.Stub.asInterface(
ServiceManager.getService("power")); ServiceManager.getService("power"));
if (power != null) { if (power != null) {
power.setBacklightBrightness(brightness); power.setBacklightBrightness(brightness);
} }
if (write) {
final ContentResolver resolver = getContext().getContentResolver();
Settings.System.putInt(resolver,
Settings.System.SCREEN_BRIGHTNESS, brightness);
}
} catch (RemoteException doe) { } catch (RemoteException doe) {
}
} }
} }
private void setMode(int mode) { private void setMode(int mode) {
if (mode == Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC) { mAutomaticMode = mode == Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC;
mSeekBar.setVisibility(View.GONE);
} else {
mSeekBar.setVisibility(View.VISIBLE);
}
Settings.System.putInt(getContext().getContentResolver(), Settings.System.putInt(getContext().getContentResolver(),
Settings.System.SCREEN_BRIGHTNESS_MODE, mode); Settings.System.SCREEN_BRIGHTNESS_MODE, mode);
} }
@@ -245,7 +269,7 @@ public class BrightnessPreference extends SeekBarDialogPreference implements
mOldBrightness = myState.oldProgress; mOldBrightness = myState.oldProgress;
mOldAutomatic = myState.oldAutomatic ? 1 : 0; mOldAutomatic = myState.oldAutomatic ? 1 : 0;
setMode(myState.automatic ? 1 : 0); setMode(myState.automatic ? 1 : 0);
setBrightness(myState.progress + mScreenBrightnessDim); setBrightness(myState.progress, false);
} }
private static class SavedState extends BaseSavedState { private static class SavedState extends BaseSavedState {