Add BatterySaver as SettingSlice
Convert BatterySaverController to TogglePrefController.
This was the first MasterSwitchController, so we needed
to add the preference case to updateState.
Test: Robotests
Change-Id: I32f3dee0b183807c66c19513b8b064af8f369c2a
Fixes: 67996992
diff --git a/res/xml/power_usage_summary.xml b/res/xml/power_usage_summary.xml
index fbe4e0d..d89653a 100644
--- a/res/xml/power_usage_summary.xml
+++ b/res/xml/power_usage_summary.xml
@@ -36,7 +36,8 @@
<com.android.settings.widget.MasterSwitchPreference
android:fragment="com.android.settings.fuelgauge.batterysaver.BatterySaverSettings"
android:key="battery_saver_summary"
- android:title="@string/battery_saver"/>
+ android:title="@string/battery_saver"
+ settings:controller="com.android.settings.fuelgauge.BatterySaverController"/>
<Preference
android:fragment="com.android.settings.fuelgauge.SmartBatterySettings"
diff --git a/src/com/android/settings/core/TogglePreferenceController.java b/src/com/android/settings/core/TogglePreferenceController.java
index 5431f4d..1cf4289 100644
--- a/src/com/android/settings/core/TogglePreferenceController.java
+++ b/src/com/android/settings/core/TogglePreferenceController.java
@@ -17,6 +17,8 @@
import android.support.v7.preference.Preference;
import android.support.v7.preference.TwoStatePreference;
+import com.android.settings.widget.MasterSwitchPreference;
+
/**
* Abstract class that consolidates logic for updating toggle controllers.
* It automatically handles the getting and setting of the switch UI element.
@@ -46,7 +48,11 @@
@Override
public final void updateState(Preference preference) {
- ((TwoStatePreference) preference).setChecked(isChecked());
+ if (preference instanceof TwoStatePreference) {
+ ((TwoStatePreference) preference).setChecked(isChecked());
+ } if (preference instanceof MasterSwitchPreference) {
+ ((MasterSwitchPreference) preference).setChecked(isChecked());
+ }
}
@Override
diff --git a/src/com/android/settings/fuelgauge/BatterySaverController.java b/src/com/android/settings/fuelgauge/BatterySaverController.java
index 85fb9f5..58b7d13 100644
--- a/src/com/android/settings/fuelgauge/BatterySaverController.java
+++ b/src/com/android/settings/fuelgauge/BatterySaverController.java
@@ -21,42 +21,36 @@
import android.os.PowerManager;
import android.provider.Settings;
import android.support.annotation.VisibleForTesting;
-import android.support.v7.preference.Preference;
import android.support.v7.preference.PreferenceScreen;
+
import com.android.settings.R;
import com.android.settings.Utils;
-import com.android.settings.core.PreferenceControllerMixin;
+import com.android.settings.core.TogglePreferenceController;
import com.android.settings.dashboard.conditional.BatterySaverCondition;
import com.android.settings.dashboard.conditional.ConditionManager;
import com.android.settings.widget.MasterSwitchPreference;
-import com.android.settingslib.core.AbstractPreferenceController;
-import com.android.settingslib.core.lifecycle.Lifecycle;
import com.android.settingslib.core.lifecycle.LifecycleObserver;
import com.android.settingslib.core.lifecycle.events.OnStart;
import com.android.settingslib.core.lifecycle.events.OnStop;
-import static android.os.PowerManager.ACTION_POWER_SAVE_MODE_CHANGING;
-
-public class BatterySaverController extends AbstractPreferenceController
- implements PreferenceControllerMixin, Preference.OnPreferenceChangeListener,
- LifecycleObserver, OnStart, OnStop, BatterySaverReceiver.BatterySaverListener {
+public class BatterySaverController extends TogglePreferenceController
+ implements LifecycleObserver, OnStart, OnStop, BatterySaverReceiver.BatterySaverListener {
private static final String KEY_BATTERY_SAVER = "battery_saver_summary";
private final BatterySaverReceiver mBatteryStateChangeReceiver;
private final PowerManager mPowerManager;
private MasterSwitchPreference mBatterySaverPref;
- public BatterySaverController(Context context, Lifecycle lifecycle) {
- super(context);
+ public BatterySaverController(Context context) {
+ super(context, KEY_BATTERY_SAVER);
- lifecycle.addObserver(this);
mPowerManager = (PowerManager) mContext.getSystemService(Context.POWER_SERVICE);
mBatteryStateChangeReceiver = new BatterySaverReceiver(context);
mBatteryStateChangeReceiver.setBatterySaverListener(this);
}
@Override
- public boolean isAvailable() {
- return true;
+ public int getAvailabilityStatus() {
+ return AVAILABLE;
}
@Override
@@ -71,17 +65,9 @@
}
@Override
- public void updateState(Preference preference) {
- mBatterySaverPref.setChecked(mPowerManager.isPowerSaveMode());
- updateSummary();
- }
-
- @Override
- public boolean onPreferenceChange(Preference preference, Object newValue) {
- final boolean saverOn = (Boolean) newValue;
- if (saverOn != mPowerManager.isPowerSaveMode()
- && !mPowerManager.setPowerSaveMode(saverOn)) {
- // Do nothing if power save mode doesn't set correctly
+ public boolean setChecked(boolean isChecked) {
+ mBatterySaverPref.setChecked(isChecked);
+ if (!mPowerManager.setPowerSaveMode(isChecked)) {
return false;
}
@@ -91,6 +77,11 @@
}
@Override
+ public boolean isChecked() {
+ return mPowerManager.isPowerSaveMode();
+ }
+
+ @Override
public void onStart() {
mContext.getContentResolver().registerContentObserver(
Settings.Global.getUriFor(Settings.Global.LOW_POWER_MODE_TRIGGER_LEVEL)
@@ -110,7 +101,8 @@
ConditionManager.get(mContext).getCondition(BatterySaverCondition.class).refreshState();
}
- private void updateSummary() {
+ @Override
+ public String getSummary() {
final boolean mode = mPowerManager.isPowerSaveMode();
final int format = mode ? R.string.battery_saver_on_summary
: R.string.battery_saver_off_summary;
@@ -119,10 +111,12 @@
final int percentFormat = percent > 0 ? R.string.battery_saver_desc_turn_on_auto_pct
: R.string.battery_saver_desc_turn_on_auto_never;
- final String summary = mContext.getString(format, mContext.getString(percentFormat,
+ return mContext.getString(format, mContext.getString(percentFormat,
Utils.formatPercentage(percent)));
+ }
- mBatterySaverPref.setSummary(summary);
+ private void updateSummary() {
+ mBatterySaverPref.setSummary(getSummary());
}
private final ContentObserver mObserver = new ContentObserver(new Handler()) {
diff --git a/src/com/android/settings/fuelgauge/PowerUsageSummary.java b/src/com/android/settings/fuelgauge/PowerUsageSummary.java
index 659166a..e6fd449 100644
--- a/src/com/android/settings/fuelgauge/PowerUsageSummary.java
+++ b/src/com/android/settings/fuelgauge/PowerUsageSummary.java
@@ -59,6 +59,7 @@
import com.android.settingslib.utils.PowerUtil;
import com.android.settingslib.utils.StringUtil;
+
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
@@ -232,17 +233,20 @@
final SettingsActivity activity = (SettingsActivity) getActivity();
final List<AbstractPreferenceController> controllers = new ArrayList<>();
mBatteryHeaderPreferenceController = new BatteryHeaderPreferenceController(
- context, activity, this /* host */, getLifecycle());
+ context, activity, this /* host */, lifecycle);
controllers.add(mBatteryHeaderPreferenceController);
mBatteryAppListPreferenceController = new BatteryAppListPreferenceController(context,
KEY_APP_LIST, lifecycle, activity, this);
controllers.add(mBatteryAppListPreferenceController);
mBatteryTipPreferenceController = new BatteryTipPreferenceController(context,
- KEY_BATTERY_TIP, (SettingsActivity) getActivity(), this, this);
+ KEY_BATTERY_TIP, (SettingsActivity) getActivity(), this /* fragment */, this /*
+ BatteryTipListener */);
controllers.add(mBatteryTipPreferenceController);
- controllers.add(new BatterySaverController(context, getLifecycle()));
+ BatterySaverController batterySaverController = new BatterySaverController(context);
+ controllers.add(batterySaverController);
controllers.add(new BatteryPercentagePreferenceController(context));
+ lifecycle.addObserver(batterySaverController);
return controllers;
}
@@ -322,7 +326,8 @@
@VisibleForTesting
void updateLastFullChargePreference(long timeMs) {
- final CharSequence timeSequence = StringUtil.formatRelativeTime(getContext(), timeMs, false);
+ final CharSequence timeSequence = StringUtil.formatRelativeTime(getContext(), timeMs,
+ false);
mLastFullChargePref.setSubtitle(timeSequence);
}
diff --git a/src/com/android/settings/fuelgauge/PowerUsageSummaryLegacy.java b/src/com/android/settings/fuelgauge/PowerUsageSummaryLegacy.java
index e6c4923..14a445b 100644
--- a/src/com/android/settings/fuelgauge/PowerUsageSummaryLegacy.java
+++ b/src/com/android/settings/fuelgauge/PowerUsageSummaryLegacy.java
@@ -313,12 +313,14 @@
controllers.add(mBatteryHeaderPreferenceController);
controllers.add(new AutoBrightnessPreferenceController(context, KEY_AUTO_BRIGHTNESS));
controllers.add(new TimeoutPreferenceController(context, KEY_SCREEN_TIMEOUT));
- controllers.add(new BatterySaverController(context, getLifecycle()));
controllers.add(new BatteryPercentagePreferenceController(context));
controllers.add(new AmbientDisplayPreferenceController(
context,
new AmbientDisplayConfiguration(context),
KEY_AMBIENT_DISPLAY));
+ BatterySaverController batterySaverController = new BatterySaverController(context);
+ controllers.add(batterySaverController);
+ getLifecycle().addObserver(batterySaverController);
return controllers;
}
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/BatterySaverControllerTest.java b/tests/robotests/src/com/android/settings/fuelgauge/BatterySaverControllerTest.java
index c75a6a6..6cc3310 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/BatterySaverControllerTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/BatterySaverControllerTest.java
@@ -53,7 +53,7 @@
public void setUp() {
MockitoAnnotations.initMocks(this);
- mBatterySaverController = spy(new BatterySaverController(mContext, mLifecycle));
+ mBatterySaverController = spy(new BatterySaverController(mContext));
ReflectionHelpers.setField(mBatterySaverController, "mPowerManager", mPowerManager);
ReflectionHelpers.setField(mBatterySaverController, "mBatterySaverPref", mBatterySaverPref);
doNothing().when(mBatterySaverController).refreshConditionManager();