From d12d7220990885557581fb77d3f9e47419127192 Mon Sep 17 00:00:00 2001 From: Salvador Martinez Date: Fri, 22 Mar 2019 13:42:39 -0700 Subject: [PATCH] Flip the preference for sticky battery saver Instead of toggled on being to keep battery saver on, the UX writers would like to make toggled on be turn battery saver off automatically. Also turns the controller into a TogglePreferenceController, because those exist apparently. Test: visual inspection, tests pass Fixes: 126938839 Change-Id: Iffac536d0b1956d4534ca1b5fa5c6440c4d3a3ff --- res/values/strings.xml | 6 --- res/xml/battery_saver_settings.xml | 4 +- .../BatterySaverStickyPreferenceController.java | 47 ++++++++++++++++------ ...BatterySaverStickyPreferenceControllerTest.java | 16 ++++---- 4 files changed, 44 insertions(+), 29 deletions(-) diff --git a/res/values/strings.xml b/res/values/strings.xml index 23a5c89eee..7cc904f8ec 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -5662,12 +5662,6 @@ Set a schedule - Keep battery saver on - - - Battery saver will stay on even after device is fully charged - - Turn off when fully charged diff --git a/res/xml/battery_saver_settings.xml b/res/xml/battery_saver_settings.xml index ae9d14d41d..c8d1d6302c 100644 --- a/res/xml/battery_saver_settings.xml +++ b/res/xml/battery_saver_settings.xml @@ -28,8 +28,8 @@ diff --git a/src/com/android/settings/fuelgauge/batterysaver/BatterySaverStickyPreferenceController.java b/src/com/android/settings/fuelgauge/batterysaver/BatterySaverStickyPreferenceController.java index 7a1f7f5d6a..7d4bdac074 100644 --- a/src/com/android/settings/fuelgauge/batterysaver/BatterySaverStickyPreferenceController.java +++ b/src/com/android/settings/fuelgauge/batterysaver/BatterySaverStickyPreferenceController.java @@ -1,40 +1,61 @@ package com.android.settings.fuelgauge.batterysaver; import android.content.Context; +import android.icu.text.NumberFormat; import android.provider.Settings; +import android.provider.Settings.Global; import androidx.preference.Preference; import androidx.preference.SwitchPreference; -import com.android.settings.core.BasePreferenceController; +import com.android.settings.R; import com.android.settings.core.PreferenceControllerMixin; +import com.android.settings.core.TogglePreferenceController; -public class BatterySaverStickyPreferenceController extends BasePreferenceController implements +public class BatterySaverStickyPreferenceController extends TogglePreferenceController implements PreferenceControllerMixin, Preference.OnPreferenceChangeListener { - public static final String LOW_POWER_STICKY_AUTO_DISABLE_ENABLED = - "low_power_sticky_auto_disable_enabled"; + private Context mContext; public BatterySaverStickyPreferenceController(Context context, String preferenceKey) { super(context, preferenceKey); + mContext = context; } @Override - public void updateState(Preference preference) { - int setting = Settings.Global.getInt(mContext.getContentResolver(), - LOW_POWER_STICKY_AUTO_DISABLE_ENABLED, 1); - - ((SwitchPreference) preference).setChecked(setting == 0); + public boolean isChecked() { + return Settings.Global.getInt(mContext.getContentResolver(), + Global.LOW_POWER_MODE_STICKY_AUTO_DISABLE_ENABLED, 1) == 1; } @Override - public boolean onPreferenceChange(Preference preference, Object newValue) { - boolean keepActive = (Boolean) newValue; + public boolean setChecked(boolean isChecked) { Settings.Global.putInt(mContext.getContentResolver(), - LOW_POWER_STICKY_AUTO_DISABLE_ENABLED, - keepActive ? 0 : 1); + Global.LOW_POWER_MODE_STICKY_AUTO_DISABLE_ENABLED, + isChecked ? 1 : 0); return true; } @Override + protected void refreshSummary(Preference preference) { + super.refreshSummary(preference); + final double stickyShutoffLevel = Settings.Global.getInt( + mContext.getContentResolver(), Global.LOW_POWER_MODE_STICKY_AUTO_DISABLE_LEVEL, 90); + final String percentage = NumberFormat + .getPercentInstance() + .format(stickyShutoffLevel / 100.0); + preference.setSummary( + mContext.getString(R.string.battery_saver_sticky_description_new, percentage)); + } + + @Override + public void updateState(Preference preference) { + int setting = Settings.Global.getInt(mContext.getContentResolver(), + Global.LOW_POWER_MODE_STICKY_AUTO_DISABLE_ENABLED, 1); + + ((SwitchPreference) preference).setChecked(setting == 1); + refreshSummary(preference); + } + + @Override public int getAvailabilityStatus() { return AVAILABLE; } diff --git a/tests/robotests/src/com/android/settings/fuelgauge/batterysaver/BatterySaverStickyPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/fuelgauge/batterysaver/BatterySaverStickyPreferenceControllerTest.java index 0ee9cfc5ed..0e7c312eb1 100644 --- a/tests/robotests/src/com/android/settings/fuelgauge/batterysaver/BatterySaverStickyPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/fuelgauge/batterysaver/BatterySaverStickyPreferenceControllerTest.java @@ -16,11 +16,11 @@ package com.android.settings.fuelgauge.batterysaver; -import static com.android.settings.fuelgauge.batterysaver.BatterySaverStickyPreferenceController.LOW_POWER_STICKY_AUTO_DISABLE_ENABLED; import static com.google.common.truth.Truth.assertThat; import android.content.Context; import android.provider.Settings; +import android.provider.Settings.Global; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -43,21 +43,21 @@ public class BatterySaverStickyPreferenceControllerTest { private int getAutoDisableSetting() { return Settings.Global.getInt(mContext.getContentResolver(), - LOW_POWER_STICKY_AUTO_DISABLE_ENABLED, + Global.LOW_POWER_MODE_STICKY_AUTO_DISABLE_ENABLED, 1); } @Test - public void testOnPreferenceChange_turnOnKeepActive_autoDisableOff() { - mController.onPreferenceChange(null, true); + public void testOnPreferenceChange_turnOnAutoOff_autoDisableOn() { + mController.setChecked(true); final int isOn = getAutoDisableSetting(); - assertThat(isOn).isEqualTo(0); + assertThat(isOn).isEqualTo(1); } @Test - public void testOnPreferenceChange_TurnOffKeepActive_autoDisableOff() { - mController.onPreferenceChange(null, false); + public void testOnPreferenceChange_TurnOffAutoOff_autoDisableOff() { + mController.setChecked(false); final int isOn = getAutoDisableSetting(); - assertThat(isOn).isEqualTo(1); + assertThat(isOn).isEqualTo(0); } } -- 2.11.0