From 713fa6bee0bf665f4fffdf779841315d86028ea3 Mon Sep 17 00:00:00 2001 From: jackqdyulei Date: Tue, 9 Jan 2018 13:00:34 -0800 Subject: [PATCH] Hook up smart battery to Settings value. Bug: 71502850 Test: RunSettingsRoboTests Change-Id: Icbc99af8f681e67af54e3509b3eec40ac9d9668e --- .../SmartBatteryPreferenceController.java | 11 ++- .../SmartBatteryPreferenceControllerTest.java | 95 +++++++++++++++++++ 2 files changed, 105 insertions(+), 1 deletion(-) create mode 100644 tests/robotests/src/com/android/settings/fuelgauge/SmartBatteryPreferenceControllerTest.java diff --git a/src/com/android/settings/fuelgauge/SmartBatteryPreferenceController.java b/src/com/android/settings/fuelgauge/SmartBatteryPreferenceController.java index 0002dac9db9..ee5279e027f 100644 --- a/src/com/android/settings/fuelgauge/SmartBatteryPreferenceController.java +++ b/src/com/android/settings/fuelgauge/SmartBatteryPreferenceController.java @@ -18,7 +18,9 @@ package com.android.settings.fuelgauge; import android.content.Context; +import android.provider.Settings; import android.support.annotation.VisibleForTesting; +import android.support.v14.preference.SwitchPreference; import android.support.v7.preference.Preference; import com.android.settings.applications.LayoutPreference; @@ -30,6 +32,8 @@ import com.android.settings.core.BasePreferenceController; public class SmartBatteryPreferenceController extends BasePreferenceController implements Preference.OnPreferenceChangeListener { private static final String KEY_SMART_BATTERY = "smart_battery"; + private static final int ON = 1; + private static final int OFF = 0; public SmartBatteryPreferenceController(Context context) { super(context, KEY_SMART_BATTERY); @@ -37,18 +41,23 @@ public class SmartBatteryPreferenceController extends BasePreferenceController i @Override public int getAvailabilityStatus() { + // TODO(b/71502850): get Availability from API. The device may not support it. return AVAILABLE; } @Override public void updateState(Preference preference) { super.updateState(preference); + final boolean smartBatteryOn = Settings.Global.getInt(mContext.getContentResolver(), + Settings.Global.APP_STANDBY_ENABLED, ON) == ON; + ((SwitchPreference) preference).setChecked(smartBatteryOn); } @Override public boolean onPreferenceChange(Preference preference, Object newValue) { final boolean smartBatteryOn = (Boolean) newValue; - //TODO(b/71502850): use smart battery API here to update the state + Settings.Global.putInt(mContext.getContentResolver(), Settings.Global.APP_STANDBY_ENABLED, + smartBatteryOn ? ON : OFF); return true; } } diff --git a/tests/robotests/src/com/android/settings/fuelgauge/SmartBatteryPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/fuelgauge/SmartBatteryPreferenceControllerTest.java new file mode 100644 index 00000000000..cc5fb305f80 --- /dev/null +++ b/tests/robotests/src/com/android/settings/fuelgauge/SmartBatteryPreferenceControllerTest.java @@ -0,0 +1,95 @@ +/* + * Copyright (C) 2018 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.settings.fuelgauge; + +import static com.google.common.truth.Truth.assertThat; + +import android.content.Context; +import android.provider.Settings; +import android.support.v14.preference.SwitchPreference; + +import com.android.settings.TestConfig; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.MockitoAnnotations; +import org.robolectric.RobolectricTestRunner; +import org.robolectric.RuntimeEnvironment; +import org.robolectric.annotation.Config; + +@RunWith(RobolectricTestRunner.class) +@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION) +public class SmartBatteryPreferenceControllerTest { + private static final int ON = 1; + private static final int OFF = 0; + + private SmartBatteryPreferenceController mController; + private SwitchPreference mPreference; + private Context mContext; + + @Before + public void setUp() { + MockitoAnnotations.initMocks(this); + + mContext = RuntimeEnvironment.application; + mController = new SmartBatteryPreferenceController(mContext); + mPreference = new SwitchPreference(mContext); + } + + @Test + public void testUpdateState_smartBatteryOn_preferenceChecked() { + putSmartBatteryValue(ON); + + mController.updateState(mPreference); + + assertThat(mPreference.isChecked()).isTrue(); + } + + @Test + public void testUpdateState_smartBatteryOff_preferenceUnchecked() { + putSmartBatteryValue(OFF); + + mController.updateState(mPreference); + + assertThat(mPreference.isChecked()).isFalse(); + } + + @Test + public void testUpdateState_checkPreference_smartBatteryOn() { + mController.onPreferenceChange(mPreference, true); + + assertThat(getSmartBatteryValue()).isEqualTo(ON); + } + + @Test + public void testUpdateState_unCheckPreference_smartBatteryOff() { + mController.onPreferenceChange(mPreference, false); + + assertThat(getSmartBatteryValue()).isEqualTo(OFF); + } + + private void putSmartBatteryValue(int value) { + Settings.Global.putInt(mContext.getContentResolver(), Settings.Global.APP_STANDBY_ENABLED, + value); + } + + private int getSmartBatteryValue() { + return Settings.Global.getInt(mContext.getContentResolver(), + Settings.Global.APP_STANDBY_ENABLED, ON); + } +}