Unchecked battery saver switch once it's 1st launch

- Add low battery warning ack check to onSwitchChanged(), reset the
   switch to off once it's 1st time launch, the switch should be enable
   by battery saver change event at 1st instead of enable directly, will
   not check this state anymore after 1st launch

Bug: 227725656
Test: make RunSettingsRoboTests
Change-Id: I79f502f567fae5dd10166d8b24fd50d59c261001
This commit is contained in:
Wesley Wang
2022-04-12 21:00:23 +08:00
parent 34eecaad79
commit d2ce1d9194
2 changed files with 33 additions and 0 deletions

View File

@@ -22,6 +22,7 @@ import android.net.Uri;
import android.os.Handler;
import android.os.Looper;
import android.os.PowerManager;
import android.provider.Settings;
import android.provider.SettingsSlicesContract;
import android.widget.Switch;
@@ -101,6 +102,11 @@ public class BatterySaverButtonPreferenceController extends
@Override
public void onSwitchChanged(Switch switchView, boolean isChecked) {
// Cancel preference's check state once it's first time launch
if (isChecked && (Settings.Secure.getInt(mContext.getContentResolver(),
Settings.Secure.LOW_POWER_WARNING_ACKNOWLEDGED, 0) == 0)) {
mPreference.setChecked(false);
}
setChecked(isChecked);
}

View File

@@ -30,6 +30,7 @@ import static org.mockito.Mockito.when;
import android.content.Context;
import android.content.Intent;
import android.os.PowerManager;
import android.provider.Settings;
import android.provider.SettingsSlicesContract;
import androidx.preference.PreferenceScreen;
@@ -75,6 +76,24 @@ public class BatterySaverButtonPreferenceControllerTest {
.isEqualTo(SettingsSlicesContract.AUTHORITY);
}
@Test
public void onSwitchChanged_isCheckedButNotAcked_preferenceIsUnchecked() {
setLowPowerWarningAcked(/* acked= */ 0);
mController.onSwitchChanged(/* switchView= */ null, /* isChecked= */ true);
assertThat(mPreference.isChecked()).isFalse();
}
@Test
public void onSwitchChanged_isCheckedAndAcked_setPowerSaveMode() {
setLowPowerWarningAcked(/* acked= */ 1);
mController.onSwitchChanged(/* switchView= */ null, /* isChecked= */ true);
verify(mPowerManager).setPowerSaveModeEnabled(true);
}
@Test
public void updateState_lowPowerOn_preferenceIsChecked() {
when(mPowerManager.isPowerSaveMode()).thenReturn(true);
@@ -126,4 +145,12 @@ public class BatterySaverButtonPreferenceControllerTest {
public void isPublicSlice_returnsTrue() {
assertThat(mController.isPublicSlice()).isTrue();
}
// 0 means not acked, 1 means acked.
private void setLowPowerWarningAcked(int acked) {
Settings.Secure.putInt(
mContext.getContentResolver(),
Settings.Secure.LOW_POWER_WARNING_ACKNOWLEDGED,
acked);
}
}