summaryrefslogtreecommitdiffstats
path: root/src/com/android
diff options
context:
space:
mode:
authorJohn Spurlock <jspurlock@google.com>2014-06-10 21:36:18 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2014-06-10 21:36:19 +0000
commite9ee5e2cede8d7e8fd7791113903df7eff1ec75a (patch)
tree12802aad9e66d0967bf35bd5d93e2b9e66df62bb /src/com/android
parent8da48ee882825c43bce7068382ad730fbbc060e7 (diff)
parentc7f8e8ce69e80ea495472aade5f8569c6583c5e8 (diff)
downloadpackages_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')
-rw-r--r--src/com/android/settings/DevelopmentSettings.java17
-rw-r--r--src/com/android/settings/Settings.java1
-rw-r--r--src/com/android/settings/SettingsActivity.java7
-rw-r--r--src/com/android/settings/fuelgauge/BatterySaverSettings.java171
-rw-r--r--src/com/android/settings/fuelgauge/PowerUsageSummary.java11
-rw-r--r--src/com/android/settings/notification/DropDownPreference.java8
-rw-r--r--src/com/android/settings/notification/OtherSoundSettings.java30
-rw-r--r--src/com/android/settings/notification/SettingPref.java5
-rw-r--r--src/com/android/settings/search/Ranking.java2
-rw-r--r--src/com/android/settings/search/SearchIndexableResources.java8
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()),