Add type service in settings advanced page.

Currently it only includes the gms service

Bug: 35317876
Test: RunSettingsRoboTests
Change-Id: I20a2a9d320efe4aed036552d450f59c89e81584a
This commit is contained in:
jackqdyulei
2017-02-13 15:14:51 -08:00
parent 07eaca52f4
commit acc195fdde
4 changed files with 47 additions and 0 deletions

View File

@@ -14,6 +14,7 @@
package com.android.settings.fuelgauge; package com.android.settings.fuelgauge;
import android.content.Context; import android.content.Context;
import android.content.pm.PackageManager;
import android.os.Bundle; import android.os.Bundle;
import android.os.Process; import android.os.Process;
import android.provider.SearchIndexableResource; import android.provider.SearchIndexableResource;
@@ -61,6 +62,8 @@ public class PowerUsageAdvanced extends PowerUsageBase {
UsageType.APP}; UsageType.APP};
private BatteryHistoryPreference mHistPref; private BatteryHistoryPreference mHistPref;
private PreferenceGroup mUsageListGroup; private PreferenceGroup mUsageListGroup;
private PowerUsageFeatureProvider mPowerUsageFeatureProvider;
private PackageManager mPackageManager;
@Override @Override
public void onCreate(Bundle icicle) { public void onCreate(Bundle icicle) {
@@ -68,6 +71,9 @@ public class PowerUsageAdvanced extends PowerUsageBase {
mHistPref = (BatteryHistoryPreference) findPreference(KEY_BATTERY_GRAPH); mHistPref = (BatteryHistoryPreference) findPreference(KEY_BATTERY_GRAPH);
mUsageListGroup = (PreferenceGroup) findPreference(KEY_BATTERY_USAGE_LIST); mUsageListGroup = (PreferenceGroup) findPreference(KEY_BATTERY_USAGE_LIST);
mPowerUsageFeatureProvider = FeatureFactory.getFactory(getContext())
.getPowerUsageFeatureProvider(getContext());
mPackageManager = getContext().getPackageManager();
} }
@Override @Override
@@ -133,6 +139,8 @@ public class PowerUsageAdvanced extends PowerUsageBase {
return UsageType.CELL; return UsageType.CELL;
} else if (uid == Process.SYSTEM_UID || uid == Process.ROOT_UID) { } else if (uid == Process.SYSTEM_UID || uid == Process.ROOT_UID) {
return UsageType.SYSTEM; return UsageType.SYSTEM;
} else if (mPowerUsageFeatureProvider.isTypeService(sipper.mPackages)) {
return UsageType.SERVICE;
} else { } else {
return UsageType.APP; return UsageType.APP;
} }
@@ -149,6 +157,7 @@ public class PowerUsageAdvanced extends PowerUsageBase {
// Accumulate power usage based on usage type // Accumulate power usage based on usage type
for (final BatterySipper sipper : batterySippers) { for (final BatterySipper sipper : batterySippers) {
sipper.mPackages = mPackageManager.getPackagesForUid(sipper.getUid());
final PowerUsageData usageData = batteryDataMap.get(extractUsageType(sipper)); final PowerUsageData usageData = batteryDataMap.get(extractUsageType(sipper));
usageData.totalPowerMah += sipper.totalPowerMah; usageData.totalPowerMah += sipper.totalPowerMah;
} }
@@ -165,6 +174,16 @@ public class PowerUsageAdvanced extends PowerUsageBase {
return batteryDataList; return batteryDataList;
} }
@VisibleForTesting
void setPackageManager(PackageManager packageManager) {
mPackageManager = packageManager;
}
@VisibleForTesting
void setPowerUsageFeatureProvider(PowerUsageFeatureProvider provider) {
mPowerUsageFeatureProvider = provider;
}
/** /**
* Class that contains data used in {@link PowerGaugePreference}. * Class that contains data used in {@link PowerGaugePreference}.
*/ */

View File

@@ -41,4 +41,9 @@ public interface PowerUsageFeatureProvider {
* Check whether advanced ui is enabled * Check whether advanced ui is enabled
*/ */
boolean isAdvancedUiEnabled(); boolean isAdvancedUiEnabled();
/**
* Check whether it is type service
*/
boolean isTypeService(String[] packages);
} }

View File

@@ -38,4 +38,9 @@ public class PowerUsageFeatureProviderImpl implements PowerUsageFeatureProvider
public boolean isAdvancedUiEnabled() { public boolean isAdvancedUiEnabled() {
return false; return false;
} }
@Override
public boolean isTypeService(String[] packages) {
return false;
}
} }

View File

@@ -1,5 +1,6 @@
package com.android.settings.fuelgauge; package com.android.settings.fuelgauge;
import android.content.pm.PackageManager;
import android.os.Process; import android.os.Process;
import com.android.internal.os.BatterySipper; import com.android.internal.os.BatterySipper;
import com.android.internal.os.BatterySipper.DrainType; import com.android.internal.os.BatterySipper.DrainType;
@@ -21,6 +22,7 @@ import java.util.List;
import java.util.Set; import java.util.Set;
import static com.google.common.truth.Truth.assertThat; import static com.google.common.truth.Truth.assertThat;
import static org.mockito.Matchers.any;
import static org.mockito.Mockito.when; import static org.mockito.Mockito.when;
@RunWith(SettingsRobolectricTestRunner.class) @RunWith(SettingsRobolectricTestRunner.class)
@@ -38,6 +40,10 @@ public class PowerUsageAdvancedTest {
private BatterySipper mBatterySipper; private BatterySipper mBatterySipper;
@Mock @Mock
private BatteryStatsHelper mBatteryStatsHelper; private BatteryStatsHelper mBatteryStatsHelper;
@Mock
private PowerUsageFeatureProvider mPowerUsageFeatureProvider;
@Mock
private PackageManager mPackageManager;
private PowerUsageAdvanced mPowerUsageAdvanced; private PowerUsageAdvanced mPowerUsageAdvanced;
@Before @Before
@@ -57,6 +63,8 @@ public class PowerUsageAdvancedTest {
when(mBatteryStatsHelper.getUsageList()).thenReturn(batterySippers); when(mBatteryStatsHelper.getUsageList()).thenReturn(batterySippers);
when(mBatteryStatsHelper.getTotalPower()).thenReturn(TOTAL_USAGE); when(mBatteryStatsHelper.getTotalPower()).thenReturn(TOTAL_USAGE);
mPowerUsageAdvanced.setPackageManager(mPackageManager);
mPowerUsageAdvanced.setPowerUsageFeatureProvider(mPowerUsageFeatureProvider);
} }
@Test @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 @Test
public void testParsePowerUsageData_PercentageCalculatedCorrectly() { public void testParsePowerUsageData_PercentageCalculatedCorrectly() {
final double percentApp = TYPE_APP_USAGE * 2 / TOTAL_USAGE * 100; final double percentApp = TYPE_APP_USAGE * 2 / TOTAL_USAGE * 100;