diff options
author | Michael Bestas <mikeioannina@gmail.com> | 2015-02-28 21:30:04 +0200 |
---|---|---|
committer | Steve Kondik <steve@cyngn.com> | 2015-11-03 18:52:03 -0800 |
commit | 821fd62d952e380a260fc6edae8919284785796a (patch) | |
tree | 17882ad31e02f1690d65292214bb418857ec3ec4 /src/com/android/settings/fuelgauge | |
parent | b0b82ba44ec037fab81f47353c17e85c794f8051 (diff) | |
download | packages_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.java | 228 | ||||
-rw-r--r-- | src/com/android/settings/fuelgauge/PowerUsageSummary.java | 89 |
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 |