Add batterysipper type check in PowerUsageFeatureProvider
This cl adds isTypeSystem to PowerUsageFeatureProvider and changes isTypeService. After this cl, the following items will be moved to advanced battery page: 1. Calendar Storage(Move to System) 2. MediaServer(Move to System) Create this check in FeatureProvider to make sure this check is flexible in different cases. Also refactor the PowerUsageSummary to use same test fragment Bug: 35629871 Bug: 35628690 Bug: 35317876 Test: RunSettingsRoboTest Change-Id: I8c083cb2557a7e900aea01e682c13a000bacb7a9
This commit is contained in:
@@ -17,6 +17,7 @@ package com.android.settings.fuelgauge;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.os.PowerManager;
|
||||
import android.os.Process;
|
||||
import android.support.v7.preference.Preference;
|
||||
import android.text.TextUtils;
|
||||
@@ -54,6 +55,7 @@ import static com.android.settings.fuelgauge.PowerUsageSummary.MENU_ADDITIONAL_B
|
||||
import static com.android.settings.fuelgauge.PowerUsageSummary.MENU_TOGGLE_APPS;
|
||||
import static com.google.common.truth.Truth.assertThat;
|
||||
import static org.mockito.Matchers.anyInt;
|
||||
import static org.mockito.Matchers.any;
|
||||
import static org.mockito.Matchers.anyString;
|
||||
import static org.mockito.Matchers.eq;
|
||||
import static org.mockito.Mockito.doReturn;
|
||||
@@ -124,12 +126,13 @@ public class PowerUsageSummaryTest {
|
||||
private Preference mCellularNetworkPref;
|
||||
@Mock
|
||||
private BatteryStatsHelper mBatteryHelper;
|
||||
@Mock
|
||||
private PowerManager mPowerManager;
|
||||
|
||||
private List<BatterySipper> mUsageList;
|
||||
private Context mRealContext;
|
||||
private TestFragment mFragment;
|
||||
private FakeFeatureFactory mFeatureFactory;
|
||||
private PowerUsageSummary mPowerUsageSummary;
|
||||
private List<BatterySipper> mUsageList;
|
||||
|
||||
@Before
|
||||
public void setUp() {
|
||||
@@ -138,8 +141,10 @@ public class PowerUsageSummaryTest {
|
||||
mRealContext = RuntimeEnvironment.application;
|
||||
FakeFeatureFactory.setupForTest(mContext);
|
||||
mFeatureFactory = (FakeFeatureFactory) FakeFeatureFactory.getFactory(mContext);
|
||||
when(mContext.getSystemService(Context.POWER_SERVICE)).thenReturn(mPowerManager);
|
||||
|
||||
mFragment = new TestFragment(mContext);
|
||||
mFragment = spy(new TestFragment(mContext));
|
||||
mFragment.initFeatureProvider();
|
||||
|
||||
when(mAdditionalBatteryInfoMenu.getItemId())
|
||||
.thenReturn(MENU_ADDITIONAL_BATTERY_INFO);
|
||||
@@ -148,9 +153,6 @@ public class PowerUsageSummaryTest {
|
||||
.thenReturn(ADDITIONAL_BATTERY_INFO_INTENT);
|
||||
when(mBatteryHelper.getTotalPower()).thenReturn(TOTAL_POWER);
|
||||
|
||||
mPowerUsageSummary = spy(new PowerUsageSummary());
|
||||
|
||||
when(mPowerUsageSummary.getContext()).thenReturn(mRealContext);
|
||||
when(mNormalBatterySipper.getPackages()).thenReturn(PACKAGE_NAMES);
|
||||
when(mNormalBatterySipper.getUid()).thenReturn(UID);
|
||||
mNormalBatterySipper.totalPowerMah = POWER_MAH;
|
||||
@@ -164,7 +166,7 @@ public class PowerUsageSummaryTest {
|
||||
when(mBatteryLayoutPref.findViewById(R.id.time)).thenReturn(mTimeText);
|
||||
when(mBatteryLayoutPref.findViewById(R.id.battery_header_icon))
|
||||
.thenReturn(mBatteryMeterView);
|
||||
mPowerUsageSummary.setBatteryLayoutPreference(mBatteryLayoutPref);
|
||||
mFragment.setBatteryLayoutPreference(mBatteryLayoutPref);
|
||||
|
||||
mScreenBatterySipper.drainType = BatterySipper.DrainType.SCREEN;
|
||||
mScreenBatterySipper.totalPowerMah = BATTERY_SCREEN_USAGE;
|
||||
@@ -179,11 +181,11 @@ public class PowerUsageSummaryTest {
|
||||
mUsageList.add(mScreenBatterySipper);
|
||||
mUsageList.add(mCellBatterySipper);
|
||||
|
||||
mPowerUsageSummary.mStatsHelper = mBatteryHelper;
|
||||
mFragment.mStatsHelper = mBatteryHelper;
|
||||
when(mBatteryHelper.getUsageList()).thenReturn(mUsageList);
|
||||
mPowerUsageSummary.mScreenUsagePref = mScreenUsagePref;
|
||||
mPowerUsageSummary.mScreenConsumptionPref = mScreenConsumptionPref;
|
||||
mPowerUsageSummary.mCellularNetworkPref = mCellularNetworkPref;
|
||||
mFragment.mScreenUsagePref = mScreenUsagePref;
|
||||
mFragment.mScreenConsumptionPref = mScreenConsumptionPref;
|
||||
mFragment.mCellularNetworkPref = mCellularNetworkPref;
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -235,7 +237,7 @@ public class PowerUsageSummaryTest {
|
||||
mNormalBatterySipper.uidObj = null;
|
||||
mNormalBatterySipper.drainType = BatterySipper.DrainType.APP;
|
||||
|
||||
final String key = mPowerUsageSummary.extractKeyFromSipper(mNormalBatterySipper);
|
||||
final String key = mFragment.extractKeyFromSipper(mNormalBatterySipper);
|
||||
assertThat(key).isEqualTo(TextUtils.concat(mNormalBatterySipper.getPackages()).toString());
|
||||
}
|
||||
|
||||
@@ -244,7 +246,7 @@ public class PowerUsageSummaryTest {
|
||||
mNormalBatterySipper.uidObj = null;
|
||||
mNormalBatterySipper.drainType = BatterySipper.DrainType.BLUETOOTH;
|
||||
|
||||
final String key = mPowerUsageSummary.extractKeyFromSipper(mNormalBatterySipper);
|
||||
final String key = mFragment.extractKeyFromSipper(mNormalBatterySipper);
|
||||
assertThat(key).isEqualTo(mNormalBatterySipper.drainType.toString());
|
||||
}
|
||||
|
||||
@@ -253,7 +255,7 @@ public class PowerUsageSummaryTest {
|
||||
mNormalBatterySipper.uidObj = new BatteryStatsImpl.Uid(new BatteryStatsImpl(), UID);
|
||||
mNormalBatterySipper.drainType = BatterySipper.DrainType.APP;
|
||||
|
||||
final String key = mPowerUsageSummary.extractKeyFromSipper(mNormalBatterySipper);
|
||||
final String key = mFragment.extractKeyFromSipper(mNormalBatterySipper);
|
||||
assertThat(key).isEqualTo(Integer.toString(mNormalBatterySipper.getUid()));
|
||||
}
|
||||
|
||||
@@ -263,8 +265,10 @@ public class PowerUsageSummaryTest {
|
||||
sippers.add(mNormalBatterySipper);
|
||||
sippers.add(mScreenBatterySipper);
|
||||
sippers.add(mSystemBatterySipper);
|
||||
when(mFeatureFactory.powerUsageFeatureProvider.isTypeSystem(mSystemBatterySipper))
|
||||
.thenReturn(true);
|
||||
|
||||
final double totalUsage = mPowerUsageSummary.removeHiddenBatterySippers(sippers);
|
||||
final double totalUsage = mFragment.removeHiddenBatterySippers(sippers);
|
||||
assertThat(sippers).containsExactly(mNormalBatterySipper);
|
||||
assertThat(totalUsage).isWithin(PRECISION).of(BATTERY_SCREEN_USAGE + BATTERY_SYSTEM_USAGE);
|
||||
}
|
||||
@@ -272,47 +276,52 @@ public class PowerUsageSummaryTest {
|
||||
@Test
|
||||
public void testShouldHideSipper_TypeIdle_ReturnTrue() {
|
||||
mNormalBatterySipper.drainType = BatterySipper.DrainType.IDLE;
|
||||
assertThat(mPowerUsageSummary.shouldHideSipper(mNormalBatterySipper)).isTrue();
|
||||
assertThat(mFragment.shouldHideSipper(mNormalBatterySipper)).isTrue();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testShouldHideSipper_TypeCell_ReturnTrue() {
|
||||
mNormalBatterySipper.drainType = BatterySipper.DrainType.CELL;
|
||||
assertThat(mPowerUsageSummary.shouldHideSipper(mNormalBatterySipper)).isTrue();
|
||||
assertThat(mFragment.shouldHideSipper(mNormalBatterySipper)).isTrue();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testShouldHideSipper_TypeScreen_ReturnTrue() {
|
||||
mNormalBatterySipper.drainType = BatterySipper.DrainType.SCREEN;
|
||||
assertThat(mPowerUsageSummary.shouldHideSipper(mNormalBatterySipper)).isTrue();
|
||||
assertThat(mFragment.shouldHideSipper(mNormalBatterySipper)).isTrue();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testShouldHideSipper_UidRoot_ReturnTrue() {
|
||||
public void testShouldHideSipper_TypeSystem_ReturnTrue() {
|
||||
mNormalBatterySipper.drainType = BatterySipper.DrainType.APP;
|
||||
when(mNormalBatterySipper.getUid()).thenReturn(Process.ROOT_UID);
|
||||
assertThat(mPowerUsageSummary.shouldHideSipper(mNormalBatterySipper)).isTrue();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testShouldHideSipper_UidSystem_ReturnTrue() {
|
||||
mNormalBatterySipper.drainType = BatterySipper.DrainType.APP;
|
||||
when(mNormalBatterySipper.getUid()).thenReturn(Process.SYSTEM_UID);
|
||||
assertThat(mPowerUsageSummary.shouldHideSipper(mNormalBatterySipper)).isTrue();
|
||||
when(mFeatureFactory.powerUsageFeatureProvider.isTypeSystem(Matchers.<BatterySipper>any()))
|
||||
.thenReturn(true);
|
||||
assertThat(mFragment.shouldHideSipper(mNormalBatterySipper)).isTrue();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testShouldHideSipper_UidNormal_ReturnFalse() {
|
||||
mNormalBatterySipper.drainType = BatterySipper.DrainType.APP;
|
||||
when(mNormalBatterySipper.getUid()).thenReturn(UID);
|
||||
assertThat(mPowerUsageSummary.shouldHideSipper(mNormalBatterySipper)).isFalse();
|
||||
assertThat(mFragment.shouldHideSipper(mNormalBatterySipper)).isFalse();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testShouldHideSipper_TypeService_ReturnTrue() {
|
||||
mNormalBatterySipper.drainType = BatterySipper.DrainType.APP;
|
||||
when(mNormalBatterySipper.getUid()).thenReturn(UID);
|
||||
when(mFeatureFactory.powerUsageFeatureProvider.isTypeService(Matchers.<BatterySipper>any()))
|
||||
.thenReturn(true);
|
||||
|
||||
assertThat(mFragment.shouldHideSipper(mNormalBatterySipper)).isTrue();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testSetUsageSummary_TimeLessThanOneMinute_DoNotSetSummary() {
|
||||
final long usageTimeMs = 59 * DateUtils.SECOND_IN_MILLIS;
|
||||
|
||||
mPowerUsageSummary.setUsageSummary(mPreference, "", usageTimeMs);
|
||||
mFragment.setUsageSummary(mPreference, "", usageTimeMs);
|
||||
verify(mPreference, never()).setSummary(anyString());
|
||||
}
|
||||
|
||||
@@ -320,7 +329,7 @@ public class PowerUsageSummaryTest {
|
||||
public void testSetUsageSummary_TimeMoreThanOneMinute_SetSummary() {
|
||||
final long usageTimeMs = 2 * DateUtils.MINUTE_IN_MILLIS;
|
||||
|
||||
mPowerUsageSummary.setUsageSummary(mPreference, "", usageTimeMs);
|
||||
mFragment.setUsageSummary(mPreference, "", usageTimeMs);
|
||||
verify(mPreference).setSummary(anyString());
|
||||
}
|
||||
|
||||
@@ -328,7 +337,7 @@ public class PowerUsageSummaryTest {
|
||||
public void testUpdatePreference_NoEstimatedTime_DoNotShowSummary() {
|
||||
mBatteryInfo.remainingTimeUs = 0;
|
||||
mBatteryInfo.remainingLabel = TIME_LEFT;
|
||||
mPowerUsageSummary.updateHeaderPreference(mBatteryInfo);
|
||||
mFragment.updateHeaderPreference(mBatteryInfo);
|
||||
|
||||
verify(mSummary1).setVisibility(View.INVISIBLE);
|
||||
verify(mSummary2).setVisibility(View.INVISIBLE);
|
||||
@@ -338,7 +347,7 @@ public class PowerUsageSummaryTest {
|
||||
public void testUpdatePreference_HasEstimatedTime_ShowSummary() {
|
||||
mBatteryInfo.remainingTimeUs = REMAINING_TIME_US;
|
||||
mBatteryInfo.remainingLabel = TIME_LEFT;
|
||||
mPowerUsageSummary.updateHeaderPreference(mBatteryInfo);
|
||||
mFragment.updateHeaderPreference(mBatteryInfo);
|
||||
|
||||
verify(mSummary1).setVisibility(View.VISIBLE);
|
||||
verify(mSummary2).setVisibility(View.VISIBLE);
|
||||
@@ -349,7 +358,7 @@ public class PowerUsageSummaryTest {
|
||||
mBatteryInfo.remainingTimeUs = REMAINING_TIME_US;
|
||||
mBatteryInfo.mDischarging = false;
|
||||
|
||||
mPowerUsageSummary.updateHeaderPreference(mBatteryInfo);
|
||||
mFragment.updateHeaderPreference(mBatteryInfo);
|
||||
verify(mSummary1).setText(R.string.estimated_charging_time_left);
|
||||
}
|
||||
|
||||
@@ -358,17 +367,17 @@ public class PowerUsageSummaryTest {
|
||||
mBatteryInfo.remainingTimeUs = REMAINING_TIME_US;
|
||||
mBatteryInfo.mDischarging = true;
|
||||
|
||||
mPowerUsageSummary.updateHeaderPreference(mBatteryInfo);
|
||||
mFragment.updateHeaderPreference(mBatteryInfo);
|
||||
verify(mSummary1).setText(R.string.estimated_time_left);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testUpdateHeaderPreference_AsyncUpdate_ShouldNotCrash() {
|
||||
when(mPowerUsageSummary.getContext()).thenReturn(null);
|
||||
when(mFragment.getContext()).thenReturn(null);
|
||||
mBatteryInfo.remainingTimeUs = REMAINING_TIME_US;
|
||||
|
||||
//Should not crash
|
||||
mPowerUsageSummary.updateHeaderPreference(mBatteryInfo);
|
||||
mFragment.updateHeaderPreference(mBatteryInfo);
|
||||
}
|
||||
|
||||
private void testToggleAllApps(final boolean isShowApps) {
|
||||
@@ -380,7 +389,7 @@ public class PowerUsageSummaryTest {
|
||||
|
||||
@Test
|
||||
public void testFindBatterySipperByType_findTypeScreen() {
|
||||
BatterySipper sipper = mPowerUsageSummary.findBatterySipperByType(mUsageList,
|
||||
BatterySipper sipper = mFragment.findBatterySipperByType(mUsageList,
|
||||
BatterySipper.DrainType.SCREEN);
|
||||
|
||||
assertThat(sipper).isSameAs(mScreenBatterySipper);
|
||||
@@ -388,7 +397,7 @@ public class PowerUsageSummaryTest {
|
||||
|
||||
@Test
|
||||
public void testFindBatterySipperByType_findTypeApp() {
|
||||
BatterySipper sipper = mPowerUsageSummary.findBatterySipperByType(mUsageList,
|
||||
BatterySipper sipper = mFragment.findBatterySipperByType(mUsageList,
|
||||
BatterySipper.DrainType.APP);
|
||||
|
||||
assertThat(sipper).isSameAs(mNormalBatterySipper);
|
||||
@@ -399,9 +408,9 @@ public class PowerUsageSummaryTest {
|
||||
final double percent = POWER_MAH / TOTAL_POWER * DISCHARGE_AMOUNT;
|
||||
final String expectedSummary = mRealContext.getString(R.string.battery_overall_usage,
|
||||
Utils.formatPercentage((int) percent));
|
||||
doReturn(expectedSummary).when(mPowerUsageSummary)
|
||||
doReturn(expectedSummary).when(mFragment)
|
||||
.getString(eq(R.string.battery_overall_usage), anyInt());
|
||||
mPowerUsageSummary.updateCellularPreference(DISCHARGE_AMOUNT);
|
||||
mFragment.updateCellularPreference(DISCHARGE_AMOUNT);
|
||||
|
||||
verify(mCellularNetworkPref).setSummary(expectedSummary);
|
||||
}
|
||||
@@ -413,12 +422,12 @@ public class PowerUsageSummaryTest {
|
||||
final double percent = BATTERY_SCREEN_USAGE / TOTAL_POWER * DISCHARGE_AMOUNT;
|
||||
final String expectedOverallUsage = mRealContext.getString(R.string.battery_overall_usage,
|
||||
Utils.formatPercentage((int) percent));
|
||||
doReturn(expectedUsedTime).when(mPowerUsageSummary).getString(
|
||||
doReturn(expectedUsedTime).when(mFragment).getString(
|
||||
eq(R.string.battery_used_for), anyInt());
|
||||
doReturn(expectedOverallUsage).when(mPowerUsageSummary).getString(
|
||||
doReturn(expectedOverallUsage).when(mFragment).getString(
|
||||
eq(R.string.battery_overall_usage), anyInt());
|
||||
|
||||
mPowerUsageSummary.updateScreenPreference(DISCHARGE_AMOUNT);
|
||||
mFragment.updateScreenPreference(DISCHARGE_AMOUNT);
|
||||
|
||||
verify(mScreenUsagePref).setSummary(expectedUsedTime);
|
||||
verify(mScreenConsumptionPref).setSummary(expectedOverallUsage);
|
||||
@@ -427,16 +436,16 @@ public class PowerUsageSummaryTest {
|
||||
@Test
|
||||
public void testUpdatePreference_UsageListEmpty_ShouldNotCrash() {
|
||||
when(mBatteryHelper.getUsageList()).thenReturn(new ArrayList<BatterySipper>());
|
||||
doReturn("").when(mPowerUsageSummary).getString(anyInt(), Matchers.anyObject());
|
||||
doReturn("").when(mFragment).getString(anyInt(), Matchers.anyObject());
|
||||
|
||||
// Should not crash when update
|
||||
mPowerUsageSummary.updateScreenPreference(DISCHARGE_AMOUNT);
|
||||
mPowerUsageSummary.updateCellularPreference(DISCHARGE_AMOUNT);
|
||||
mFragment.updateScreenPreference(DISCHARGE_AMOUNT);
|
||||
mFragment.updateCellularPreference(DISCHARGE_AMOUNT);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testCalculatePercentage() {
|
||||
final double percent = mPowerUsageSummary.calculatePercentage(POWER_MAH, DISCHARGE_AMOUNT);
|
||||
final double percent = mFragment.calculatePercentage(POWER_MAH, DISCHARGE_AMOUNT);
|
||||
assertThat(percent).isWithin(PRECISION).of(POWER_USAGE_PERCENTAGE);
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user