Log Battery Saver states.

Test: Unit test
Bug: 189914747

Change-Id: Ib815e60a52ec549df2ab2b90df29bca1eeeef339
This commit is contained in:
Tiffany Nguyen
2021-06-28 05:57:22 +00:00
parent 3d5fd19e9f
commit f9416e6a40
2 changed files with 92 additions and 0 deletions

View File

@@ -15,6 +15,7 @@
*/ */
package com.android.settings.fuelgauge; package com.android.settings.fuelgauge;
import android.app.settings.SettingsEnums;
import android.content.ContentResolver; import android.content.ContentResolver;
import android.content.Context; import android.content.Context;
import android.database.ContentObserver; import android.database.ContentObserver;
@@ -23,6 +24,7 @@ import android.os.Looper;
import android.os.PowerManager; import android.os.PowerManager;
import android.provider.Settings; import android.provider.Settings;
import android.provider.Settings.Global; import android.provider.Settings.Global;
import android.util.Pair;
import androidx.preference.Preference; import androidx.preference.Preference;
import androidx.preference.PreferenceScreen; import androidx.preference.PreferenceScreen;
@@ -30,6 +32,8 @@ import androidx.preference.PreferenceScreen;
import com.android.settings.R; import com.android.settings.R;
import com.android.settings.Utils; import com.android.settings.Utils;
import com.android.settings.core.BasePreferenceController; 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.LifecycleObserver;
import com.android.settingslib.core.lifecycle.events.OnStart; import com.android.settingslib.core.lifecycle.events.OnStart;
import com.android.settingslib.core.lifecycle.events.OnStop; import com.android.settingslib.core.lifecycle.events.OnStop;
@@ -44,6 +48,7 @@ public class BatterySaverController extends BasePreferenceController
private final BatterySaverReceiver mBatteryStateChangeReceiver; private final BatterySaverReceiver mBatteryStateChangeReceiver;
private final PowerManager mPowerManager; private final PowerManager mPowerManager;
private Preference mBatterySaverPref; private Preference mBatterySaverPref;
private final MetricsFeatureProvider mMetricsFeatureProvider;
private final ContentObserver mObserver = new ContentObserver( private final ContentObserver mObserver = new ContentObserver(
new Handler(Looper.getMainLooper())) { new Handler(Looper.getMainLooper())) {
@Override @Override
@@ -56,6 +61,7 @@ public class BatterySaverController extends BasePreferenceController
super(context, KEY_BATTERY_SAVER); super(context, KEY_BATTERY_SAVER);
mPowerManager = mContext.getSystemService(PowerManager.class); mPowerManager = mContext.getSystemService(PowerManager.class);
mMetricsFeatureProvider = FeatureFactory.getFactory(context).getMetricsFeatureProvider();
mBatteryStateChangeReceiver = new BatterySaverReceiver(context); mBatteryStateChangeReceiver = new BatterySaverReceiver(context);
mBatteryStateChangeReceiver.setBatterySaverListener(this); mBatteryStateChangeReceiver.setBatterySaverListener(this);
BatterySaverUtils.revertScheduleToNoneIfNeeded(context); 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 @Override
public void onPowerSaveModeChanged() { public void onPowerSaveModeChanged() {
updateSummary(); updateSummary();
logPowerSaver();
} }
@Override @Override

View File

@@ -21,12 +21,17 @@ import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when; import static org.mockito.Mockito.when;
import android.app.settings.SettingsEnums;
import android.content.Context; import android.content.Context;
import android.os.PowerManager; import android.os.PowerManager;
import android.provider.Settings; import android.provider.Settings;
import android.util.Pair;
import androidx.preference.Preference; import androidx.preference.Preference;
import com.android.settings.testutils.FakeFeatureFactory;
import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
import org.junit.Before; import org.junit.Before;
import org.junit.Test; import org.junit.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
@@ -46,12 +51,16 @@ public class BatterySaverControllerTest {
private BatterySaverController mBatterySaverController; private BatterySaverController mBatterySaverController;
private Context mContext; private Context mContext;
private FakeFeatureFactory mFeatureFactory;
private MetricsFeatureProvider mMetricsFeatureProvider;
@Before @Before
public void setUp() { public void setUp() {
MockitoAnnotations.initMocks(this); MockitoAnnotations.initMocks(this);
mContext = RuntimeEnvironment.application; mContext = RuntimeEnvironment.application;
mFeatureFactory = FakeFeatureFactory.setupForTest();
mMetricsFeatureProvider = mFeatureFactory.metricsFeatureProvider;
mBatterySaverController = spy(new BatterySaverController(mContext)); mBatterySaverController = spy(new BatterySaverController(mContext));
ReflectionHelpers.setField(mBatterySaverController, "mPowerManager", mPowerManager); ReflectionHelpers.setField(mBatterySaverController, "mPowerManager", mPowerManager);
ReflectionHelpers.setField(mBatterySaverController, "mBatterySaverPref", mBatterySaverPref); ReflectionHelpers.setField(mBatterySaverController, "mBatterySaverPref", mBatterySaverPref);
@@ -72,6 +81,49 @@ public class BatterySaverControllerTest {
verify(mBatterySaverPref).setSummary("Off"); 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 @Test
public void getSummary_batterySaverOn_showSummaryOn() { public void getSummary_batterySaverOn_showSummaryOn() {
when(mPowerManager.isPowerSaveMode()).thenReturn(true); when(mPowerManager.isPowerSaveMode()).thenReturn(true);