OSDN Git Service

Update battery saver schedule to show warning
authorSalvador Martinez <dehboxturtle@google.com>
Tue, 26 Mar 2019 22:14:46 +0000 (15:14 -0700)
committerSalvador Martinez <dehboxturtle@google.com>
Thu, 28 Mar 2019 00:40:23 +0000 (17:40 -0700)
If a user tries to enable a battery saver schedule we want
to show them the battery saver warning if they haven't seen it.
This CL does that.

Test: robotests pass, manual verification
Bug: 128924009
Change-Id: I683279716ac7700043b1a01f88bdf2ae716eeece

src/com/android/settings/fuelgauge/batterysaver/BatterySaverScheduleRadioButtonsController.java
tests/robotests/src/com/android/settings/fuelgauge/batterysaver/BatterySaverScheduleRadioButtonsControllerTest.java

index 796df46..57bae45 100644 (file)
@@ -20,6 +20,8 @@ import android.content.Context;
 import android.os.PowerManager;
 import android.provider.Settings;
 import android.provider.Settings.Global;
+import android.text.TextUtils;
+import com.android.settingslib.fuelgauge.BatterySaverUtils;
 
 /**
  * Responds to user actions in the Settings > Battery > Set a Schedule Screen
@@ -66,24 +68,34 @@ public class BatterySaverScheduleRadioButtonsController {
 
     public boolean setDefaultKey(String key) {
         final ContentResolver resolver = mContext.getContentResolver();
-        switch(key) {
-            case KEY_NO_SCHEDULE:
-                Settings.Global.putInt(resolver, Global.AUTOMATIC_POWER_SAVE_MODE,
-                        PowerManager.POWER_SAVE_MODE_TRIGGER_PERCENTAGE);
-                Settings.Global.putInt(resolver, 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, Global.LOW_POWER_MODE_TRIGGER_LEVEL, 5);
-                break;
-            case KEY_ROUTINE:
-                Settings.Global.putInt(resolver, Global.AUTOMATIC_POWER_SAVE_MODE,
-                        PowerManager.POWER_SAVE_MODE_TRIGGER_DYNAMIC);
-                break;
-            default:
-                throw new IllegalStateException(
-                        "Not a valid key for " + this.getClass().getSimpleName());
+
+        int mode = PowerManager.POWER_SAVE_MODE_TRIGGER_PERCENTAGE;
+        int triggerLevel = 0;
+        if (!TextUtils.equals(key, KEY_NO_SCHEDULE)
+                && BatterySaverUtils.maybeShowBatterySaverConfirmation(
+                        mContext, true /* confirmOnly */)) {
+            return true;
+        } else {
+            switch (key) {
+                case KEY_NO_SCHEDULE:
+                    break;
+                case KEY_PERCENTAGE:
+                    triggerLevel = 5;
+                    break;
+                case KEY_ROUTINE:
+                    mode = PowerManager.POWER_SAVE_MODE_TRIGGER_DYNAMIC;
+                    break;
+                default:
+                    throw new IllegalStateException(
+                            "Not a valid key for " + this.getClass().getSimpleName());
+            }
+        }
+
+        // Trigger level is intentionally left alone when going between dynamic and percentage modes
+        // so that a users percentage based schedule is preserved when they toggle between the two.
+        Settings.Global.putInt(resolver, Global.AUTOMATIC_POWER_SAVE_MODE, mode);
+        if (mode != PowerManager.POWER_SAVE_MODE_TRIGGER_DYNAMIC) {
+            Settings.Global.putInt(resolver, Global.LOW_POWER_MODE_TRIGGER_LEVEL, triggerLevel);
         }
         mSeekBarController.updateSeekBar();
         return true;
index 6012dbb..8654a4e 100644 (file)
@@ -7,6 +7,7 @@ import android.content.Context;
 import android.os.PowerManager;
 import android.provider.Settings;
 import android.provider.Settings.Global;
+import android.provider.Settings.Secure;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -54,4 +55,13 @@ public class BatterySaverScheduleRadioButtonsControllerTest {
         assertThat(mController.getDefaultKey())
                 .isEqualTo(BatterySaverScheduleRadioButtonsController.KEY_NO_SCHEDULE);
     }
+
+    @Test
+    public void setDefaultKey_any_defaultsToNoScheduleIfWarningNotSeen() {
+        Secure.putString(
+            mContext.getContentResolver(), Secure.LOW_POWER_WARNING_ACKNOWLEDGED, "null");
+        mController.setDefaultKey(BatterySaverScheduleRadioButtonsController.KEY_ROUTINE);
+        assertThat(mController.getDefaultKey())
+                .isEqualTo(BatterySaverScheduleRadioButtonsController.KEY_NO_SCHEDULE);
+    }
 }