Update Settings app to use new brightness dialog
Bug: 7304957 Change-Id: I3894f6fc9ae1aef92bff328006601af518111983
This commit is contained in:
@@ -1,52 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<!-- Copyright (C) 2008 The Android Open Source Project
|
|
||||||
|
|
||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
you may not use this file except in compliance with the License.
|
|
||||||
You may obtain a copy of the License at
|
|
||||||
|
|
||||||
http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
|
|
||||||
Unless required by applicable law or agreed to in writing, software
|
|
||||||
distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
See the License for the specific language governing permissions and
|
|
||||||
limitations under the License.
|
|
||||||
|
|
||||||
Copyright (C) 2009 Motorola, Inc.
|
|
||||||
March 23, 2009 - Motorola - Allow automatic brightness changes.
|
|
||||||
-->
|
|
||||||
|
|
||||||
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="match_parent">
|
|
||||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="match_parent"
|
|
||||||
android:orientation="vertical"
|
|
||||||
android:gravity="center_horizontal"
|
|
||||||
android:paddingBottom="20dip">
|
|
||||||
|
|
||||||
<ImageView android:id="@android:id/icon"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:paddingTop="20dip"
|
|
||||||
android:visibility="gone"
|
|
||||||
android:contentDescription="@null" />
|
|
||||||
|
|
||||||
<CheckBox android:id="@+id/automatic_mode"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:text="@string/automatic_brightness"
|
|
||||||
android:textAppearance="?android:attr/textAppearanceSmall"
|
|
||||||
android:layout_marginTop="6dip"
|
|
||||||
android:layout_marginStart="20dip"
|
|
||||||
android:layout_marginEnd="20dip" />
|
|
||||||
|
|
||||||
<SeekBar android:id="@*android:id/seekbar"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:padding="20dip" />
|
|
||||||
|
|
||||||
</LinearLayout>
|
|
||||||
</ScrollView>
|
|
@@ -19,9 +19,8 @@
|
|||||||
xmlns:settings="http://schemas.android.com/apk/res/com.android.settings">
|
xmlns:settings="http://schemas.android.com/apk/res/com.android.settings">
|
||||||
|
|
||||||
<com.android.settings.BrightnessPreference
|
<com.android.settings.BrightnessPreference
|
||||||
android:key="brightness"
|
|
||||||
android:title="@string/brightness"
|
android:title="@string/brightness"
|
||||||
android:dialogTitle="@string/brightness" />
|
android:persistent="false"/>
|
||||||
|
|
||||||
<PreferenceScreen
|
<PreferenceScreen
|
||||||
android:key="wallpaper"
|
android:key="wallpaper"
|
||||||
|
@@ -16,330 +16,21 @@
|
|||||||
|
|
||||||
package com.android.settings;
|
package com.android.settings;
|
||||||
|
|
||||||
import android.content.ContentResolver;
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.database.ContentObserver;
|
import android.content.Intent;
|
||||||
import android.os.Bundle;
|
import android.os.UserHandle;
|
||||||
import android.os.Handler;
|
import android.preference.Preference;
|
||||||
import android.os.IPowerManager;
|
|
||||||
import android.os.Parcel;
|
|
||||||
import android.os.Parcelable;
|
|
||||||
import android.os.PowerManager;
|
|
||||||
import android.os.RemoteException;
|
|
||||||
import android.os.ServiceManager;
|
|
||||||
import android.preference.SeekBarDialogPreference;
|
|
||||||
import android.provider.Settings;
|
|
||||||
import android.provider.Settings.SettingNotFoundException;
|
|
||||||
import android.util.AttributeSet;
|
import android.util.AttributeSet;
|
||||||
import android.view.View;
|
|
||||||
import android.widget.CheckBox;
|
|
||||||
import android.widget.CompoundButton;
|
|
||||||
import android.widget.SeekBar;
|
|
||||||
|
|
||||||
public class BrightnessPreference extends SeekBarDialogPreference implements
|
public class BrightnessPreference extends Preference {
|
||||||
SeekBar.OnSeekBarChangeListener, CheckBox.OnCheckedChangeListener {
|
|
||||||
// If true, enables the use of the screen auto-brightness adjustment setting.
|
|
||||||
private static final boolean USE_SCREEN_AUTO_BRIGHTNESS_ADJUSTMENT =
|
|
||||||
PowerManager.useScreenAutoBrightnessAdjustmentFeature();
|
|
||||||
|
|
||||||
private final int mScreenBrightnessMinimum;
|
|
||||||
private final int mScreenBrightnessMaximum;
|
|
||||||
|
|
||||||
private SeekBar mSeekBar;
|
|
||||||
private CheckBox mCheckBox;
|
|
||||||
|
|
||||||
private int mOldBrightness;
|
|
||||||
private int mOldAutomatic;
|
|
||||||
|
|
||||||
private boolean mAutomaticAvailable;
|
|
||||||
private boolean mAutomaticMode;
|
|
||||||
|
|
||||||
private int mCurBrightness = -1;
|
|
||||||
|
|
||||||
private boolean mRestoredOldState;
|
|
||||||
|
|
||||||
private static final int SEEK_BAR_RANGE = 10000;
|
|
||||||
|
|
||||||
private ContentObserver mBrightnessObserver = new ContentObserver(new Handler()) {
|
|
||||||
@Override
|
|
||||||
public void onChange(boolean selfChange) {
|
|
||||||
mCurBrightness = -1;
|
|
||||||
onBrightnessChanged();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
private ContentObserver mBrightnessModeObserver = new ContentObserver(new Handler()) {
|
|
||||||
@Override
|
|
||||||
public void onChange(boolean selfChange) {
|
|
||||||
onBrightnessModeChanged();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
public BrightnessPreference(Context context, AttributeSet attrs) {
|
public BrightnessPreference(Context context, AttributeSet attrs) {
|
||||||
super(context, attrs);
|
super(context, attrs);
|
||||||
|
|
||||||
PowerManager pm = (PowerManager)context.getSystemService(Context.POWER_SERVICE);
|
|
||||||
mScreenBrightnessMinimum = pm.getMinimumScreenBrightnessSetting();
|
|
||||||
mScreenBrightnessMaximum = pm.getMaximumScreenBrightnessSetting();
|
|
||||||
|
|
||||||
mAutomaticAvailable = context.getResources().getBoolean(
|
|
||||||
com.android.internal.R.bool.config_automatic_brightness_available);
|
|
||||||
|
|
||||||
setDialogLayoutResource(R.layout.preference_dialog_brightness);
|
|
||||||
setDialogIcon(R.drawable.ic_settings_display);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void showDialog(Bundle state) {
|
protected void onClick() {
|
||||||
super.showDialog(state);
|
Intent intent = new Intent(Intent.ACTION_SHOW_BRIGHTNESS_DIALOG);
|
||||||
|
getContext().sendBroadcastAsUser(intent, UserHandle.CURRENT_OR_SELF);
|
||||||
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(SEEK_BAR_RANGE);
|
|
||||||
mOldBrightness = getBrightness();
|
|
||||||
mSeekBar.setProgress(mOldBrightness);
|
|
||||||
|
|
||||||
mCheckBox = (CheckBox)view.findViewById(R.id.automatic_mode);
|
|
||||||
if (mAutomaticAvailable) {
|
|
||||||
mCheckBox.setOnCheckedChangeListener(this);
|
|
||||||
mOldAutomatic = getBrightnessMode(0);
|
|
||||||
mAutomaticMode = mOldAutomatic == Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC;
|
|
||||||
mCheckBox.setChecked(mAutomaticMode);
|
|
||||||
mSeekBar.setEnabled(!mAutomaticMode || USE_SCREEN_AUTO_BRIGHTNESS_ADJUSTMENT);
|
|
||||||
} else {
|
|
||||||
mCheckBox.setVisibility(View.GONE);
|
|
||||||
mSeekBar.setEnabled(true);
|
|
||||||
}
|
|
||||||
mSeekBar.setOnSeekBarChangeListener(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void onProgressChanged(SeekBar seekBar, int progress,
|
|
||||||
boolean fromTouch) {
|
|
||||||
setBrightness(progress, false);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void onStartTrackingTouch(SeekBar seekBar) {
|
|
||||||
// NA
|
|
||||||
}
|
|
||||||
|
|
||||||
public void onStopTrackingTouch(SeekBar seekBar) {
|
|
||||||
// NA
|
|
||||||
}
|
|
||||||
|
|
||||||
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
|
|
||||||
setMode(isChecked ? Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC
|
|
||||||
: Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL);
|
|
||||||
mSeekBar.setProgress(getBrightness());
|
|
||||||
mSeekBar.setEnabled(!mAutomaticMode || USE_SCREEN_AUTO_BRIGHTNESS_ADJUSTMENT);
|
|
||||||
setBrightness(mSeekBar.getProgress(), false);
|
|
||||||
}
|
|
||||||
|
|
||||||
private int getBrightness() {
|
|
||||||
int mode = getBrightnessMode(0);
|
|
||||||
float brightness = 0;
|
|
||||||
if (USE_SCREEN_AUTO_BRIGHTNESS_ADJUSTMENT
|
|
||||||
&& mode == Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC) {
|
|
||||||
brightness = Settings.System.getFloat(getContext().getContentResolver(),
|
|
||||||
Settings.System.SCREEN_AUTO_BRIGHTNESS_ADJ, 0);
|
|
||||||
brightness = (brightness+1)/2;
|
|
||||||
} else {
|
|
||||||
if (mCurBrightness < 0) {
|
|
||||||
brightness = Settings.System.getInt(getContext().getContentResolver(),
|
|
||||||
Settings.System.SCREEN_BRIGHTNESS, 100);
|
|
||||||
} else {
|
|
||||||
brightness = mCurBrightness;
|
|
||||||
}
|
|
||||||
brightness = (brightness - mScreenBrightnessMinimum)
|
|
||||||
/ (mScreenBrightnessMaximum - mScreenBrightnessMinimum);
|
|
||||||
}
|
|
||||||
return (int)(brightness*SEEK_BAR_RANGE);
|
|
||||||
}
|
|
||||||
|
|
||||||
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() {
|
|
||||||
mSeekBar.setProgress(getBrightness());
|
|
||||||
}
|
|
||||||
|
|
||||||
private void onBrightnessModeChanged() {
|
|
||||||
boolean checked = getBrightnessMode(0)
|
|
||||||
== Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC;
|
|
||||||
mCheckBox.setChecked(checked);
|
|
||||||
mSeekBar.setProgress(getBrightness());
|
|
||||||
mSeekBar.setEnabled(!checked || USE_SCREEN_AUTO_BRIGHTNESS_ADJUSTMENT);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void onDialogClosed(boolean positiveResult) {
|
|
||||||
super.onDialogClosed(positiveResult);
|
|
||||||
|
|
||||||
final ContentResolver resolver = getContext().getContentResolver();
|
|
||||||
|
|
||||||
if (positiveResult) {
|
|
||||||
setBrightness(mSeekBar.getProgress(), true);
|
|
||||||
} else {
|
|
||||||
restoreOldState();
|
|
||||||
}
|
|
||||||
|
|
||||||
resolver.unregisterContentObserver(mBrightnessObserver);
|
|
||||||
resolver.unregisterContentObserver(mBrightnessModeObserver);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void restoreOldState() {
|
|
||||||
if (mRestoredOldState) return;
|
|
||||||
|
|
||||||
if (mAutomaticAvailable) {
|
|
||||||
setMode(mOldAutomatic);
|
|
||||||
}
|
|
||||||
setBrightness(mOldBrightness, false);
|
|
||||||
mRestoredOldState = true;
|
|
||||||
mCurBrightness = -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void setBrightness(int brightness, boolean write) {
|
|
||||||
if (mAutomaticMode) {
|
|
||||||
if (USE_SCREEN_AUTO_BRIGHTNESS_ADJUSTMENT) {
|
|
||||||
float valf = (((float)brightness*2)/SEEK_BAR_RANGE) - 1.0f;
|
|
||||||
try {
|
|
||||||
IPowerManager power = IPowerManager.Stub.asInterface(
|
|
||||||
ServiceManager.getService("power"));
|
|
||||||
if (power != null) {
|
|
||||||
power.setTemporaryScreenAutoBrightnessAdjustmentSettingOverride(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 = (mScreenBrightnessMaximum - mScreenBrightnessMinimum);
|
|
||||||
brightness = (brightness * range)/SEEK_BAR_RANGE + mScreenBrightnessMinimum;
|
|
||||||
try {
|
|
||||||
IPowerManager power = IPowerManager.Stub.asInterface(
|
|
||||||
ServiceManager.getService("power"));
|
|
||||||
if (power != null) {
|
|
||||||
power.setTemporaryScreenBrightnessSettingOverride(brightness);
|
|
||||||
}
|
|
||||||
if (write) {
|
|
||||||
mCurBrightness = -1;
|
|
||||||
final ContentResolver resolver = getContext().getContentResolver();
|
|
||||||
Settings.System.putInt(resolver,
|
|
||||||
Settings.System.SCREEN_BRIGHTNESS, brightness);
|
|
||||||
} else {
|
|
||||||
mCurBrightness = brightness;
|
|
||||||
}
|
|
||||||
} catch (RemoteException doe) {
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void setMode(int mode) {
|
|
||||||
mAutomaticMode = mode == Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC;
|
|
||||||
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;
|
|
||||||
myState.curBrightness = mCurBrightness;
|
|
||||||
|
|
||||||
// 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, false);
|
|
||||||
mCurBrightness = myState.curBrightness;
|
|
||||||
}
|
|
||||||
|
|
||||||
private static class SavedState extends BaseSavedState {
|
|
||||||
|
|
||||||
boolean automatic;
|
|
||||||
boolean oldAutomatic;
|
|
||||||
int progress;
|
|
||||||
int oldProgress;
|
|
||||||
int curBrightness;
|
|
||||||
|
|
||||||
public SavedState(Parcel source) {
|
|
||||||
super(source);
|
|
||||||
automatic = source.readInt() == 1;
|
|
||||||
progress = source.readInt();
|
|
||||||
oldAutomatic = source.readInt() == 1;
|
|
||||||
oldProgress = source.readInt();
|
|
||||||
curBrightness = 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);
|
|
||||||
dest.writeInt(curBrightness);
|
|
||||||
}
|
|
||||||
|
|
||||||
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];
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user