From f9416e6a40b0348c60a178b199e7d2f2ba9ab0a2 Mon Sep 17 00:00:00 2001 From: Tiffany Nguyen Date: Mon, 28 Jun 2021 05:57:22 +0000 Subject: [PATCH] Log Battery Saver states. Test: Unit test Bug: 189914747 Change-Id: Ib815e60a52ec549df2ab2b90df29bca1eeeef339 --- .../fuelgauge/BatterySaverController.java | 40 ++++++++++++++ .../fuelgauge/BatterySaverControllerTest.java | 52 +++++++++++++++++++ 2 files changed, 92 insertions(+) diff --git a/src/com/android/settings/fuelgauge/BatterySaverController.java b/src/com/android/settings/fuelgauge/BatterySaverController.java index 15070c3e8d2..8fec9b46768 100644 --- a/src/com/android/settings/fuelgauge/BatterySaverController.java +++ b/src/com/android/settings/fuelgauge/BatterySaverController.java @@ -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; @@ -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; @@ -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; @@ -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 @@ -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); @@ -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 diff --git a/tests/robotests/src/com/android/settings/fuelgauge/BatterySaverControllerTest.java b/tests/robotests/src/com/android/settings/fuelgauge/BatterySaverControllerTest.java index 52f682cd8ab..cee11603d43 100644 --- a/tests/robotests/src/com/android/settings/fuelgauge/BatterySaverControllerTest.java +++ b/tests/robotests/src/com/android/settings/fuelgauge/BatterySaverControllerTest.java @@ -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; @@ -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); @@ -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);