From d2ce1d9194d49e0678ae55b1ff51c70720fface3 Mon Sep 17 00:00:00 2001 From: Wesley Wang Date: Tue, 12 Apr 2022 21:00:23 +0800 Subject: [PATCH] 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 --- ...atterySaverButtonPreferenceController.java | 6 +++++ ...rySaverButtonPreferenceControllerTest.java | 27 +++++++++++++++++++ 2 files changed, 33 insertions(+) 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); + } }