diff options
4 files changed, 45 insertions, 12 deletions
diff --git a/packages/SettingsLib/src/com/android/settingslib/fuelgauge/BatterySaverUtils.java b/packages/SettingsLib/src/com/android/settingslib/fuelgauge/BatterySaverUtils.java index 28353ab7dff4..52f3111d967c 100644 --- a/packages/SettingsLib/src/com/android/settingslib/fuelgauge/BatterySaverUtils.java +++ b/packages/SettingsLib/src/com/android/settingslib/fuelgauge/BatterySaverUtils.java @@ -169,8 +169,11 @@ public class BatterySaverUtils { */ public static boolean maybeShowBatterySaverConfirmation(Context context, Bundle extras) { if (Secure.getInt(context.getContentResolver(), - Secure.LOW_POWER_WARNING_ACKNOWLEDGED, 0) != 0) { - return false; // Already shown. + Secure.LOW_POWER_WARNING_ACKNOWLEDGED, 0) != 0 + && Secure.getInt(context.getContentResolver(), + Secure.EXTRA_LOW_POWER_WARNING_ACKNOWLEDGED, 0) != 0) { + // Already shown. + return false; } context.sendBroadcast( getSystemUiBroadcast(ACTION_SHOW_START_SAVER_CONFIRMATION, extras)); @@ -190,8 +193,10 @@ public class BatterySaverUtils { } private static void setBatterySaverConfirmationAcknowledged(Context context) { - Secure.putIntForUser(context.getContentResolver(), Secure.LOW_POWER_WARNING_ACKNOWLEDGED, 1, - UserHandle.USER_CURRENT); + Secure.putIntForUser(context.getContentResolver(), + Secure.LOW_POWER_WARNING_ACKNOWLEDGED, 1, UserHandle.USER_CURRENT); + Secure.putIntForUser(context.getContentResolver(), + Secure.EXTRA_LOW_POWER_WARNING_ACKNOWLEDGED, 1, UserHandle.USER_CURRENT); } /** 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 a15fe9f90206..ad022a63eaf6 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 @@ -69,6 +69,7 @@ public class BatterySaverUtilsTest { @Test public void testSetPowerSaveMode_enable_firstCall_needWarning() { Secure.putString(mMockResolver, Secure.LOW_POWER_WARNING_ACKNOWLEDGED, "null"); + Secure.putString(mMockResolver, Secure.EXTRA_LOW_POWER_WARNING_ACKNOWLEDGED, "null"); Secure.putString(mMockResolver, Secure.LOW_POWER_MANUAL_ACTIVATION_COUNT, "null"); assertThat(BatterySaverUtils.setPowerSaveMode(mMockContext, true, true)).isFalse(); @@ -77,15 +78,18 @@ public class BatterySaverUtilsTest { verify(mMockPowerManager, times(0)).setPowerSaveModeEnabled(anyBoolean()); // They shouldn't have changed. + assertEquals(-1, Secure.getInt(mMockResolver, Secure.LOW_POWER_WARNING_ACKNOWLEDGED, -1)); assertEquals(-1, - Secure.getInt(mMockResolver, Secure.LOW_POWER_WARNING_ACKNOWLEDGED, -1)); + Secure.getInt(mMockResolver, Secure.EXTRA_LOW_POWER_WARNING_ACKNOWLEDGED, -1)); assertEquals(-2, Secure.getInt(mMockResolver, Secure.LOW_POWER_MANUAL_ACTIVATION_COUNT, -2)); } @Test public void testSetPowerSaveMode_enable_secondCall_needWarning() { - Secure.putInt(mMockResolver, Secure.LOW_POWER_WARNING_ACKNOWLEDGED, 1); // Already acked. + // Already acked. + Secure.putInt(mMockResolver, Secure.LOW_POWER_WARNING_ACKNOWLEDGED, 1); + Secure.putInt(mMockResolver, Secure.EXTRA_LOW_POWER_WARNING_ACKNOWLEDGED, 1); Secure.putString(mMockResolver, Secure.LOW_POWER_MANUAL_ACTIVATION_COUNT, "null"); assertThat(BatterySaverUtils.setPowerSaveMode(mMockContext, true, true)).isTrue(); @@ -94,12 +98,17 @@ public class BatterySaverUtilsTest { verify(mMockPowerManager, times(1)).setPowerSaveModeEnabled(eq(true)); assertEquals(1, Secure.getInt(mMockResolver, Secure.LOW_POWER_WARNING_ACKNOWLEDGED, -1)); - assertEquals(1, Secure.getInt(mMockResolver, Secure.LOW_POWER_MANUAL_ACTIVATION_COUNT, -2)); + assertEquals(1, + Secure.getInt(mMockResolver, Secure.EXTRA_LOW_POWER_WARNING_ACKNOWLEDGED, -1)); + assertEquals(1, + Secure.getInt(mMockResolver, Secure.LOW_POWER_MANUAL_ACTIVATION_COUNT, -2)); } @Test public void testSetPowerSaveMode_enable_thridCall_needWarning() { - Secure.putInt(mMockResolver, Secure.LOW_POWER_WARNING_ACKNOWLEDGED, 1); // Already acked. + // Already acked. + Secure.putInt(mMockResolver, Secure.LOW_POWER_WARNING_ACKNOWLEDGED, 1); + Secure.putInt(mMockResolver, Secure.EXTRA_LOW_POWER_WARNING_ACKNOWLEDGED, 1); Secure.putInt(mMockResolver, Secure.LOW_POWER_MANUAL_ACTIVATION_COUNT, 1); assertThat(BatterySaverUtils.setPowerSaveMode(mMockContext, true, true)).isTrue(); @@ -108,12 +117,16 @@ public class BatterySaverUtilsTest { verify(mMockPowerManager, times(1)).setPowerSaveModeEnabled(eq(true)); assertEquals(1, Secure.getInt(mMockResolver, Secure.LOW_POWER_WARNING_ACKNOWLEDGED, -1)); - assertEquals(2, Secure.getInt(mMockResolver, Secure.LOW_POWER_MANUAL_ACTIVATION_COUNT, -2)); + assertEquals(1, + Secure.getInt(mMockResolver, Secure.EXTRA_LOW_POWER_WARNING_ACKNOWLEDGED, -1)); + assertEquals(2, + Secure.getInt(mMockResolver, Secure.LOW_POWER_MANUAL_ACTIVATION_COUNT, -2)); } @Test public void testSetPowerSaveMode_enable_firstCall_noWarning() { Secure.putString(mMockResolver, Secure.LOW_POWER_WARNING_ACKNOWLEDGED, "null"); + Secure.putString(mMockResolver, Secure.EXTRA_LOW_POWER_WARNING_ACKNOWLEDGED, "null"); Secure.putString(mMockResolver, Secure.LOW_POWER_MANUAL_ACTIVATION_COUNT, "null"); assertThat(BatterySaverUtils.setPowerSaveMode(mMockContext, true, false)).isTrue(); @@ -122,12 +135,15 @@ public class BatterySaverUtilsTest { verify(mMockPowerManager, times(1)).setPowerSaveModeEnabled(eq(true)); assertEquals(1, Secure.getInt(mMockResolver, Secure.LOW_POWER_WARNING_ACKNOWLEDGED, -1)); + assertEquals(1, + Secure.getInt(mMockResolver, Secure.EXTRA_LOW_POWER_WARNING_ACKNOWLEDGED, -1)); assertEquals(1, Secure.getInt(mMockResolver, Secure.LOW_POWER_MANUAL_ACTIVATION_COUNT, -2)); } @Test public void testSetPowerSaveMode_disable_firstCall_noWarning() { Secure.putString(mMockResolver, Secure.LOW_POWER_WARNING_ACKNOWLEDGED, "null"); + Secure.putString(mMockResolver, Secure.EXTRA_LOW_POWER_WARNING_ACKNOWLEDGED, "null"); Secure.putString(mMockResolver, Secure.LOW_POWER_MANUAL_ACTIVATION_COUNT, "null"); // When disabling, needFirstTimeWarning doesn't matter. @@ -137,6 +153,8 @@ public class BatterySaverUtilsTest { verify(mMockPowerManager, times(1)).setPowerSaveModeEnabled(eq(false)); assertEquals(-1, Secure.getInt(mMockResolver, Secure.LOW_POWER_WARNING_ACKNOWLEDGED, -1)); + assertEquals(-1, + Secure.getInt(mMockResolver, Secure.EXTRA_LOW_POWER_WARNING_ACKNOWLEDGED, -1)); assertEquals(-2, Secure.getInt(mMockResolver, Secure.LOW_POWER_MANUAL_ACTIVATION_COUNT, -2)); } @@ -144,6 +162,7 @@ public class BatterySaverUtilsTest { @Test public void testSetPowerSaveMode_disable_firstCall_needWarning() { Secure.putString(mMockResolver, Secure.LOW_POWER_WARNING_ACKNOWLEDGED, "null"); + Secure.putString(mMockResolver, Secure.EXTRA_LOW_POWER_WARNING_ACKNOWLEDGED, "null"); Secure.putString(mMockResolver, Secure.LOW_POWER_MANUAL_ACTIVATION_COUNT, "null"); // When disabling, needFirstTimeWarning doesn't matter. @@ -153,6 +172,8 @@ public class BatterySaverUtilsTest { verify(mMockPowerManager, times(1)).setPowerSaveModeEnabled(eq(false)); assertEquals(-1, Secure.getInt(mMockResolver, Secure.LOW_POWER_WARNING_ACKNOWLEDGED, -1)); + assertEquals(-1, + Secure.getInt(mMockResolver, Secure.EXTRA_LOW_POWER_WARNING_ACKNOWLEDGED, -1)); assertEquals(-2, Secure.getInt(mMockResolver, Secure.LOW_POWER_MANUAL_ACTIVATION_COUNT, -2)); } diff --git a/packages/SystemUI/res/values/config.xml b/packages/SystemUI/res/values/config.xml index 738cfd7c95bf..e65c327736e1 100644 --- a/packages/SystemUI/res/values/config.xml +++ b/packages/SystemUI/res/values/config.xml @@ -500,8 +500,8 @@ space --> <bool name="config_showBatteryEstimateQSBH">false</bool> - <!-- Whether to show a severe low battery dialog. --> - <bool name="config_severe_battery_dialog">false</bool> + <!-- Whether to show extra battery saver confirmation dialog. --> + <bool name="config_extra_battery_saver_confirmation">false</bool> <!-- A path representing a shield. Will sometimes be displayed with the battery icon when needed. This path is a 10px wide and 13px tall. --> diff --git a/packages/SystemUI/src/com/android/systemui/power/PowerNotificationWarnings.java b/packages/SystemUI/src/com/android/systemui/power/PowerNotificationWarnings.java index 2522e1c5b798..7a42642f2667 100644 --- a/packages/SystemUI/src/com/android/systemui/power/PowerNotificationWarnings.java +++ b/packages/SystemUI/src/com/android/systemui/power/PowerNotificationWarnings.java @@ -154,6 +154,7 @@ public class PowerNotificationWarnings implements PowerUI.WarningsUI { private final Intent mOpenBatterySettings = settings(Intent.ACTION_POWER_USAGE_SUMMARY); private final Intent mOpenBatterySaverSettings = settings(Settings.ACTION_BATTERY_SAVER_SETTINGS); + private final boolean mUseExtraSaverConfirmation; private int mBatteryLevel; private int mBucket; @@ -197,6 +198,8 @@ public class PowerNotificationWarnings implements PowerUI.WarningsUI { mDialogLaunchAnimator = dialogLaunchAnimator; mUiEventLogger = uiEventLogger; mUserTracker = userTracker; + mUseExtraSaverConfirmation = + mContext.getResources().getBoolean(R.bool.config_extra_battery_saver_confirmation); } @Override @@ -644,7 +647,7 @@ public class PowerNotificationWarnings implements PowerUI.WarningsUI { } private void showStartSaverConfirmation(Bundle extras) { - if (mSaverConfirmation != null) return; + if (mSaverConfirmation != null || mUseExtraSaverConfirmation) return; final SystemUIDialog d = new SystemUIDialog(mContext); final boolean confirmOnly = extras.getBoolean(BatterySaverUtils.EXTRA_CONFIRM_TEXT_ONLY); final int batterySaverTriggerMode = @@ -679,6 +682,10 @@ public class PowerNotificationWarnings implements PowerUI.WarningsUI { resolver, Secure.LOW_POWER_WARNING_ACKNOWLEDGED, 1, mUserTracker.getUserId()); + Secure.putIntForUser( + resolver, + Secure.EXTRA_LOW_POWER_WARNING_ACKNOWLEDGED, + 1, mUserTracker.getUserId()); }); } else { d.setTitle(R.string.battery_saver_confirmation_title); |