diff options
5 files changed, 35 insertions, 2 deletions
diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java index 718e212b61b7..2bdd360c58a6 100644 --- a/core/java/android/provider/Settings.java +++ b/core/java/android/provider/Settings.java @@ -15174,6 +15174,15 @@ public final class Settings { "low_power_mode_suggestion_params"; /** + * Whether low power mode reminder is enabled. If this value is 0, the device will not + * receive low power notification. + * + * @hide + */ + public static final String LOW_POWER_MODE_REMINDER_ENABLED = + "low_power_mode_reminder_enabled"; + + /** * If not 0, the activity manager will aggressively finish activities and * processes as soon as they are no longer needed. If 0, the normal * extended lifetime is used. diff --git a/packages/SettingsProvider/src/android/provider/settings/backup/GlobalSettings.java b/packages/SettingsProvider/src/android/provider/settings/backup/GlobalSettings.java index 28286817ea7e..aa6aaaf352cb 100644 --- a/packages/SettingsProvider/src/android/provider/settings/backup/GlobalSettings.java +++ b/packages/SettingsProvider/src/android/provider/settings/backup/GlobalSettings.java @@ -59,6 +59,7 @@ public class GlobalSettings { Settings.Global.ENABLE_AUTOMATIC_SYSTEM_SERVER_HEAP_DUMPS, Settings.Global.ENCODED_SURROUND_OUTPUT, Settings.Global.ENCODED_SURROUND_OUTPUT_ENABLED_FORMATS, + Settings.Global.LOW_POWER_MODE_REMINDER_ENABLED, Settings.Global.LOW_POWER_MODE_TRIGGER_LEVEL, Settings.Global.LOW_POWER_MODE_STICKY_AUTO_DISABLE_ENABLED, Settings.Global.LOW_POWER_MODE_STICKY_AUTO_DISABLE_LEVEL, diff --git a/packages/SettingsProvider/src/android/provider/settings/validators/GlobalSettingsValidators.java b/packages/SettingsProvider/src/android/provider/settings/validators/GlobalSettingsValidators.java index 46876b457b54..2b0d8370bb01 100644 --- a/packages/SettingsProvider/src/android/provider/settings/validators/GlobalSettingsValidators.java +++ b/packages/SettingsProvider/src/android/provider/settings/validators/GlobalSettingsValidators.java @@ -132,6 +132,7 @@ public class GlobalSettingsValidators { new DiscreteValueValidator(new String[] {"0", "1"})); VALIDATORS.put(Global.LOW_POWER_MODE_TRIGGER_LEVEL, PERCENTAGE_INTEGER_VALIDATOR); VALIDATORS.put(Global.LOW_POWER_MODE_TRIGGER_LEVEL_MAX, PERCENTAGE_INTEGER_VALIDATOR); + VALIDATORS.put(Global.LOW_POWER_MODE_REMINDER_ENABLED, BOOLEAN_VALIDATOR); VALIDATORS.put( Global.AUTOMATIC_POWER_SAVE_MODE, new DiscreteValueValidator(new String[] {"0", "1"})); diff --git a/packages/SystemUI/src/com/android/systemui/power/PowerNotificationWarnings.java b/packages/SystemUI/src/com/android/systemui/power/PowerNotificationWarnings.java index 90fc1d7ed49e..3587c4d8cc77 100644 --- a/packages/SystemUI/src/com/android/systemui/power/PowerNotificationWarnings.java +++ b/packages/SystemUI/src/com/android/systemui/power/PowerNotificationWarnings.java @@ -71,6 +71,7 @@ import com.android.systemui.plugins.ActivityStarter; import com.android.systemui.statusbar.phone.SystemUIDialog; import com.android.systemui.statusbar.policy.BatteryController; import com.android.systemui.util.NotificationChannels; +import com.android.systemui.util.settings.GlobalSettings; import com.android.systemui.volume.Events; import java.io.PrintWriter; @@ -175,6 +176,7 @@ public class PowerNotificationWarnings implements PowerUI.WarningsUI { private ActivityStarter mActivityStarter; private final BroadcastSender mBroadcastSender; private final UiEventLogger mUiEventLogger; + private GlobalSettings mGlobalSettings; private final Lazy<BatteryController> mBatteryControllerLazy; private final DialogLaunchAnimator mDialogLaunchAnimator; @@ -184,7 +186,8 @@ public class PowerNotificationWarnings implements PowerUI.WarningsUI { @Inject public PowerNotificationWarnings(Context context, ActivityStarter activityStarter, BroadcastSender broadcastSender, Lazy<BatteryController> batteryControllerLazy, - DialogLaunchAnimator dialogLaunchAnimator, UiEventLogger uiEventLogger) { + DialogLaunchAnimator dialogLaunchAnimator, UiEventLogger uiEventLogger, + GlobalSettings globalSettings) { mContext = context; mNoMan = mContext.getSystemService(NotificationManager.class); mPowerMan = (PowerManager) context.getSystemService(Context.POWER_SERVICE); @@ -196,6 +199,7 @@ public class PowerNotificationWarnings implements PowerUI.WarningsUI { mDialogLaunchAnimator = dialogLaunchAnimator; mUseSevereDialog = mContext.getResources().getBoolean(R.bool.config_severe_battery_dialog); mUiEventLogger = uiEventLogger; + mGlobalSettings = globalSettings; } @Override @@ -281,6 +285,9 @@ public class PowerNotificationWarnings implements PowerUI.WarningsUI { } protected void showWarningNotification() { + if (mGlobalSettings.getInt(Global.LOW_POWER_MODE_REMINDER_ENABLED, 1) == 0) { + return; + } if (showSevereLowBatteryDialog()) { mBroadcastSender.sendBroadcast(new Intent(ACTION_ENABLE_SEVERE_BATTERY_DIALOG) .setPackage(mContext.getPackageName()) diff --git a/packages/SystemUI/tests/src/com/android/systemui/power/PowerNotificationWarningsTest.java b/packages/SystemUI/tests/src/com/android/systemui/power/PowerNotificationWarningsTest.java index a56990f40b90..3528e14dbd80 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/power/PowerNotificationWarningsTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/power/PowerNotificationWarningsTest.java @@ -41,6 +41,7 @@ import android.os.BatteryManager; import android.os.Bundle; import android.os.Handler; import android.os.UserHandle; +import android.provider.Settings; import android.test.suitebuilder.annotation.SmallTest; import android.testing.AndroidTestingRunner; import android.testing.TestableLooper; @@ -55,6 +56,8 @@ import com.android.systemui.broadcast.BroadcastSender; import com.android.systemui.plugins.ActivityStarter; import com.android.systemui.statusbar.policy.BatteryController; import com.android.systemui.util.NotificationChannels; +import com.android.systemui.util.settings.FakeSettings; +import com.android.systemui.util.settings.GlobalSettings; import org.junit.Before; import org.junit.Test; @@ -73,6 +76,7 @@ public class PowerNotificationWarningsTest extends SysuiTestCase { public static final String FORMATTED_45M = "0h 45m"; public static final String FORMATTED_HOUR = "1h 0m"; private final NotificationManager mMockNotificationManager = mock(NotificationManager.class); + private final GlobalSettings mGlobalSettings = new FakeSettings(); private PowerNotificationWarnings mPowerNotificationWarnings; @Mock @@ -104,7 +108,8 @@ public class PowerNotificationWarningsTest extends SysuiTestCase { ActivityStarter starter = mDependency.injectMockDependency(ActivityStarter.class); BroadcastSender broadcastSender = mDependency.injectMockDependency(BroadcastSender.class); mPowerNotificationWarnings = new PowerNotificationWarnings(wrapper, starter, - broadcastSender, () -> mBatteryController, mDialogLaunchAnimator, mUiEventLogger); + broadcastSender, () -> mBatteryController, mDialogLaunchAnimator, mUiEventLogger, + mGlobalSettings); BatteryStateSnapshot snapshot = new BatteryStateSnapshot(100, false, false, 1, BatteryManager.BATTERY_HEALTH_GOOD, 5, 15); mPowerNotificationWarnings.updateSnapshot(snapshot); @@ -146,6 +151,16 @@ public class PowerNotificationWarningsTest extends SysuiTestCase { } @Test + public void testDisableLowBatteryReminder_noNotification() { + mGlobalSettings.putInt(Settings.Global.LOW_POWER_MODE_REMINDER_ENABLED, 0); + + mPowerNotificationWarnings.showLowBatteryWarning(false); + + verify(mMockNotificationManager, times(0)) + .notifyAsUser(anyString(), eq(SystemMessage.NOTE_POWER_LOW), any(), any()); + } + + @Test public void testShowLowBatteryNotification_NotifyAsUser() { mPowerNotificationWarnings.showLowBatteryWarning(false); verify(mMockNotificationManager, times(1)) |