Loading src/com/android/settings/fuelgauge/BatteryEntry.java +16 −5 Original line number Diff line number Diff line Loading @@ -26,6 +26,7 @@ import android.content.pm.PackageManager.NameNotFoundException; import android.content.pm.UserInfo; import android.graphics.drawable.Drawable; import android.os.Handler; import android.os.Process; import android.os.RemoteException; import android.os.UserHandle; import android.os.UserManager; Loading @@ -47,6 +48,7 @@ public class BatteryEntry { public static final int MSG_REPORT_FULLY_DRAWN = 2; private static final String TAG = "BatteryEntry"; private static final String PACKAGE_SYSTEM = "android"; static final HashMap<String,UidToDetail> sUidCache = new HashMap<String,UidToDetail>(); Loading Loading @@ -268,9 +270,11 @@ public class BatteryEntry { if (sipper.mPackages == null) { sipper.mPackages = pm.getPackagesForUid(uid); } if (sipper.mPackages != null) { String[] packageLabels = new String[sipper.mPackages.length]; System.arraycopy(sipper.mPackages, 0, packageLabels, 0, sipper.mPackages.length); final String[] packages = extractPackagesFromSipper(sipper); if (packages != null) { String[] packageLabels = new String[packages.length]; System.arraycopy(packages, 0, packageLabels, 0, packages.length); // Convert package names to user-facing labels where possible IPackageManager ipm = AppGlobals.getPackageManager(); Loading @@ -289,7 +293,7 @@ public class BatteryEntry { packageLabels[i] = label.toString(); } if (ai.icon != 0) { defaultPackageName = sipper.mPackages[i]; defaultPackageName = packages[i]; icon = ai.loadIcon(pm); break; } Loading @@ -303,7 +307,7 @@ public class BatteryEntry { name = packageLabels[0]; } else { // Look for an official name for this UID. for (String pkgName : sipper.mPackages) { for (String pkgName : packages) { try { final PackageInfo pi = ipm.getPackageInfo(pkgName, 0 /* no flags */, userId); if (pi == null) { Loading Loading @@ -349,4 +353,11 @@ public class BatteryEntry { sHandler.sendMessage(sHandler.obtainMessage(MSG_UPDATE_NAME_ICON, this)); } } String[] extractPackagesFromSipper(BatterySipper sipper) { // Only use system package if uid is system uid, so it could find a consistent name and icon return sipper.getUid() == Process.SYSTEM_UID ? new String[]{PACKAGE_SYSTEM} : sipper.mPackages; } } tests/robotests/src/com/android/settings/fuelgauge/BatteryEntryTest.java +32 −1 Original line number Diff line number Diff line Loading @@ -21,6 +21,7 @@ import android.content.pm.ApplicationInfo; import android.content.pm.PackageManager; import android.content.pm.PackageManager.NameNotFoundException; import android.os.Handler; import android.os.Process; import android.os.UserManager; import com.android.internal.os.BatterySipper; Loading @@ -46,9 +47,12 @@ import static org.mockito.Mockito.when; public class BatteryEntryTest { private static final int APP_UID = 123; private static final int SYSTEM_UID = Process.SYSTEM_UID; private static final String APP_DEFAULT_PACKAGE_NAME = "com.android.test"; private static final String APP_LABEL = "Test App Name"; private static final String HIGH_DRAIN_PACKAGE = "com.android.test.screen"; private static final String ANDROID_PACKAGE = "android"; private static final String[] SYSTEM_PACKAGES = {HIGH_DRAIN_PACKAGE, ANDROID_PACKAGE}; @Rule public MockitoRule mocks = MockitoJUnit.rule(); Loading Loading @@ -84,6 +88,18 @@ public class BatteryEntryTest { return sipper; } private BatteryEntry createBatteryEntryForSystem() { return new BatteryEntry(mockContext, mockHandler, mockUserManager, createSipperForSystem()); } private BatterySipper createSipperForSystem() { BatterySipper sipper = new BatterySipper(DrainType.APP, new FakeUid(SYSTEM_UID), 0 /* power use */); sipper.packageWithHighestDrain = HIGH_DRAIN_PACKAGE; sipper.mPackages = SYSTEM_PACKAGES; return sipper; } @Test public void batteryEntryForApp_shouldSetDefaultPackageNameAndLabel() throws Exception { BatteryEntry entry = createBatteryEntryForApp(); Loading Loading @@ -121,4 +137,19 @@ public class BatteryEntryTest { assertThat(entry.getLabel()).isEqualTo(HIGH_DRAIN_PACKAGE); } @Test public void extractPackageFromSipper_systemSipper_returnSystemPackage() { BatteryEntry entry = createBatteryEntryForSystem(); assertThat(entry.extractPackagesFromSipper(entry.sipper)).isEqualTo( new String[]{ANDROID_PACKAGE}); } @Test public void extractPackageFromSipper_normalSipper_returnDefaultPakcage() { BatteryEntry entry = createBatteryEntryForApp(); assertThat(entry.extractPackagesFromSipper(entry.sipper)).isEqualTo(entry.sipper.mPackages); } } Loading
src/com/android/settings/fuelgauge/BatteryEntry.java +16 −5 Original line number Diff line number Diff line Loading @@ -26,6 +26,7 @@ import android.content.pm.PackageManager.NameNotFoundException; import android.content.pm.UserInfo; import android.graphics.drawable.Drawable; import android.os.Handler; import android.os.Process; import android.os.RemoteException; import android.os.UserHandle; import android.os.UserManager; Loading @@ -47,6 +48,7 @@ public class BatteryEntry { public static final int MSG_REPORT_FULLY_DRAWN = 2; private static final String TAG = "BatteryEntry"; private static final String PACKAGE_SYSTEM = "android"; static final HashMap<String,UidToDetail> sUidCache = new HashMap<String,UidToDetail>(); Loading Loading @@ -268,9 +270,11 @@ public class BatteryEntry { if (sipper.mPackages == null) { sipper.mPackages = pm.getPackagesForUid(uid); } if (sipper.mPackages != null) { String[] packageLabels = new String[sipper.mPackages.length]; System.arraycopy(sipper.mPackages, 0, packageLabels, 0, sipper.mPackages.length); final String[] packages = extractPackagesFromSipper(sipper); if (packages != null) { String[] packageLabels = new String[packages.length]; System.arraycopy(packages, 0, packageLabels, 0, packages.length); // Convert package names to user-facing labels where possible IPackageManager ipm = AppGlobals.getPackageManager(); Loading @@ -289,7 +293,7 @@ public class BatteryEntry { packageLabels[i] = label.toString(); } if (ai.icon != 0) { defaultPackageName = sipper.mPackages[i]; defaultPackageName = packages[i]; icon = ai.loadIcon(pm); break; } Loading @@ -303,7 +307,7 @@ public class BatteryEntry { name = packageLabels[0]; } else { // Look for an official name for this UID. for (String pkgName : sipper.mPackages) { for (String pkgName : packages) { try { final PackageInfo pi = ipm.getPackageInfo(pkgName, 0 /* no flags */, userId); if (pi == null) { Loading Loading @@ -349,4 +353,11 @@ public class BatteryEntry { sHandler.sendMessage(sHandler.obtainMessage(MSG_UPDATE_NAME_ICON, this)); } } String[] extractPackagesFromSipper(BatterySipper sipper) { // Only use system package if uid is system uid, so it could find a consistent name and icon return sipper.getUid() == Process.SYSTEM_UID ? new String[]{PACKAGE_SYSTEM} : sipper.mPackages; } }
tests/robotests/src/com/android/settings/fuelgauge/BatteryEntryTest.java +32 −1 Original line number Diff line number Diff line Loading @@ -21,6 +21,7 @@ import android.content.pm.ApplicationInfo; import android.content.pm.PackageManager; import android.content.pm.PackageManager.NameNotFoundException; import android.os.Handler; import android.os.Process; import android.os.UserManager; import com.android.internal.os.BatterySipper; Loading @@ -46,9 +47,12 @@ import static org.mockito.Mockito.when; public class BatteryEntryTest { private static final int APP_UID = 123; private static final int SYSTEM_UID = Process.SYSTEM_UID; private static final String APP_DEFAULT_PACKAGE_NAME = "com.android.test"; private static final String APP_LABEL = "Test App Name"; private static final String HIGH_DRAIN_PACKAGE = "com.android.test.screen"; private static final String ANDROID_PACKAGE = "android"; private static final String[] SYSTEM_PACKAGES = {HIGH_DRAIN_PACKAGE, ANDROID_PACKAGE}; @Rule public MockitoRule mocks = MockitoJUnit.rule(); Loading Loading @@ -84,6 +88,18 @@ public class BatteryEntryTest { return sipper; } private BatteryEntry createBatteryEntryForSystem() { return new BatteryEntry(mockContext, mockHandler, mockUserManager, createSipperForSystem()); } private BatterySipper createSipperForSystem() { BatterySipper sipper = new BatterySipper(DrainType.APP, new FakeUid(SYSTEM_UID), 0 /* power use */); sipper.packageWithHighestDrain = HIGH_DRAIN_PACKAGE; sipper.mPackages = SYSTEM_PACKAGES; return sipper; } @Test public void batteryEntryForApp_shouldSetDefaultPackageNameAndLabel() throws Exception { BatteryEntry entry = createBatteryEntryForApp(); Loading Loading @@ -121,4 +137,19 @@ public class BatteryEntryTest { assertThat(entry.getLabel()).isEqualTo(HIGH_DRAIN_PACKAGE); } @Test public void extractPackageFromSipper_systemSipper_returnSystemPackage() { BatteryEntry entry = createBatteryEntryForSystem(); assertThat(entry.extractPackagesFromSipper(entry.sipper)).isEqualTo( new String[]{ANDROID_PACKAGE}); } @Test public void extractPackageFromSipper_normalSipper_returnDefaultPakcage() { BatteryEntry entry = createBatteryEntryForApp(); assertThat(entry.extractPackagesFromSipper(entry.sipper)).isEqualTo(entry.sipper.mPackages); } }