diff --git a/src/com/android/settings/fuelgauge/PowerUsageAdvanced.java b/src/com/android/settings/fuelgauge/PowerUsageAdvanced.java index f9f914c5636..826ec0914d4 100644 --- a/src/com/android/settings/fuelgauge/PowerUsageAdvanced.java +++ b/src/com/android/settings/fuelgauge/PowerUsageAdvanced.java @@ -14,6 +14,7 @@ package com.android.settings.fuelgauge; import android.content.Context; +import android.content.pm.PackageManager; import android.os.Bundle; import android.os.Process; import android.provider.SearchIndexableResource; @@ -61,6 +62,8 @@ public class PowerUsageAdvanced extends PowerUsageBase { UsageType.APP}; private BatteryHistoryPreference mHistPref; private PreferenceGroup mUsageListGroup; + private PowerUsageFeatureProvider mPowerUsageFeatureProvider; + private PackageManager mPackageManager; @Override public void onCreate(Bundle icicle) { @@ -68,6 +71,9 @@ public class PowerUsageAdvanced extends PowerUsageBase { mHistPref = (BatteryHistoryPreference) findPreference(KEY_BATTERY_GRAPH); mUsageListGroup = (PreferenceGroup) findPreference(KEY_BATTERY_USAGE_LIST); + mPowerUsageFeatureProvider = FeatureFactory.getFactory(getContext()) + .getPowerUsageFeatureProvider(getContext()); + mPackageManager = getContext().getPackageManager(); } @Override @@ -133,6 +139,8 @@ public class PowerUsageAdvanced extends PowerUsageBase { return UsageType.CELL; } else if (uid == Process.SYSTEM_UID || uid == Process.ROOT_UID) { return UsageType.SYSTEM; + } else if (mPowerUsageFeatureProvider.isTypeService(sipper.mPackages)) { + return UsageType.SERVICE; } else { return UsageType.APP; } @@ -149,6 +157,7 @@ public class PowerUsageAdvanced extends PowerUsageBase { // Accumulate power usage based on usage type for (final BatterySipper sipper : batterySippers) { + sipper.mPackages = mPackageManager.getPackagesForUid(sipper.getUid()); final PowerUsageData usageData = batteryDataMap.get(extractUsageType(sipper)); usageData.totalPowerMah += sipper.totalPowerMah; } @@ -165,6 +174,16 @@ public class PowerUsageAdvanced extends PowerUsageBase { return batteryDataList; } + @VisibleForTesting + void setPackageManager(PackageManager packageManager) { + mPackageManager = packageManager; + } + + @VisibleForTesting + void setPowerUsageFeatureProvider(PowerUsageFeatureProvider provider) { + mPowerUsageFeatureProvider = provider; + } + /** * Class that contains data used in {@link PowerGaugePreference}. */ diff --git a/src/com/android/settings/fuelgauge/PowerUsageFeatureProvider.java b/src/com/android/settings/fuelgauge/PowerUsageFeatureProvider.java index 3c1b19784f8..4bcdc922e3d 100644 --- a/src/com/android/settings/fuelgauge/PowerUsageFeatureProvider.java +++ b/src/com/android/settings/fuelgauge/PowerUsageFeatureProvider.java @@ -41,4 +41,9 @@ public interface PowerUsageFeatureProvider { * Check whether advanced ui is enabled */ boolean isAdvancedUiEnabled(); + + /** + * Check whether it is type service + */ + boolean isTypeService(String[] packages); } diff --git a/src/com/android/settings/fuelgauge/PowerUsageFeatureProviderImpl.java b/src/com/android/settings/fuelgauge/PowerUsageFeatureProviderImpl.java index b29900e1b78..644294560c6 100644 --- a/src/com/android/settings/fuelgauge/PowerUsageFeatureProviderImpl.java +++ b/src/com/android/settings/fuelgauge/PowerUsageFeatureProviderImpl.java @@ -38,4 +38,9 @@ public class PowerUsageFeatureProviderImpl implements PowerUsageFeatureProvider public boolean isAdvancedUiEnabled() { return false; } + + @Override + public boolean isTypeService(String[] packages) { + return false; + } } diff --git a/tests/robotests/src/com/android/settings/fuelgauge/PowerUsageAdvancedTest.java b/tests/robotests/src/com/android/settings/fuelgauge/PowerUsageAdvancedTest.java index f6b76e9f7ed..e47aac92a3f 100644 --- a/tests/robotests/src/com/android/settings/fuelgauge/PowerUsageAdvancedTest.java +++ b/tests/robotests/src/com/android/settings/fuelgauge/PowerUsageAdvancedTest.java @@ -1,5 +1,6 @@ package com.android.settings.fuelgauge; +import android.content.pm.PackageManager; import android.os.Process; import com.android.internal.os.BatterySipper; import com.android.internal.os.BatterySipper.DrainType; @@ -21,6 +22,7 @@ import java.util.List; import java.util.Set; import static com.google.common.truth.Truth.assertThat; +import static org.mockito.Matchers.any; import static org.mockito.Mockito.when; @RunWith(SettingsRobolectricTestRunner.class) @@ -38,6 +40,10 @@ public class PowerUsageAdvancedTest { private BatterySipper mBatterySipper; @Mock private BatteryStatsHelper mBatteryStatsHelper; + @Mock + private PowerUsageFeatureProvider mPowerUsageFeatureProvider; + @Mock + private PackageManager mPackageManager; private PowerUsageAdvanced mPowerUsageAdvanced; @Before @@ -57,6 +63,8 @@ public class PowerUsageAdvancedTest { when(mBatteryStatsHelper.getUsageList()).thenReturn(batterySippers); when(mBatteryStatsHelper.getTotalPower()).thenReturn(TOTAL_USAGE); + mPowerUsageAdvanced.setPackageManager(mPackageManager); + mPowerUsageAdvanced.setPowerUsageFeatureProvider(mPowerUsageFeatureProvider); } @Test @@ -86,6 +94,16 @@ public class PowerUsageAdvancedTest { } } + @Test + public void testExtractUsageType_TypeService_ReturnService() { + mBatterySipper.drainType = DrainType.APP; + when(mBatterySipper.getUid()).thenReturn(FAKE_UID_1); + when(mPowerUsageFeatureProvider.isTypeService(any())).thenReturn(true); + + assertThat(mPowerUsageAdvanced.extractUsageType(mBatterySipper)) + .isEqualTo(UsageType.SERVICE); + } + @Test public void testParsePowerUsageData_PercentageCalculatedCorrectly() { final double percentApp = TYPE_APP_USAGE * 2 / TOTAL_USAGE * 100;