From 113e3d5cc04e446e9adcaf3b2c51a88dbdd1c037 Mon Sep 17 00:00:00 2001 From: Makoto Onuki Date: Wed, 7 Mar 2018 14:03:55 -0800 Subject: [PATCH] Get auto-battery saver threshold max from global setting Bug: 74351418 Test: Manual test with "settings put global low_power_trigger_level_max 100" Test: m ROBOTEST_FILTER=AutoBatterySeekBarPreferenceControllerTest RunSettingsRoboTests Change-Id: Ice25835f36e7855e3ed665cd780d7eb1a26acd27 --- ...utoBatterySeekBarPreferenceController.java | 22 ++++++++++++++++++- ...atterySeekBarPreferenceControllerTest.java | 20 +++++++++++++++++ 2 files changed, 41 insertions(+), 1 deletion(-) diff --git a/src/com/android/settings/fuelgauge/batterysaver/AutoBatterySeekBarPreferenceController.java b/src/com/android/settings/fuelgauge/batterysaver/AutoBatterySeekBarPreferenceController.java index 05b3503529e..25ff096f244 100644 --- a/src/com/android/settings/fuelgauge/batterysaver/AutoBatterySeekBarPreferenceController.java +++ b/src/com/android/settings/fuelgauge/batterysaver/AutoBatterySeekBarPreferenceController.java @@ -25,6 +25,7 @@ import android.provider.Settings; import android.support.annotation.VisibleForTesting; import android.support.v7.preference.Preference; import android.support.v7.preference.PreferenceScreen; +import android.util.Log; import com.android.settings.R; import com.android.settings.Utils; @@ -40,6 +41,7 @@ import com.android.settingslib.core.lifecycle.events.OnStop; */ public class AutoBatterySeekBarPreferenceController extends BasePreferenceController implements LifecycleObserver, OnStart, OnStop, SeekBarPreference.OnPreferenceChangeListener { + private static final String TAG = "AutoBatterySeekBarPreferenceController"; @VisibleForTesting static final String KEY_AUTO_BATTERY_SEEK_BAR = "battery_saver_seek_bar"; private final int mDefWarnLevel; @@ -96,6 +98,24 @@ public class AutoBatterySeekBarPreferenceController extends BasePreferenceContro @VisibleForTesting void updatePreference(Preference preference) { final ContentResolver contentResolver = mContext.getContentResolver(); + + // Override the max value with LOW_POWER_MODE_TRIGGER_LEVEL_MAX, if set. + final int maxLevel = Settings.Global.getInt(contentResolver, + Settings.Global.LOW_POWER_MODE_TRIGGER_LEVEL_MAX, 0); + if (maxLevel > 0) { + if (!(preference instanceof SeekBarPreference)) { + Log.e(TAG, "Unexpected preference class: " + preference.getClass()); + } else { + final SeekBarPreference seekBarPreference = (SeekBarPreference) preference; + if (maxLevel < seekBarPreference.getMin()) { + Log.e(TAG, "LOW_POWER_MODE_TRIGGER_LEVEL_MAX too low; ignored."); + } else { + seekBarPreference.setMax(maxLevel); + } + } + } + + // Set the current value. final int level = Settings.Global.getInt(contentResolver, Settings.Global.LOW_POWER_MODE_TRIGGER_LEVEL, mDefWarnLevel); if (level == 0) { @@ -109,7 +129,7 @@ public class AutoBatterySeekBarPreferenceController extends BasePreferenceContro } /** - * Observer that listens to change from {@link Settings.Global.LOW_POWER_MODE_TRIGGER_LEVEL} + * Observer that listens to change from {@link Settings.Global#LOW_POWER_MODE_TRIGGER_LEVEL} */ private final class AutoBatterySaverSettingObserver extends ContentObserver { private final Uri mUri = Settings.Global.getUriFor( diff --git a/tests/robotests/src/com/android/settings/fuelgauge/batterysaver/AutoBatterySeekBarPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/fuelgauge/batterysaver/AutoBatterySeekBarPreferenceControllerTest.java index d2c052a824d..72dde9672aa 100644 --- a/tests/robotests/src/com/android/settings/fuelgauge/batterysaver/AutoBatterySeekBarPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/fuelgauge/batterysaver/AutoBatterySeekBarPreferenceControllerTest.java @@ -99,4 +99,24 @@ public class AutoBatterySeekBarPreferenceControllerTest { assertThat(Settings.Global.getInt(mContext.getContentResolver(), Settings.Global.LOW_POWER_MODE_TRIGGER_LEVEL, 0)).isEqualTo(TRIGGER_LEVEL); } + + @Test + public void testOnPreferenceChange_changeMax() { + Settings.Global.putInt(mContext.getContentResolver(), + Settings.Global.LOW_POWER_MODE_TRIGGER_LEVEL_MAX, 50); + + mController.updateState(mPreference); + + assertThat(mPreference.getMax()).isEqualTo(50); + } + + @Test + public void testOnPreferenceChange_noChangeMax() { + Settings.Global.putInt(mContext.getContentResolver(), + Settings.Global.LOW_POWER_MODE_TRIGGER_LEVEL_MAX, 0); + + mController.updateState(mPreference); + + assertThat(mPreference.getMax()).isEqualTo(100); + } }