diff options
author | John Spurlock <jspurlock@google.com> | 2014-06-10 21:36:18 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2014-06-10 21:36:19 +0000 |
commit | e9ee5e2cede8d7e8fd7791113903df7eff1ec75a (patch) | |
tree | 12802aad9e66d0967bf35bd5d93e2b9e66df62bb /src/com/android | |
parent | 8da48ee882825c43bce7068382ad730fbbc060e7 (diff) | |
parent | c7f8e8ce69e80ea495472aade5f8569c6583c5e8 (diff) | |
download | packages_apps_Settings-e9ee5e2cede8d7e8fd7791113903df7eff1ec75a.tar.gz packages_apps_Settings-e9ee5e2cede8d7e8fd7791113903df7eff1ec75a.tar.bz2 packages_apps_Settings-e9ee5e2cede8d7e8fd7791113903df7eff1ec75a.zip |
Merge "Settings: Battery saver settings sub-page." into lmp-preview-dev
Diffstat (limited to 'src/com/android')
10 files changed, 227 insertions, 33 deletions
diff --git a/src/com/android/settings/DevelopmentSettings.java b/src/com/android/settings/DevelopmentSettings.java index a0a062a6c..ce44907e5 100644 --- a/src/com/android/settings/DevelopmentSettings.java +++ b/src/com/android/settings/DevelopmentSettings.java @@ -122,7 +122,6 @@ public class DevelopmentSettings extends SettingsPreferenceFragment private static final String USE_NUPLAYER_KEY = "use_nuplayer"; private static final String USE_NUPLAYER_PROPERTY = "persist.sys.media.use-nuplayer"; private static final String SHOW_CPU_USAGE_KEY = "show_cpu_usage"; - private static final String LOW_POWER_MODE_KEY = "low_power_mode"; private static final String FORCE_HARDWARE_UI_KEY = "force_hw_ui"; private static final String FORCE_MSAA_KEY = "force_msaa"; private static final String TRACK_FRAME_TIME_KEY = "track_frame_time"; @@ -196,7 +195,6 @@ public class DevelopmentSettings extends SettingsPreferenceFragment private CheckBoxPreference mShowScreenUpdates; private CheckBoxPreference mDisableOverlays; private CheckBoxPreference mShowCpuUsage; - private CheckBoxPreference mLowPowerMode; private CheckBoxPreference mForceHardwareUi; private CheckBoxPreference mForceMsaa; private CheckBoxPreference mShowHwScreenUpdates; @@ -308,7 +306,6 @@ public class DevelopmentSettings extends SettingsPreferenceFragment mShowScreenUpdates = findAndInitCheckboxPref(SHOW_SCREEN_UPDATES_KEY); mDisableOverlays = findAndInitCheckboxPref(DISABLE_OVERLAYS_KEY); mShowCpuUsage = findAndInitCheckboxPref(SHOW_CPU_USAGE_KEY); - mLowPowerMode = findAndInitCheckboxPref(LOW_POWER_MODE_KEY); mForceHardwareUi = findAndInitCheckboxPref(FORCE_HARDWARE_UI_KEY); mForceMsaa = findAndInitCheckboxPref(FORCE_MSAA_KEY); mTrackFrameTime = addListPreference(TRACK_FRAME_TIME_KEY); @@ -504,7 +501,6 @@ public class DevelopmentSettings extends SettingsPreferenceFragment updateShowTouchesOptions(); updateFlingerOptions(); updateCpuUsageOptions(); - updateLowPowerModeOptions(); updateHardwareUiOptions(); updateMsaaOptions(); updateTrackFrameTimeOptions(); @@ -1040,22 +1036,11 @@ public class DevelopmentSettings extends SettingsPreferenceFragment mWifiManager.enableVerboseLogging(mWifiVerboseLogging.isChecked() ? 1 : 0); } - private void updateLowPowerModeOptions() { - updateCheckBox(mLowPowerMode, Settings.Global.getInt(getActivity().getContentResolver(), - Settings.Global.LOW_POWER_MODE, 0) != 0); - } - private void updateCpuUsageOptions() { updateCheckBox(mShowCpuUsage, Settings.Global.getInt(getActivity().getContentResolver(), Settings.Global.SHOW_PROCESSES, 0) != 0); } - private void writeLowPowerModeOptions() { - boolean value = mLowPowerMode.isChecked(); - Settings.Global.putInt(getActivity().getContentResolver(), - Settings.Global.LOW_POWER_MODE, value ? 1 : 0); - } - private void writeCpuUsageOptions() { boolean value = mShowCpuUsage.isChecked(); Settings.Global.putInt(getActivity().getContentResolver(), @@ -1330,8 +1315,6 @@ public class DevelopmentSettings extends SettingsPreferenceFragment writeShowUpdatesOption(); } else if (preference == mDisableOverlays) { writeDisableOverlaysOption(); - } else if (preference == mLowPowerMode) { - writeLowPowerModeOptions(); } else if (preference == mShowCpuUsage) { writeCpuUsageOptions(); } else if (preference == mImmediatelyDestroyActivities) { diff --git a/src/com/android/settings/Settings.java b/src/com/android/settings/Settings.java index 22ae719f3..7ef33ae3b 100644 --- a/src/com/android/settings/Settings.java +++ b/src/com/android/settings/Settings.java @@ -66,6 +66,7 @@ public class Settings extends SettingsActivity { public static class RunningServicesActivity extends SettingsActivity { /* empty */ } public static class ManageAccountsSettingsActivity extends SettingsActivity { /* empty */ } public static class PowerUsageSummaryActivity extends SettingsActivity { /* empty */ } + public static class BatterySaverSettingsActivity extends SettingsActivity { /* empty */ } public static class AccountSyncSettingsActivity extends SettingsActivity { /* empty */ } public static class AccountSyncSettingsInAddAccountActivity extends SettingsActivity { /* empty */ } public static class CryptKeeperSettingsActivity extends SettingsActivity { /* empty */ } diff --git a/src/com/android/settings/SettingsActivity.java b/src/com/android/settings/SettingsActivity.java index 12dee4a05..5ca1f8bfe 100644 --- a/src/com/android/settings/SettingsActivity.java +++ b/src/com/android/settings/SettingsActivity.java @@ -63,8 +63,8 @@ import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.widget.Button; - import android.widget.SearchView; + import com.android.internal.util.ArrayUtils; import com.android.internal.util.XmlUtils; import com.android.settings.accessibility.AccessibilitySettings; @@ -83,6 +83,7 @@ import com.android.settings.dashboard.NoHomeDialogFragment; import com.android.settings.dashboard.SearchResultsSummary; import com.android.settings.deviceinfo.Memory; import com.android.settings.deviceinfo.UsbSettings; +import com.android.settings.fuelgauge.BatterySaverSettings; import com.android.settings.fuelgauge.PowerUsageSummary; import com.android.settings.search.DynamicIndexableContentMonitor; import com.android.settings.search.Index; @@ -108,6 +109,7 @@ import com.android.settings.widget.SwitchBar; import com.android.settings.wifi.AdvancedWifiSettings; import com.android.settings.wifi.WifiSettings; import com.android.settings.wifi.p2p.WifiP2pSettings; + import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlPullParserException; @@ -276,7 +278,8 @@ public class SettingsActivity extends Activity NotificationSettings.class.getName(), ChooseLockPassword.ChooseLockPasswordFragment.class.getName(), ChooseLockPattern.ChooseLockPatternFragment.class.getName(), - InstalledAppDetails.class.getName() + InstalledAppDetails.class.getName(), + BatterySaverSettings.class.getName(), }; private SharedPreferences mDevelopmentPreferences; diff --git a/src/com/android/settings/fuelgauge/BatterySaverSettings.java b/src/com/android/settings/fuelgauge/BatterySaverSettings.java new file mode 100644 index 000000000..1a7e892c2 --- /dev/null +++ b/src/com/android/settings/fuelgauge/BatterySaverSettings.java @@ -0,0 +1,171 @@ +/* + * Copyright (C) 2014 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. + */ + +package com.android.settings.fuelgauge; + +import android.content.ContentResolver; +import android.content.Context; +import android.content.res.Resources; +import android.database.ContentObserver; +import android.net.Uri; +import android.os.AsyncTask; +import android.os.Bundle; +import android.os.Handler; +import android.os.Message; +import android.provider.Settings.Global; +import android.util.Log; +import android.widget.Switch; + +import com.android.settings.R; +import com.android.settings.SettingsActivity; +import com.android.settings.SettingsPreferenceFragment; +import com.android.settings.notification.SettingPref; +import com.android.settings.widget.SwitchBar; + +public class BatterySaverSettings extends SettingsPreferenceFragment + implements SwitchBar.OnSwitchChangeListener { + private static final String TAG = "BatterySaverSettings"; + private static final String KEY_TURN_ON_AUTOMATICALLY = "turn_on_automatically"; + private static final long WAIT_FOR_SWITCH_ANIM = 500; + + private final H mHandler = new H(); + private final SettingsObserver mSettingsObserver = new SettingsObserver(mHandler); + + private Context mContext; + private SwitchBar mSwitchBar; + private boolean mSwitchBarListenerAdded; + private SettingPref mTriggerPref; + + @Override + public void onActivityCreated(Bundle savedInstanceState) { + super.onActivityCreated(savedInstanceState); + + addPreferencesFromResource(R.xml.battery_saver_settings); + + mContext = getActivity(); + mSwitchBar = ((SettingsActivity) mContext).getSwitchBar(); + updateSwitchBar(); + mTriggerPref = new SettingPref(SettingPref.TYPE_GLOBAL, KEY_TURN_ON_AUTOMATICALLY, + Global.LOW_POWER_MODE_TRIGGER_LEVEL, 0, + getResources().getIntArray(R.array.battery_saver_trigger_values)) { + @Override + protected String getCaption(Resources res, int value) { + if (value > 0 && value < 100) { + return res.getString(R.string.battery_saver_turn_on_automatically_pct, value); + } + return res.getString(R.string.battery_saver_turn_on_automatically_never); + } + }; + mTriggerPref.init(this); + } + + private void updateSwitchBar() { + final boolean mode = Global.getInt(getContentResolver(), Global.LOW_POWER_MODE, 0) != 0; + if (mSwitchBarListenerAdded) { + mSwitchBar.removeOnSwitchChangeListener(this); + } + mSwitchBar.getSwitch().setChecked(mode); + if (mSwitchBarListenerAdded) { + mSwitchBar.addOnSwitchChangeListener(this); + } + } + + private void updateTriggerLevel() { + mTriggerPref.update(mContext); + } + + @Override + public void onResume() { + super.onResume(); + updateSwitchBar(); + mSettingsObserver.setListening(true); + mSwitchBar.show(); + mSwitchBar.addOnSwitchChangeListener(this); + mSwitchBarListenerAdded = true; + } + + @Override + public void onPause() { + super.onPause(); + mSettingsObserver.setListening(false); + if (mSwitchBarListenerAdded) { + mSwitchBar.removeOnSwitchChangeListener(this); + } + mSwitchBar.hide(); + } + + @Override + public void onSwitchChanged(Switch switchView, boolean isChecked) { + mHandler.postSetMode(isChecked); + } + + private void handleSetMode(final boolean mode) { + AsyncTask.execute(new Runnable() { + @Override + public void run() { + Log.d(TAG, "LOW_POWER_MODE from settings: " + mode); + Global.putInt(getContentResolver(), Global.LOW_POWER_MODE, mode ? 1 : 0); + } + }); + } + + private final class H extends Handler { + private static final int SET_MODE = 1; + + public void postSetMode(boolean mode) { + removeMessages(SET_MODE); + final Message m = obtainMessage(SET_MODE, mode ? 1 : 0, 0); + sendMessageDelayed(m, mode ? WAIT_FOR_SWITCH_ANIM : 0); + } + + @Override + public void handleMessage(Message msg) { + if (msg.what == SET_MODE) { + handleSetMode(msg.arg1 != 0); + } + } + } + + private final class SettingsObserver extends ContentObserver { + private final Uri LOW_POWER_MODE_URI = Global.getUriFor(Global.LOW_POWER_MODE); + private final Uri LOW_POWER_MODE_TRIGGER_LEVEL_URI + = Global.getUriFor(Global.LOW_POWER_MODE_TRIGGER_LEVEL); + + public SettingsObserver(Handler handler) { + super(handler); + } + + @Override + public void onChange(boolean selfChange, Uri uri) { + if (LOW_POWER_MODE_URI.equals(uri)) { + updateSwitchBar(); + } + if (LOW_POWER_MODE_TRIGGER_LEVEL_URI.equals(uri)) { + updateTriggerLevel(); + } + } + + public void setListening(boolean listening) { + final ContentResolver cr = getContentResolver(); + if (listening) { + cr.registerContentObserver(LOW_POWER_MODE_URI, false, this); + cr.registerContentObserver(LOW_POWER_MODE_TRIGGER_LEVEL_URI, false, this); + } else { + cr.unregisterContentObserver(this); + } + } + } +} diff --git a/src/com/android/settings/fuelgauge/PowerUsageSummary.java b/src/com/android/settings/fuelgauge/PowerUsageSummary.java index e4e2b0a88..1159a2c5f 100644 --- a/src/com/android/settings/fuelgauge/PowerUsageSummary.java +++ b/src/com/android/settings/fuelgauge/PowerUsageSummary.java @@ -60,7 +60,8 @@ public class PowerUsageSummary extends PreferenceFragment { private static final int MENU_STATS_TYPE = Menu.FIRST; private static final int MENU_STATS_REFRESH = Menu.FIRST + 1; - private static final int MENU_HELP = Menu.FIRST + 2; + private static final int MENU_BATTERY_SAVER = Menu.FIRST + 2; + private static final int MENU_HELP = Menu.FIRST + 3; private UserManager mUm; @@ -180,6 +181,9 @@ public class PowerUsageSummary extends PreferenceFragment { refresh.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM | MenuItem.SHOW_AS_ACTION_WITH_TEXT); + MenuItem batterySaver = menu.add(0, MENU_BATTERY_SAVER, 0, R.string.battery_saver); + batterySaver.setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER); + String helpUrl; if (!TextUtils.isEmpty(helpUrl = getResources().getString(R.string.help_url_battery))) { final MenuItem help = menu.add(0, MENU_HELP, 0, R.string.help_label); @@ -203,6 +207,11 @@ public class PowerUsageSummary extends PreferenceFragment { refreshStats(); mHandler.removeMessages(MSG_REFRESH_STATS); return true; + case MENU_BATTERY_SAVER: + final SettingsActivity sa = (SettingsActivity) getActivity(); + sa.startPreferencePanel(BatterySaverSettings.class.getName(), null, + R.string.battery_saver, null, null, 0); + return true; default: return false; } diff --git a/src/com/android/settings/notification/DropDownPreference.java b/src/com/android/settings/notification/DropDownPreference.java index 36ecf9546..45c83a5d2 100644 --- a/src/com/android/settings/notification/DropDownPreference.java +++ b/src/com/android/settings/notification/DropDownPreference.java @@ -97,8 +97,12 @@ public class DropDownPreference extends Preference { } } - public void addItem(int resId, Object value) { - mAdapter.add(mContext.getResources().getString(resId)); + public void addItem(int captionResid, Object value) { + addItem(mContext.getResources().getString(captionResid), value); + } + + public void addItem(String caption, Object value) { + mAdapter.add(caption); mValues.add(value); } diff --git a/src/com/android/settings/notification/OtherSoundSettings.java b/src/com/android/settings/notification/OtherSoundSettings.java index de5c91743..8528ec7f1 100644 --- a/src/com/android/settings/notification/OtherSoundSettings.java +++ b/src/com/android/settings/notification/OtherSoundSettings.java @@ -21,6 +21,7 @@ import static com.android.settings.notification.SettingPref.TYPE_SYSTEM; import android.content.ContentResolver; import android.content.Context; +import android.content.res.Resources; import android.database.ContentObserver; import android.media.AudioManager; import android.net.Uri; @@ -114,10 +115,15 @@ public class OtherSoundSettings extends SettingsPreferenceFragment implements In } @Override - protected int getResId(Context context, int value) { - if (value == DOCK_AUDIO_MEDIA_DISABLED) return R.string.dock_audio_media_disabled; - if (value == DOCK_AUDIO_MEDIA_ENABLED) return R.string.dock_audio_media_enabled; - throw new IllegalArgumentException(); + protected String getCaption(Resources res, int value) { + switch(value) { + case DOCK_AUDIO_MEDIA_DISABLED: + return res.getString(R.string.dock_audio_media_disabled); + case DOCK_AUDIO_MEDIA_ENABLED: + return res.getString(R.string.dock_audio_media_enabled); + default: + throw new IllegalArgumentException(); + } } }; @@ -131,11 +137,17 @@ public class OtherSoundSettings extends SettingsPreferenceFragment implements In } @Override - protected int getResId(Context context, int value) { - if (value == EMERGENCY_TONE_SILENT) return R.string.emergency_tone_silent; - if (value == EMERGENCY_TONE_ALERT) return R.string.emergency_tone_alert; - if (value == EMERGENCY_TONE_VIBRATE) return R.string.emergency_tone_vibrate; - throw new IllegalArgumentException(); + protected String getCaption(Resources res, int value) { + switch(value) { + case EMERGENCY_TONE_SILENT: + return res.getString(R.string.emergency_tone_silent); + case EMERGENCY_TONE_ALERT: + return res.getString(R.string.emergency_tone_alert); + case EMERGENCY_TONE_VIBRATE: + return res.getString(R.string.emergency_tone_vibrate); + default: + throw new IllegalArgumentException(); + } } }; diff --git a/src/com/android/settings/notification/SettingPref.java b/src/com/android/settings/notification/SettingPref.java index 1e50e2bc6..7fd89d811 100644 --- a/src/com/android/settings/notification/SettingPref.java +++ b/src/com/android/settings/notification/SettingPref.java @@ -18,6 +18,7 @@ package com.android.settings.notification; import android.content.ContentResolver; import android.content.Context; +import android.content.res.Resources; import android.net.Uri; import android.preference.Preference; import android.preference.TwoStatePreference; @@ -55,7 +56,7 @@ public class SettingPref { return true; } - protected int getResId(Context context, int value) { + protected String getCaption(Resources res, int value) { throw new UnsupportedOperationException(); } @@ -71,7 +72,7 @@ public class SettingPref { } else if (p instanceof DropDownPreference) { mDropDown = (DropDownPreference) p; for (int value : mValues) { - mDropDown.addItem(getResId(context, value), value); + mDropDown.addItem(getCaption(context.getResources(), value), value); } } update(context); diff --git a/src/com/android/settings/search/Ranking.java b/src/com/android/settings/search/Ranking.java index 074a8d78b..80ea83ae6 100644 --- a/src/com/android/settings/search/Ranking.java +++ b/src/com/android/settings/search/Ranking.java @@ -30,6 +30,7 @@ import com.android.settings.WirelessSettings; import com.android.settings.accessibility.AccessibilitySettings; import com.android.settings.bluetooth.BluetoothSettings; import com.android.settings.deviceinfo.Memory; +import com.android.settings.fuelgauge.BatterySaverSettings; import com.android.settings.fuelgauge.PowerUsageSummary; import com.android.settings.inputmethod.InputMethodAndLanguageSettings; import com.android.settings.location.LocationSettings; @@ -103,6 +104,7 @@ public final class Ranking { sRankMap.put(Memory.class.getName(), RANK_MEMORY); sRankMap.put(PowerUsageSummary.class.getName(), RANK_POWER_USAGE); + sRankMap.put(BatterySaverSettings.class.getName(), RANK_POWER_USAGE); sRankMap.put(UserSettings.class.getName(), RANK_USERS); diff --git a/src/com/android/settings/search/SearchIndexableResources.java b/src/com/android/settings/search/SearchIndexableResources.java index 7c96a4a6e..086ebfc70 100644 --- a/src/com/android/settings/search/SearchIndexableResources.java +++ b/src/com/android/settings/search/SearchIndexableResources.java @@ -33,6 +33,7 @@ import com.android.settings.WirelessSettings; import com.android.settings.accessibility.AccessibilitySettings; import com.android.settings.bluetooth.BluetoothSettings; import com.android.settings.deviceinfo.Memory; +import com.android.settings.fuelgauge.BatterySaverSettings; import com.android.settings.fuelgauge.PowerUsageSummary; import com.android.settings.inputmethod.InputMethodAndLanguageSettings; import com.android.settings.location.LocationSettings; @@ -154,6 +155,13 @@ public final class SearchIndexableResources { PowerUsageSummary.class.getName(), R.drawable.ic_settings_battery)); + sResMap.put(BatterySaverSettings.class.getName(), + new SearchIndexableResource( + Ranking.getRankForClassName(BatterySaverSettings.class.getName()), + R.xml.battery_saver_settings, + BatterySaverSettings.class.getName(), + R.drawable.ic_settings_battery)); + sResMap.put(UserSettings.class.getName(), new SearchIndexableResource( Ranking.getRankForClassName(UserSettings.class.getName()), |