Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c4d86b08 authored by Salvador Martinez's avatar Salvador Martinez
Browse files

Update battery saver schedule to show warning

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
parent 12256ca4
Loading
Loading
Loading
Loading
+30 −18
Original line number Diff line number Diff line
@@ -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,25 +68,35 @@ public class BatterySaverScheduleRadioButtonsController {

    public boolean setDefaultKey(String key) {
        final ContentResolver resolver = mContext.getContentResolver();

        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:
                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);
                    triggerLevel = 5;
                    break;
                case KEY_ROUTINE:
                Settings.Global.putInt(resolver, Global.AUTOMATIC_POWER_SAVE_MODE,
                        PowerManager.POWER_SAVE_MODE_TRIGGER_DYNAMIC);
                    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;
    }
+10 −0
Original line number Diff line number Diff line
@@ -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);
    }
}