Loading src/com/android/settings/fuelgauge/BatterySaverController.java +40 −0 Original line number Diff line number Diff line Loading @@ -15,6 +15,7 @@ */ package com.android.settings.fuelgauge; import android.app.settings.SettingsEnums; import android.content.ContentResolver; import android.content.Context; import android.database.ContentObserver; Loading @@ -23,6 +24,7 @@ import android.os.Looper; import android.os.PowerManager; import android.provider.Settings; import android.provider.Settings.Global; import android.util.Pair; import androidx.preference.Preference; import androidx.preference.PreferenceScreen; Loading @@ -30,6 +32,8 @@ import androidx.preference.PreferenceScreen; import com.android.settings.R; import com.android.settings.Utils; import com.android.settings.core.BasePreferenceController; import com.android.settings.overlay.FeatureFactory; import com.android.settingslib.core.instrumentation.MetricsFeatureProvider; import com.android.settingslib.core.lifecycle.LifecycleObserver; import com.android.settingslib.core.lifecycle.events.OnStart; import com.android.settingslib.core.lifecycle.events.OnStop; Loading @@ -44,6 +48,7 @@ public class BatterySaverController extends BasePreferenceController private final BatterySaverReceiver mBatteryStateChangeReceiver; private final PowerManager mPowerManager; private Preference mBatterySaverPref; private final MetricsFeatureProvider mMetricsFeatureProvider; private final ContentObserver mObserver = new ContentObserver( new Handler(Looper.getMainLooper())) { @Override Loading @@ -56,6 +61,7 @@ public class BatterySaverController extends BasePreferenceController super(context, KEY_BATTERY_SAVER); mPowerManager = mContext.getSystemService(PowerManager.class); mMetricsFeatureProvider = FeatureFactory.getFactory(context).getMetricsFeatureProvider(); mBatteryStateChangeReceiver = new BatterySaverReceiver(context); mBatteryStateChangeReceiver.setBatterySaverListener(this); BatterySaverUtils.revertScheduleToNoneIfNeeded(context); Loading Loading @@ -121,9 +127,43 @@ public class BatterySaverController extends BasePreferenceController } } private void logPowerSaver() { if (!mPowerManager.isPowerSaveMode()) { // Power saver is off, so don't do anything. return; } final ContentResolver resolver = mContext.getContentResolver(); final int mode = Global.getInt(resolver, Global.AUTOMATIC_POWER_SAVE_MODE, PowerManager.POWER_SAVE_MODE_TRIGGER_PERCENTAGE); int fuelgaugeScheduleType = SettingsEnums.BATTERY_SAVER_SCHEDULE_TYPE_NO_SCHEDULE; switch (mode) { case PowerManager.POWER_SAVE_MODE_TRIGGER_PERCENTAGE: fuelgaugeScheduleType = SettingsEnums.BATTERY_SAVER_SCHEDULE_TYPE_BASED_ON_PERCENTAGE; final int powerLevelTriggerPercentage = Global.getInt(resolver, Global.LOW_POWER_MODE_TRIGGER_LEVEL, 0); mMetricsFeatureProvider.action(mContext, SettingsEnums.FUELGAUGE_BATTERY_SAVER, Pair.create(SettingsEnums.FIELD_BATTERY_SAVER_SCHEDULE_TYPE, fuelgaugeScheduleType), Pair.create(SettingsEnums.FIELD_BATTERY_SAVER_PERCENTAGE_VALUE, powerLevelTriggerPercentage)); break; case PowerManager.POWER_SAVE_MODE_TRIGGER_DYNAMIC: fuelgaugeScheduleType = SettingsEnums.BATTERY_SAVER_SCHEDULE_TYPE_BASED_ON_ROUTINE; break; default: // empty } mMetricsFeatureProvider.action(mContext, SettingsEnums.FUELGAUGE_BATTERY_SAVER, Pair.create(SettingsEnums.FIELD_BATTERY_SAVER_SCHEDULE_TYPE, fuelgaugeScheduleType)); } @Override public void onPowerSaveModeChanged() { updateSummary(); logPowerSaver(); } @Override Loading tests/robotests/src/com/android/settings/fuelgauge/BatterySaverControllerTest.java +52 −0 Original line number Diff line number Diff line Loading @@ -21,12 +21,17 @@ import static org.mockito.Mockito.spy; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import android.app.settings.SettingsEnums; import android.content.Context; import android.os.PowerManager; import android.provider.Settings; import android.util.Pair; import androidx.preference.Preference; import com.android.settings.testutils.FakeFeatureFactory; import com.android.settingslib.core.instrumentation.MetricsFeatureProvider; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; Loading @@ -46,12 +51,16 @@ public class BatterySaverControllerTest { private BatterySaverController mBatterySaverController; private Context mContext; private FakeFeatureFactory mFeatureFactory; private MetricsFeatureProvider mMetricsFeatureProvider; @Before public void setUp() { MockitoAnnotations.initMocks(this); mContext = RuntimeEnvironment.application; mFeatureFactory = FakeFeatureFactory.setupForTest(); mMetricsFeatureProvider = mFeatureFactory.metricsFeatureProvider; mBatterySaverController = spy(new BatterySaverController(mContext)); ReflectionHelpers.setField(mBatterySaverController, "mPowerManager", mPowerManager); ReflectionHelpers.setField(mBatterySaverController, "mBatterySaverPref", mBatterySaverPref); Loading @@ -72,6 +81,49 @@ public class BatterySaverControllerTest { verify(mBatterySaverPref).setSummary("Off"); } @Test public void onPreferenceChange_onPowerSaveModeChanged_manualTrigger_logsType() { when(mPowerManager.isPowerSaveMode()).thenReturn(true); Settings.Global.putInt(mContext.getContentResolver(), Settings.Global.AUTOMATIC_POWER_SAVE_MODE, -1); mBatterySaverController.onPowerSaveModeChanged(); verify(mMetricsFeatureProvider).action(mContext, SettingsEnums.FUELGAUGE_BATTERY_SAVER, Pair.create(SettingsEnums.FIELD_BATTERY_SAVER_SCHEDULE_TYPE, SettingsEnums.BATTERY_SAVER_SCHEDULE_TYPE_NO_SCHEDULE)); } @Test public void onPreferenceChange_onPowerSaveModeChanged_triggerPercent_logsTypeAndPercentage() { when(mPowerManager.isPowerSaveMode()).thenReturn(true); Settings.Global.putInt(mContext.getContentResolver(), Settings.Global.AUTOMATIC_POWER_SAVE_MODE, PowerManager.POWER_SAVE_MODE_TRIGGER_PERCENTAGE); final int percentageVal = 15; Settings.Global.putInt(mContext.getContentResolver(), Settings.Global.LOW_POWER_MODE_TRIGGER_LEVEL, percentageVal); mBatterySaverController.onPowerSaveModeChanged(); verify(mMetricsFeatureProvider).action(mContext, SettingsEnums.FUELGAUGE_BATTERY_SAVER, Pair.create(SettingsEnums.FIELD_BATTERY_SAVER_SCHEDULE_TYPE, SettingsEnums.BATTERY_SAVER_SCHEDULE_TYPE_BASED_ON_PERCENTAGE), Pair.create(SettingsEnums.FIELD_BATTERY_SAVER_PERCENTAGE_VALUE, percentageVal)); } @Test public void onPreferenceChange_onPowerSaveModeChanged_triggerDynamic_logsType() { when(mPowerManager.isPowerSaveMode()).thenReturn(true); Settings.Global.putInt(mContext.getContentResolver(), Settings.Global.AUTOMATIC_POWER_SAVE_MODE, PowerManager.POWER_SAVE_MODE_TRIGGER_DYNAMIC); mBatterySaverController.onPowerSaveModeChanged(); verify(mMetricsFeatureProvider).action(mContext, SettingsEnums.FUELGAUGE_BATTERY_SAVER, Pair.create(SettingsEnums.FIELD_BATTERY_SAVER_SCHEDULE_TYPE, SettingsEnums.BATTERY_SAVER_SCHEDULE_TYPE_BASED_ON_ROUTINE)); } @Test public void getSummary_batterySaverOn_showSummaryOn() { when(mPowerManager.isPowerSaveMode()).thenReturn(true); Loading Loading
src/com/android/settings/fuelgauge/BatterySaverController.java +40 −0 Original line number Diff line number Diff line Loading @@ -15,6 +15,7 @@ */ package com.android.settings.fuelgauge; import android.app.settings.SettingsEnums; import android.content.ContentResolver; import android.content.Context; import android.database.ContentObserver; Loading @@ -23,6 +24,7 @@ import android.os.Looper; import android.os.PowerManager; import android.provider.Settings; import android.provider.Settings.Global; import android.util.Pair; import androidx.preference.Preference; import androidx.preference.PreferenceScreen; Loading @@ -30,6 +32,8 @@ import androidx.preference.PreferenceScreen; import com.android.settings.R; import com.android.settings.Utils; import com.android.settings.core.BasePreferenceController; import com.android.settings.overlay.FeatureFactory; import com.android.settingslib.core.instrumentation.MetricsFeatureProvider; import com.android.settingslib.core.lifecycle.LifecycleObserver; import com.android.settingslib.core.lifecycle.events.OnStart; import com.android.settingslib.core.lifecycle.events.OnStop; Loading @@ -44,6 +48,7 @@ public class BatterySaverController extends BasePreferenceController private final BatterySaverReceiver mBatteryStateChangeReceiver; private final PowerManager mPowerManager; private Preference mBatterySaverPref; private final MetricsFeatureProvider mMetricsFeatureProvider; private final ContentObserver mObserver = new ContentObserver( new Handler(Looper.getMainLooper())) { @Override Loading @@ -56,6 +61,7 @@ public class BatterySaverController extends BasePreferenceController super(context, KEY_BATTERY_SAVER); mPowerManager = mContext.getSystemService(PowerManager.class); mMetricsFeatureProvider = FeatureFactory.getFactory(context).getMetricsFeatureProvider(); mBatteryStateChangeReceiver = new BatterySaverReceiver(context); mBatteryStateChangeReceiver.setBatterySaverListener(this); BatterySaverUtils.revertScheduleToNoneIfNeeded(context); Loading Loading @@ -121,9 +127,43 @@ public class BatterySaverController extends BasePreferenceController } } private void logPowerSaver() { if (!mPowerManager.isPowerSaveMode()) { // Power saver is off, so don't do anything. return; } final ContentResolver resolver = mContext.getContentResolver(); final int mode = Global.getInt(resolver, Global.AUTOMATIC_POWER_SAVE_MODE, PowerManager.POWER_SAVE_MODE_TRIGGER_PERCENTAGE); int fuelgaugeScheduleType = SettingsEnums.BATTERY_SAVER_SCHEDULE_TYPE_NO_SCHEDULE; switch (mode) { case PowerManager.POWER_SAVE_MODE_TRIGGER_PERCENTAGE: fuelgaugeScheduleType = SettingsEnums.BATTERY_SAVER_SCHEDULE_TYPE_BASED_ON_PERCENTAGE; final int powerLevelTriggerPercentage = Global.getInt(resolver, Global.LOW_POWER_MODE_TRIGGER_LEVEL, 0); mMetricsFeatureProvider.action(mContext, SettingsEnums.FUELGAUGE_BATTERY_SAVER, Pair.create(SettingsEnums.FIELD_BATTERY_SAVER_SCHEDULE_TYPE, fuelgaugeScheduleType), Pair.create(SettingsEnums.FIELD_BATTERY_SAVER_PERCENTAGE_VALUE, powerLevelTriggerPercentage)); break; case PowerManager.POWER_SAVE_MODE_TRIGGER_DYNAMIC: fuelgaugeScheduleType = SettingsEnums.BATTERY_SAVER_SCHEDULE_TYPE_BASED_ON_ROUTINE; break; default: // empty } mMetricsFeatureProvider.action(mContext, SettingsEnums.FUELGAUGE_BATTERY_SAVER, Pair.create(SettingsEnums.FIELD_BATTERY_SAVER_SCHEDULE_TYPE, fuelgaugeScheduleType)); } @Override public void onPowerSaveModeChanged() { updateSummary(); logPowerSaver(); } @Override Loading
tests/robotests/src/com/android/settings/fuelgauge/BatterySaverControllerTest.java +52 −0 Original line number Diff line number Diff line Loading @@ -21,12 +21,17 @@ import static org.mockito.Mockito.spy; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import android.app.settings.SettingsEnums; import android.content.Context; import android.os.PowerManager; import android.provider.Settings; import android.util.Pair; import androidx.preference.Preference; import com.android.settings.testutils.FakeFeatureFactory; import com.android.settingslib.core.instrumentation.MetricsFeatureProvider; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; Loading @@ -46,12 +51,16 @@ public class BatterySaverControllerTest { private BatterySaverController mBatterySaverController; private Context mContext; private FakeFeatureFactory mFeatureFactory; private MetricsFeatureProvider mMetricsFeatureProvider; @Before public void setUp() { MockitoAnnotations.initMocks(this); mContext = RuntimeEnvironment.application; mFeatureFactory = FakeFeatureFactory.setupForTest(); mMetricsFeatureProvider = mFeatureFactory.metricsFeatureProvider; mBatterySaverController = spy(new BatterySaverController(mContext)); ReflectionHelpers.setField(mBatterySaverController, "mPowerManager", mPowerManager); ReflectionHelpers.setField(mBatterySaverController, "mBatterySaverPref", mBatterySaverPref); Loading @@ -72,6 +81,49 @@ public class BatterySaverControllerTest { verify(mBatterySaverPref).setSummary("Off"); } @Test public void onPreferenceChange_onPowerSaveModeChanged_manualTrigger_logsType() { when(mPowerManager.isPowerSaveMode()).thenReturn(true); Settings.Global.putInt(mContext.getContentResolver(), Settings.Global.AUTOMATIC_POWER_SAVE_MODE, -1); mBatterySaverController.onPowerSaveModeChanged(); verify(mMetricsFeatureProvider).action(mContext, SettingsEnums.FUELGAUGE_BATTERY_SAVER, Pair.create(SettingsEnums.FIELD_BATTERY_SAVER_SCHEDULE_TYPE, SettingsEnums.BATTERY_SAVER_SCHEDULE_TYPE_NO_SCHEDULE)); } @Test public void onPreferenceChange_onPowerSaveModeChanged_triggerPercent_logsTypeAndPercentage() { when(mPowerManager.isPowerSaveMode()).thenReturn(true); Settings.Global.putInt(mContext.getContentResolver(), Settings.Global.AUTOMATIC_POWER_SAVE_MODE, PowerManager.POWER_SAVE_MODE_TRIGGER_PERCENTAGE); final int percentageVal = 15; Settings.Global.putInt(mContext.getContentResolver(), Settings.Global.LOW_POWER_MODE_TRIGGER_LEVEL, percentageVal); mBatterySaverController.onPowerSaveModeChanged(); verify(mMetricsFeatureProvider).action(mContext, SettingsEnums.FUELGAUGE_BATTERY_SAVER, Pair.create(SettingsEnums.FIELD_BATTERY_SAVER_SCHEDULE_TYPE, SettingsEnums.BATTERY_SAVER_SCHEDULE_TYPE_BASED_ON_PERCENTAGE), Pair.create(SettingsEnums.FIELD_BATTERY_SAVER_PERCENTAGE_VALUE, percentageVal)); } @Test public void onPreferenceChange_onPowerSaveModeChanged_triggerDynamic_logsType() { when(mPowerManager.isPowerSaveMode()).thenReturn(true); Settings.Global.putInt(mContext.getContentResolver(), Settings.Global.AUTOMATIC_POWER_SAVE_MODE, PowerManager.POWER_SAVE_MODE_TRIGGER_DYNAMIC); mBatterySaverController.onPowerSaveModeChanged(); verify(mMetricsFeatureProvider).action(mContext, SettingsEnums.FUELGAUGE_BATTERY_SAVER, Pair.create(SettingsEnums.FIELD_BATTERY_SAVER_SCHEDULE_TYPE, SettingsEnums.BATTERY_SAVER_SCHEDULE_TYPE_BASED_ON_ROUTINE)); } @Test public void getSummary_batterySaverOn_showSummaryOn() { when(mPowerManager.isPowerSaveMode()).thenReturn(true); Loading