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;
UsageType.APP};
private BatteryHistoryPreference mHistPref;
private PreferenceGroup mUsageListGroup;
+ private PowerUsageFeatureProvider mPowerUsageFeatureProvider;
+ private PackageManager mPackageManager;
@Override
public void onCreate(Bundle icicle) {
mHistPref = (BatteryHistoryPreference) findPreference(KEY_BATTERY_GRAPH);
mUsageListGroup = (PreferenceGroup) findPreference(KEY_BATTERY_USAGE_LIST);
+ mPowerUsageFeatureProvider = FeatureFactory.getFactory(getContext())
+ .getPowerUsageFeatureProvider(getContext());
+ mPackageManager = getContext().getPackageManager();
}
@Override
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;
}
// 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;
}
return batteryDataList;
}
+ @VisibleForTesting
+ void setPackageManager(PackageManager packageManager) {
+ mPackageManager = packageManager;
+ }
+
+ @VisibleForTesting
+ void setPowerUsageFeatureProvider(PowerUsageFeatureProvider provider) {
+ mPowerUsageFeatureProvider = provider;
+ }
+
/**
* Class that contains data used in {@link PowerGaugePreference}.
*/
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;
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)
private BatterySipper mBatterySipper;
@Mock
private BatteryStatsHelper mBatteryStatsHelper;
+ @Mock
+ private PowerUsageFeatureProvider mPowerUsageFeatureProvider;
+ @Mock
+ private PackageManager mPackageManager;
private PowerUsageAdvanced mPowerUsageAdvanced;
@Before
when(mBatteryStatsHelper.getUsageList()).thenReturn(batterySippers);
when(mBatteryStatsHelper.getTotalPower()).thenReturn(TOTAL_USAGE);
+ mPowerUsageAdvanced.setPackageManager(mPackageManager);
+ mPowerUsageAdvanced.setPowerUsageFeatureProvider(mPowerUsageFeatureProvider);
}
@Test
}
@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;
final double percentWifi = TYPE_WIFI_USAGE / TOTAL_USAGE * 100;