summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--packages/SettingsLib/src/com/android/settingslib/fuelgauge/BatterySaverUtils.java59
-rw-r--r--packages/SettingsLib/tests/robotests/src/com/android/settingslib/fuelgauge/BatterySaverUtilsTest.java45
2 files changed, 100 insertions, 4 deletions
diff --git a/packages/SettingsLib/src/com/android/settingslib/fuelgauge/BatterySaverUtils.java b/packages/SettingsLib/src/com/android/settingslib/fuelgauge/BatterySaverUtils.java
index 3e710e4c7e35..28353ab7dff4 100644
--- a/packages/SettingsLib/src/com/android/settingslib/fuelgauge/BatterySaverUtils.java
+++ b/packages/SettingsLib/src/com/android/settingslib/fuelgauge/BatterySaverUtils.java
@@ -22,6 +22,7 @@ import android.content.Intent;
import android.os.Bundle;
import android.os.PowerManager;
import android.os.UserHandle;
+import android.provider.Settings;
import android.provider.Settings.Global;
import android.provider.Settings.Secure;
import android.util.KeyValueListParser;
@@ -55,6 +56,10 @@ public class BatterySaverUtils {
public static final String EXTRA_POWER_SAVE_MODE_TRIGGER_LEVEL =
"extra_power_save_mode_trigger_level";
+ /** Battery saver schedule keys. */
+ public static final String KEY_NO_SCHEDULE = "key_battery_saver_no_schedule";
+ public static final String KEY_PERCENTAGE = "key_battery_saver_percentage";
+
private BatterySaverUtils() {
}
@@ -108,7 +113,6 @@ public class BatterySaverUtils {
* - If it's 4th time through 8th time, show the schedule suggestion notification.
*
* @param enable true to enable battery saver.
- *
* @return true if the request succeeded.
*/
public static synchronized boolean setPowerSaveMode(Context context,
@@ -154,10 +158,10 @@ public class BatterySaverUtils {
* Shows the battery saver confirmation warning if it hasn't been acknowledged by the user in
* the past before. Various extras can be provided that will change the behavior of this
* notification as well as the ui for it.
- * @param context A valid context
- * @param extras Any extras to include in the intent to trigger this confirmation that will
- * help the system disambiguate what to show/do
*
+ * @param context A valid context
+ * @param extras Any extras to include in the intent to trigger this confirmation that will
+ * help the system disambiguate what to show/do
* @return True if it showed the notification because it has not been previously acknowledged.
* @see #EXTRA_CONFIRM_TEXT_ONLY
* @see #EXTRA_POWER_SAVE_MODE_TRIGGER
@@ -221,6 +225,7 @@ public class BatterySaverUtils {
/**
* Reverts battery saver schedule mode to none if routine mode is selected.
+ *
* @param context a valid context
*/
public static void revertScheduleToNoneIfNeeded(Context context) {
@@ -233,4 +238,50 @@ public class BatterySaverUtils {
PowerManager.POWER_SAVE_MODE_TRIGGER_PERCENTAGE);
}
}
+
+ /**
+ * Gets battery saver schedule mode.
+ *
+ * @param context a valid context
+ * @return battery saver schedule key
+ */
+ public static String getBatterySaverScheduleKey(Context context) {
+ final ContentResolver resolver = context.getContentResolver();
+ final int mode = Settings.Global.getInt(resolver, Global.AUTOMATIC_POWER_SAVE_MODE,
+ PowerManager.POWER_SAVE_MODE_TRIGGER_PERCENTAGE);
+ if (mode == PowerManager.POWER_SAVE_MODE_TRIGGER_PERCENTAGE) {
+ final int threshold =
+ Settings.Global.getInt(resolver, Global.LOW_POWER_MODE_TRIGGER_LEVEL, 0);
+ return threshold <= 0 ? KEY_NO_SCHEDULE : KEY_PERCENTAGE;
+ }
+ revertScheduleToNoneIfNeeded(context);
+ return KEY_NO_SCHEDULE;
+ }
+
+ /**
+ * Sets battery saver schedule mode.
+ *
+ * @param context a valid context
+ * @param scheduleKey {@link #KEY_NO_SCHEDULE} and {@link #KEY_PERCENTAGE}
+ * @param triggerLevel for automatic battery saver trigger level
+ */
+ public static void setBatterySaverScheduleMode(Context context, String scheduleKey,
+ int triggerLevel) {
+ final ContentResolver resolver = context.getContentResolver();
+ switch (scheduleKey) {
+ case KEY_NO_SCHEDULE:
+ Settings.Global.putInt(resolver, Global.AUTOMATIC_POWER_SAVE_MODE,
+ PowerManager.POWER_SAVE_MODE_TRIGGER_PERCENTAGE);
+ Settings.Global.putInt(resolver, Settings.Global.LOW_POWER_MODE_TRIGGER_LEVEL, 0);
+ break;
+ case KEY_PERCENTAGE:
+ Settings.Global.putInt(resolver, Global.AUTOMATIC_POWER_SAVE_MODE,
+ PowerManager.POWER_SAVE_MODE_TRIGGER_PERCENTAGE);
+ Settings.Global.putInt(resolver,
+ Settings.Global.LOW_POWER_MODE_TRIGGER_LEVEL, triggerLevel);
+ break;
+ default:
+ throw new IllegalStateException("Not a valid schedule key");
+ }
+ }
}
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 2bb3c2af8304..a15fe9f90206 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,6 +16,9 @@
package com.android.settingslib.fuelgauge;
+import static com.android.settingslib.fuelgauge.BatterySaverUtils.KEY_NO_SCHEDULE;
+import static com.android.settingslib.fuelgauge.BatterySaverUtils.KEY_PERCENTAGE;
+
import static com.google.common.truth.Truth.assertThat;
import static org.junit.Assert.assertEquals;
@@ -186,4 +189,46 @@ public class BatterySaverUtilsTest {
assertThat(Secure.getInt(mMockResolver, Secure.SUPPRESS_AUTO_BATTERY_SAVER_SUGGESTION, -1))
.isEqualTo(1);
}
+
+ @Test
+ public void testGetBatterySaverScheduleKey_returnExpectedKey() {
+ Global.putInt(mMockResolver, Global.LOW_POWER_MODE_TRIGGER_LEVEL, 0);
+ Global.putInt(mMockResolver, Global.AUTOMATIC_POWER_SAVE_MODE,
+ PowerManager.POWER_SAVE_MODE_TRIGGER_PERCENTAGE);
+
+ assertThat(BatterySaverUtils.getBatterySaverScheduleKey(mMockContext)).isEqualTo(
+ KEY_NO_SCHEDULE);
+
+ Global.putInt(mMockResolver, Global.LOW_POWER_MODE_TRIGGER_LEVEL, 20);
+ Global.putInt(mMockResolver, Global.AUTOMATIC_POWER_SAVE_MODE,
+ PowerManager.POWER_SAVE_MODE_TRIGGER_PERCENTAGE);
+
+ assertThat(BatterySaverUtils.getBatterySaverScheduleKey(mMockContext)).isEqualTo(
+ KEY_PERCENTAGE);
+
+ Global.putInt(mMockResolver, Global.LOW_POWER_MODE_TRIGGER_LEVEL, 20);
+ Global.putInt(mMockResolver, Global.AUTOMATIC_POWER_SAVE_MODE,
+ PowerManager.POWER_SAVE_MODE_TRIGGER_DYNAMIC);
+
+ assertThat(BatterySaverUtils.getBatterySaverScheduleKey(mMockContext)).isEqualTo(
+ KEY_NO_SCHEDULE);
+ }
+
+ @Test
+ public void testSetBatterySaverScheduleMode_setSchedule() {
+ BatterySaverUtils.setBatterySaverScheduleMode(mMockContext, KEY_NO_SCHEDULE, -1);
+
+ assertThat(Global.getInt(mMockResolver, Global.AUTOMATIC_POWER_SAVE_MODE, -1))
+ .isEqualTo(PowerManager.POWER_SAVE_MODE_TRIGGER_PERCENTAGE);
+ assertThat(Global.getInt(mMockResolver, Global.LOW_POWER_MODE_TRIGGER_LEVEL, -1))
+ .isEqualTo(0);
+
+ BatterySaverUtils.setBatterySaverScheduleMode(mMockContext, KEY_PERCENTAGE, 20);
+
+ assertThat(Global.getInt(mMockResolver, Global.AUTOMATIC_POWER_SAVE_MODE, -1))
+ .isEqualTo(PowerManager.POWER_SAVE_MODE_TRIGGER_PERCENTAGE);
+ assertThat(Global.getInt(mMockResolver, Global.LOW_POWER_MODE_TRIGGER_LEVEL, -1))
+ .isEqualTo(20);
+
+ }
}