From 5972773e476eb2d5290c644e721016df19b8c9d6 Mon Sep 17 00:00:00 2001 From: Makoto Onuki Date: Wed, 4 Apr 2018 12:44:05 -0700 Subject: [PATCH] Once auto-battery saver is ever set, don't show suggestion Bug: 77228046 Test: manual test after adb shell settings delete secure suppress_auto_battery_saver_suggestion Test: m -j ROBOTEST_FILTER=BatterySaverButtonPreferenceControllerTest RunSettingsRoboTests Test: b ROBOTEST_FILTER=BatterySaverUtilsTest RunSettingsLibRoboTests Change-Id: Ib224263dc20e7844b7a79fe175fde26c773bd05a --- .../fuelgauge/BatterySaverUtils.java | 21 +++++++++- .../fuelgauge/BatterySaverUtilsTest.java | 39 +++++++++++++++++++ .../power/PowerNotificationWarnings.java | 2 +- 3 files changed, 59 insertions(+), 3 deletions(-) diff --git a/packages/SettingsLib/src/com/android/settingslib/fuelgauge/BatterySaverUtils.java b/packages/SettingsLib/src/com/android/settingslib/fuelgauge/BatterySaverUtils.java index 835ff07c4006d..f7b16f8b18db2 100644 --- a/packages/SettingsLib/src/com/android/settingslib/fuelgauge/BatterySaverUtils.java +++ b/packages/SettingsLib/src/com/android/settingslib/fuelgauge/BatterySaverUtils.java @@ -148,15 +148,32 @@ public class BatterySaverUtils { Secure.putInt(context.getContentResolver(), Secure.LOW_POWER_WARNING_ACKNOWLEDGED, 1); } + /** + * Don't show the automatic battery suggestion notification in the future. + */ public static void suppressAutoBatterySaver(Context context) { Secure.putInt(context.getContentResolver(), Secure.SUPPRESS_AUTO_BATTERY_SAVER_SUGGESTION, 1); } - public static void scheduleAutoBatterySaver(Context context, int level) { + /** + * Set the automatic battery saver trigger level to {@code level}. + */ + public static void setAutoBatterySaverTriggerLevel(Context context, int level) { + if (level > 0) { + suppressAutoBatterySaver(context); + } + Global.putInt(context.getContentResolver(), Global.LOW_POWER_MODE_TRIGGER_LEVEL, level); + } + + /** + * Set the automatic battery saver trigger level to {@code level}, but only when + * automatic battery saver isn't enabled yet. + */ + public static void ensureAutoBatterySaver(Context context, int level) { if (Global.getInt(context.getContentResolver(), Global.LOW_POWER_MODE_TRIGGER_LEVEL, 0) == 0) { - Global.putInt(context.getContentResolver(), Global.LOW_POWER_MODE_TRIGGER_LEVEL, level); + setAutoBatterySaverTriggerLevel(context, level); } } } diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/fuelgauge/BatterySaverUtilsTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/fuelgauge/BatterySaverUtilsTest.java index b33df3031ce9e..ba5a2c5e5fe78 100644 --- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/fuelgauge/BatterySaverUtilsTest.java +++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/fuelgauge/BatterySaverUtilsTest.java @@ -16,7 +16,9 @@ package com.android.settingslib.fuelgauge; +import static com.google.common.truth.Truth.assertThat; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertThat; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyBoolean; import static org.mockito.ArgumentMatchers.eq; @@ -28,6 +30,7 @@ import android.content.ContentResolver; import android.content.Context; import android.content.Intent; import android.os.PowerManager; +import android.provider.Settings.Global; import android.provider.Settings.Secure; import com.android.settingslib.SettingsLibRobolectricTestRunner; @@ -41,6 +44,9 @@ import org.mockito.MockitoAnnotations; @RunWith(SettingsLibRobolectricTestRunner.class) public class BatterySaverUtilsTest { + final int BATTERY_SAVER_THRESHOLD_1 = 15; + final int BATTERY_SAVER_THRESHOLD_2 = 20; + @Mock Context mMockContext; @@ -149,4 +155,37 @@ public class BatterySaverUtilsTest { assertEquals(-2, Secure.getInt(mMockResolver, Secure.LOW_POWER_MANUAL_ACTIVATION_COUNT, -2)); } + + @Test + public void testEnsureAutoBatterysaver_setNewPositiveValue_doNotOverwrite() throws Exception { + Global.putString(mMockResolver, Global.LOW_POWER_MODE_TRIGGER_LEVEL, "null"); + + BatterySaverUtils.ensureAutoBatterySaver(mMockContext, BATTERY_SAVER_THRESHOLD_1); + + assertThat(Secure.getInt(mMockResolver, Global.LOW_POWER_MODE_TRIGGER_LEVEL, -1)) + .isEqualTo(BATTERY_SAVER_THRESHOLD_1); + + // Once a positive number is set, ensureAutoBatterySaver() won't overwrite it. + BatterySaverUtils.ensureAutoBatterySaver(mMockContext, BATTERY_SAVER_THRESHOLD_2); + assertThat(Secure.getInt(mMockResolver, Global.LOW_POWER_MODE_TRIGGER_LEVEL, -1)) + .isEqualTo(BATTERY_SAVER_THRESHOLD_1); + } + + @Test + public void testSetAutoBatterySaverTriggerLevel_setSuppressSuggestion() throws Exception { + Global.putString(mMockResolver, Global.LOW_POWER_MODE_TRIGGER_LEVEL, "null"); + Secure.putString(mMockResolver, Secure.SUPPRESS_AUTO_BATTERY_SAVER_SUGGESTION, "null"); + + BatterySaverUtils.setAutoBatterySaverTriggerLevel(mMockContext, 0); + assertThat(Global.getInt(mMockResolver, Global.LOW_POWER_MODE_TRIGGER_LEVEL, -1)) + .isEqualTo(0); + assertThat(Secure.getInt(mMockResolver, Secure.SUPPRESS_AUTO_BATTERY_SAVER_SUGGESTION, -1)) + .isEqualTo(-1); // not set. + + BatterySaverUtils.setAutoBatterySaverTriggerLevel(mMockContext, BATTERY_SAVER_THRESHOLD_1 ); + assertThat( Global.getInt(mMockResolver, Global.LOW_POWER_MODE_TRIGGER_LEVEL, -1)) + .isEqualTo(BATTERY_SAVER_THRESHOLD_1); + assertThat(Secure.getInt(mMockResolver, Secure.SUPPRESS_AUTO_BATTERY_SAVER_SUGGESTION, -1)) + .isEqualTo(1); + } } diff --git a/packages/SystemUI/src/com/android/systemui/power/PowerNotificationWarnings.java b/packages/SystemUI/src/com/android/systemui/power/PowerNotificationWarnings.java index a70b3587f195e..40ce69b8e5800 100644 --- a/packages/SystemUI/src/com/android/systemui/power/PowerNotificationWarnings.java +++ b/packages/SystemUI/src/com/android/systemui/power/PowerNotificationWarnings.java @@ -514,7 +514,7 @@ public class PowerNotificationWarnings implements PowerUI.WarningsUI { autoTriggerThreshold = 15; } - BatterySaverUtils.scheduleAutoBatterySaver(mContext, autoTriggerThreshold); + BatterySaverUtils.ensureAutoBatterySaver(mContext, autoTriggerThreshold); showAutoSaverEnabledConfirmation(); }