diff --git a/src/com/android/settings/fuelgauge/batterysaver/BatterySaverButtonPreferenceController.java b/src/com/android/settings/fuelgauge/batterysaver/BatterySaverButtonPreferenceController.java index da0f2e2fbe5..ee3f54f70e0 100644 --- a/src/com/android/settings/fuelgauge/batterysaver/BatterySaverButtonPreferenceController.java +++ b/src/com/android/settings/fuelgauge/batterysaver/BatterySaverButtonPreferenceController.java @@ -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); } diff --git a/tests/robotests/src/com/android/settings/fuelgauge/batterysaver/BatterySaverButtonPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/fuelgauge/batterysaver/BatterySaverButtonPreferenceControllerTest.java index 594de6a6e6a..881a18d6baf 100644 --- a/tests/robotests/src/com/android/settings/fuelgauge/batterysaver/BatterySaverButtonPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/fuelgauge/batterysaver/BatterySaverButtonPreferenceControllerTest.java @@ -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); + } }