summaryrefslogtreecommitdiffstats
path: root/src/com/android/settings/fuelgauge
diff options
context:
space:
mode:
authorMichael Bestas <mikeioannina@gmail.com>2015-02-28 21:30:04 +0200
committerSteve Kondik <steve@cyngn.com>2015-11-03 18:52:03 -0800
commit821fd62d952e380a260fc6edae8919284785796a (patch)
tree17882ad31e02f1690d65292214bb418857ec3ec4 /src/com/android/settings/fuelgauge
parentb0b82ba44ec037fab81f47353c17e85c794f8051 (diff)
downloadpackages_apps_Settings-821fd62d952e380a260fc6edae8919284785796a.zip
packages_apps_Settings-821fd62d952e380a260fc6edae8919284785796a.tar.gz
packages_apps_Settings-821fd62d952e380a260fc6edae8919284785796a.tar.bz2
Settings: Cleanup battery saver settings
* Add back auto battery saver * Add back support for battery saver on devices without perf profiles Change-Id: I562420a81592fde54a96dca88a71ed9137bb59a9
Diffstat (limited to 'src/com/android/settings/fuelgauge')
-rw-r--r--src/com/android/settings/fuelgauge/BatterySaverSettings.java228
-rw-r--r--src/com/android/settings/fuelgauge/PowerUsageSummary.java89
2 files changed, 81 insertions, 236 deletions
diff --git a/src/com/android/settings/fuelgauge/BatterySaverSettings.java b/src/com/android/settings/fuelgauge/BatterySaverSettings.java
deleted file mode 100644
index d8a9ca0..0000000
--- a/src/com/android/settings/fuelgauge/BatterySaverSettings.java
+++ /dev/null
@@ -1,228 +0,0 @@
-/*
- * 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 static android.os.PowerManager.ACTION_POWER_SAVE_MODE_CHANGING;
-
-import android.content.BroadcastReceiver;
-import android.content.ContentResolver;
-import android.content.Context;
-import android.content.Intent;
-import android.content.IntentFilter;
-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.PowerManager;
-import android.provider.Settings.Global;
-import android.util.Log;
-import android.widget.Switch;
-
-import com.android.internal.logging.MetricsLogger;
-import com.android.settings.R;
-import com.android.settings.SettingsActivity;
-import com.android.settings.SettingsPreferenceFragment;
-import com.android.settings.Utils;
-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 boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG);
- private static final String KEY_TURN_ON_AUTOMATICALLY = "turn_on_automatically";
- private static final long WAIT_FOR_SWITCH_ANIM = 500;
-
- private final Handler mHandler = new Handler();
- private final SettingsObserver mSettingsObserver = new SettingsObserver(mHandler);
- private final Receiver mReceiver = new Receiver();
-
- private Context mContext;
- private boolean mCreated;
- private SettingPref mTriggerPref;
- private SwitchBar mSwitchBar;
- private Switch mSwitch;
- private boolean mValidListener;
- private PowerManager mPowerManager;
-
- @Override
- protected int getMetricsCategory() {
- return MetricsLogger.FUELGAUGE_BATTERY_SAVER;
- }
-
- @Override
- public void onActivityCreated(Bundle savedInstanceState) {
- super.onActivityCreated(savedInstanceState);
- if (mCreated) {
- mSwitchBar.show();
- return;
- }
- mCreated = true;
- addPreferencesFromResource(R.xml.battery_saver_settings);
-
- mContext = getActivity();
- mSwitchBar = ((SettingsActivity) mContext).getSwitchBar();
- mSwitch = mSwitchBar.getSwitch();
- mSwitchBar.show();
-
- mTriggerPref = new SettingPref(SettingPref.TYPE_GLOBAL, KEY_TURN_ON_AUTOMATICALLY,
- Global.LOW_POWER_MODE_TRIGGER_LEVEL,
- 0, /*default*/
- 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,
- Utils.formatPercentage(value));
- }
- return res.getString(R.string.battery_saver_turn_on_automatically_never);
- }
- };
- mTriggerPref.init(this);
-
- mPowerManager = (PowerManager) mContext.getSystemService(Context.POWER_SERVICE);
- }
-
- @Override
- public void onDestroyView() {
- super.onDestroyView();
- mSwitchBar.hide();
- }
-
- @Override
- public void onResume() {
- super.onResume();
- mSettingsObserver.setListening(true);
- mReceiver.setListening(true);
- if (!mValidListener) {
- mSwitchBar.addOnSwitchChangeListener(this);
- mValidListener = true;
- }
- updateSwitch();
- }
-
- @Override
- public void onPause() {
- super.onPause();
- mSettingsObserver.setListening(false);
- mReceiver.setListening(false);
- if (mValidListener) {
- mSwitchBar.removeOnSwitchChangeListener(this);
- mValidListener = false;
- }
- }
-
- @Override
- public void onSwitchChanged(Switch switchView, boolean isChecked) {
- mHandler.removeCallbacks(mStartMode);
- if (isChecked) {
- mHandler.postDelayed(mStartMode, WAIT_FOR_SWITCH_ANIM);
- } else {
- if (DEBUG) Log.d(TAG, "Stopping low power mode from settings");
- trySetPowerSaveMode(false);
- }
- }
-
- private void trySetPowerSaveMode(boolean mode) {
- if (!mPowerManager.setPowerSaveMode(mode)) {
- if (DEBUG) Log.d(TAG, "Setting mode failed, fallback to current value");
- mHandler.post(mUpdateSwitch);
- }
- }
-
- private void updateSwitch() {
- final boolean mode = mPowerManager.isPowerSaveMode();
- if (DEBUG) Log.d(TAG, "updateSwitch: isChecked=" + mSwitch.isChecked() + " mode=" + mode);
- if (mode == mSwitch.isChecked()) return;
-
- // set listener to null so that that code below doesn't trigger onCheckedChanged()
- if (mValidListener) {
- mSwitchBar.removeOnSwitchChangeListener(this);
- }
- mSwitch.setChecked(mode);
- if (mValidListener) {
- mSwitchBar.addOnSwitchChangeListener(this);
- }
- }
-
- private final Runnable mUpdateSwitch = new Runnable() {
- @Override
- public void run() {
- updateSwitch();
- }
- };
-
- private final Runnable mStartMode = new Runnable() {
- @Override
- public void run() {
- AsyncTask.execute(new Runnable() {
- @Override
- public void run() {
- if (DEBUG) Log.d(TAG, "Starting low power mode from settings");
- trySetPowerSaveMode(true);
- }
- });
- }
- };
-
- private final class Receiver extends BroadcastReceiver {
- private boolean mRegistered;
-
- @Override
- public void onReceive(Context context, Intent intent) {
- if (DEBUG) Log.d(TAG, "Received " + intent.getAction());
- mHandler.post(mUpdateSwitch);
- }
-
- public void setListening(boolean listening) {
- if (listening && !mRegistered) {
- mContext.registerReceiver(this, new IntentFilter(ACTION_POWER_SAVE_MODE_CHANGING));
- mRegistered = true;
- } else if (!listening && mRegistered) {
- mContext.unregisterReceiver(this);
- mRegistered = false;
- }
- }
- }
-
- private final class SettingsObserver extends ContentObserver {
- 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_TRIGGER_LEVEL_URI.equals(uri)) {
- mTriggerPref.update(mContext);
- }
- }
-
- public void setListening(boolean listening) {
- final ContentResolver cr = getContentResolver();
- if (listening) {
- 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 445896d..8f20bce 100644
--- a/src/com/android/settings/fuelgauge/PowerUsageSummary.java
+++ b/src/com/android/settings/fuelgauge/PowerUsageSummary.java
@@ -18,16 +18,25 @@ package com.android.settings.fuelgauge;
import android.app.Activity;
import android.graphics.drawable.Drawable;
+import android.app.AlertDialog;
+import android.content.Context;
+import android.content.DialogInterface;
+import android.content.Intent;
+import android.content.res.Resources;
+import android.os.BatteryManager;
import android.os.BatteryStats;
import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
+import android.os.PowerManager;
import android.os.Process;
import android.os.UserHandle;
import android.preference.Preference;
import android.preference.PreferenceGroup;
import android.preference.PreferenceScreen;
+import android.preference.SwitchPreference;
+import android.provider.Settings;
import android.text.TextUtils;
import android.util.SparseArray;
import android.util.TypedValue;
@@ -63,8 +72,11 @@ public class PowerUsageSummary extends PowerUsageBase {
static final String TAG = "PowerUsageSummary";
private static final String KEY_APP_LIST = "app_list";
+
private static final String KEY_BATTERY_HISTORY = "battery_history";
+ private static final String KEY_BATTERY_SAVER = "low_power";
+
private static final int MENU_STATS_TYPE = Menu.FIRST;
private static final int MENU_BATTERY_SAVER = Menu.FIRST + 2;
private static final int MENU_HIGH_POWER_APPS = Menu.FIRST + 3;
@@ -73,6 +85,8 @@ public class PowerUsageSummary extends PowerUsageBase {
private BatteryHistoryPreference mHistPref;
private PreferenceGroup mAppListGroup;
+ private boolean mBatteryPluggedIn;
+
private int mStatsType = BatteryStats.STATS_SINCE_CHARGED;
private static final int MIN_POWER_THRESHOLD_MILLI_AMP = 5;
@@ -80,6 +94,10 @@ public class PowerUsageSummary extends PowerUsageBase {
private static final int MIN_AVERAGE_POWER_THRESHOLD_MILLI_AMP = 10;
private static final int SECONDS_IN_HOUR = 60 * 60;
+ private SwitchPreference mBatterySaverPref;
+
+ private PowerManager mPowerManager;
+
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
@@ -87,6 +105,9 @@ public class PowerUsageSummary extends PowerUsageBase {
addPreferencesFromResource(R.xml.power_usage_summary);
mHistPref = (BatteryHistoryPreference) findPreference(KEY_BATTERY_HISTORY);
mAppListGroup = (PreferenceGroup) findPreference(KEY_APP_LIST);
+ mBatterySaverPref = (SwitchPreference) findPreference(KEY_BATTERY_SAVER);
+
+ mPowerManager = (PowerManager)getSystemService(Context.POWER_SERVICE);
}
@Override
@@ -98,6 +119,10 @@ public class PowerUsageSummary extends PowerUsageBase {
public void onResume() {
super.onResume();
refreshStats();
+
+ if (mBatterySaverPref != null) {
+ refreshBatterySaverOptions();
+ }
}
@Override
@@ -118,7 +143,7 @@ public class PowerUsageSummary extends PowerUsageBase {
@Override
public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) {
if (!(preference instanceof PowerGaugePreference)) {
- return false;
+ return super.onPreferenceTreeClick(preferenceScreen, preference);
}
PowerGaugePreference pgp = (PowerGaugePreference) preference;
BatteryEntry entry = pgp.getInfo();
@@ -143,11 +168,6 @@ public class PowerUsageSummary extends PowerUsageBase {
}
@Override
- protected int getHelpResource() {
- return R.string.help_url_battery;
- }
-
- @Override
public boolean onOptionsItemSelected(MenuItem item) {
final SettingsActivity sa = (SettingsActivity) getActivity();
switch (item.getItemId()) {
@@ -160,8 +180,44 @@ public class PowerUsageSummary extends PowerUsageBase {
refreshStats();
return true;
case MENU_BATTERY_SAVER:
- sa.startPreferencePanel(BatterySaverSettings.class.getName(), null,
- R.string.battery_saver, null, null, 0);
+ Resources res = getResources();
+
+ final int defWarnLevel = res.getInteger(
+ com.android.internal.R.integer.config_lowBatteryWarningLevel);
+ final int value = Settings.Global.getInt(getContentResolver(),
+ Settings.Global.LOW_POWER_MODE_TRIGGER_LEVEL, defWarnLevel);
+
+ int selectedIndex = -1;
+ final int[] intVals = res.getIntArray(R.array.battery_saver_trigger_values);
+ String[] strVals = new String[intVals.length];
+ for (int i = 0; i < intVals.length; i++) {
+ if (intVals[i] == value) {
+ selectedIndex = i;
+ }
+ if (intVals[i] > 0 && intVals[i] < 100) {
+ strVals[i] = res.getString(R.string.battery_saver_turn_on_automatically_pct,
+ intVals[i]);
+ } else {
+ strVals[i] =
+ res.getString(R.string.battery_saver_turn_on_automatically_never);
+ }
+ }
+
+ AlertDialog.Builder builder = new AlertDialog.Builder(getActivity())
+ .setTitle(R.string.battery_saver_turn_on_automatically_title)
+ .setSingleChoiceItems(strVals,
+ selectedIndex,
+ new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ Settings.Global.putInt(getContentResolver(),
+ Settings.Global.LOW_POWER_MODE_TRIGGER_LEVEL,
+ intVals[which]);
+ }
+ })
+ .setPositiveButton(R.string.okay, null);
+ builder.create().show();
+
return true;
case MENU_HIGH_POWER_APPS:
Bundle args = new Bundle();
@@ -181,6 +237,16 @@ public class PowerUsageSummary extends PowerUsageBase {
mAppListGroup.addPreference(notAvailable);
}
+ private void refreshBatterySaverOptions() {
+ if (mBatterySaverPref != null) {
+ mBatterySaverPref.setEnabled(!mBatteryPluggedIn);
+ mBatterySaverPref.setChecked(!mBatteryPluggedIn && mPowerManager.isPowerSaveMode());
+ mBatterySaverPref.setSummary(mBatteryPluggedIn
+ ? R.string.battery_saver_summary_unavailable
+ : R.string.battery_saver_summary);
+ }
+ }
+
private static boolean isSharedGid(int uid) {
return UserHandle.getAppIdFromSharedAppGid(uid) > 0;
}
@@ -189,6 +255,13 @@ public class PowerUsageSummary extends PowerUsageBase {
return uid >= Process.SYSTEM_UID && uid < Process.FIRST_APPLICATION_UID;
}
+ private boolean isBatteryPluggedIn(Intent intent) {
+ int status = intent.getIntExtra(BatteryManager.EXTRA_STATUS,
+ BatteryManager.BATTERY_STATUS_UNKNOWN);
+ return status == BatteryManager.BATTERY_STATUS_CHARGING
+ || status == BatteryManager.BATTERY_STATUS_FULL;
+ }
+
/**
* We want to coalesce some UIDs. For example, dex2oat runs under a shared gid that
* exists for all users of the same app. We detect this case and merge the power use