Loading src/com/android/settings/fuelgauge/BatteryEntry.java +40 −14 Original line number Diff line number Diff line Loading @@ -55,13 +55,20 @@ public class BatteryEntry { public static final class NameAndIcon { public final String name; public final String packageName; public final Drawable icon; public final int iconId; public NameAndIcon(String name, Drawable icon, int iconId) { this(name, /*packageName=*/ null, icon, iconId); } public NameAndIcon( String name, String packageName, Drawable icon, int iconId) { this.name = name; this.icon = icon; this.iconId = iconId; this.packageName = packageName; } } Loading Loading @@ -102,7 +109,15 @@ public class BatteryEntry { } be = sRequestQueue.remove(0); } be.loadNameAndIcon(); final NameAndIcon nameAndIcon = BatteryEntry.loadNameAndIcon( be.mContext, be.getUid(), sHandler, be, be.mDefaultPackageName); if (nameAndIcon != null) { be.icon = getNonNull(be.icon, nameAndIcon.icon); be.name = getNonNull(be.name, nameAndIcon.name); be.mDefaultPackageName = getNonNull( be.mDefaultPackageName, nameAndIcon.packageName); } } } } Loading Loading @@ -262,14 +277,20 @@ public class BatteryEntry { /** * Loads the app label and icon image and stores into the cache. */ public void loadNameAndIcon() { public static NameAndIcon loadNameAndIcon( Context context, int uid, Handler handler, BatteryEntry batteryEntry, String defaultPackageName) { String name = null; Drawable icon = null; // Bail out if the current sipper is not an App sipper. final int uid = getUid(); if (uid == 0 || uid == Process.INVALID_UID) { return; return null; } final PackageManager pm = mContext.getPackageManager(); final PackageManager pm = context.getPackageManager(); final String[] packages; if (uid == Process.SYSTEM_UID) { packages = new String[] {PACKAGE_SYSTEM}; Loading @@ -278,11 +299,11 @@ public class BatteryEntry { } if (packages != null) { String[] packageLabels = new String[packages.length]; final 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(); final IPackageManager ipm = AppGlobals.getPackageManager(); final int userId = UserHandle.getUserId(uid); for (int i = 0; i < packageLabels.length; i++) { try { Loading @@ -293,12 +314,12 @@ public class BatteryEntry { + packageLabels[i] + ", user " + userId); continue; } CharSequence label = ai.loadLabel(pm); final CharSequence label = ai.loadLabel(pm); if (label != null) { packageLabels[i] = label.toString(); } if (ai.icon != 0) { mDefaultPackageName = packages[i]; defaultPackageName = packages[i]; icon = ai.loadIcon(pm); break; } Loading Loading @@ -326,7 +347,7 @@ public class BatteryEntry { if (nm != null) { name = nm.toString(); if (pi.applicationInfo.icon != 0) { mDefaultPackageName = pkgName; defaultPackageName = pkgName; icon = pi.applicationInfo.loadIcon(pm); } break; Loading @@ -352,12 +373,13 @@ public class BatteryEntry { UidToDetail utd = new UidToDetail(); utd.name = name; utd.icon = icon; utd.packageName = mDefaultPackageName; utd.packageName = defaultPackageName; sUidCache.put(uidString, utd); if (sHandler != null) { sHandler.sendMessage(sHandler.obtainMessage(MSG_UPDATE_NAME_ICON, this)); if (handler != null) { handler.sendMessage(sHandler.obtainMessage(MSG_UPDATE_NAME_ICON, batteryEntry)); } return new NameAndIcon(name, defaultPackageName, icon, /*iconId=*/ 0); } /** Loading Loading @@ -557,4 +579,8 @@ public class BatteryEntry { } return new NameAndIcon(name, null /* icon */, iconId); } private static <T> T getNonNull(T originalObj, T newObj) { return newObj != null ? newObj : originalObj; } } Loading
src/com/android/settings/fuelgauge/BatteryEntry.java +40 −14 Original line number Diff line number Diff line Loading @@ -55,13 +55,20 @@ public class BatteryEntry { public static final class NameAndIcon { public final String name; public final String packageName; public final Drawable icon; public final int iconId; public NameAndIcon(String name, Drawable icon, int iconId) { this(name, /*packageName=*/ null, icon, iconId); } public NameAndIcon( String name, String packageName, Drawable icon, int iconId) { this.name = name; this.icon = icon; this.iconId = iconId; this.packageName = packageName; } } Loading Loading @@ -102,7 +109,15 @@ public class BatteryEntry { } be = sRequestQueue.remove(0); } be.loadNameAndIcon(); final NameAndIcon nameAndIcon = BatteryEntry.loadNameAndIcon( be.mContext, be.getUid(), sHandler, be, be.mDefaultPackageName); if (nameAndIcon != null) { be.icon = getNonNull(be.icon, nameAndIcon.icon); be.name = getNonNull(be.name, nameAndIcon.name); be.mDefaultPackageName = getNonNull( be.mDefaultPackageName, nameAndIcon.packageName); } } } } Loading Loading @@ -262,14 +277,20 @@ public class BatteryEntry { /** * Loads the app label and icon image and stores into the cache. */ public void loadNameAndIcon() { public static NameAndIcon loadNameAndIcon( Context context, int uid, Handler handler, BatteryEntry batteryEntry, String defaultPackageName) { String name = null; Drawable icon = null; // Bail out if the current sipper is not an App sipper. final int uid = getUid(); if (uid == 0 || uid == Process.INVALID_UID) { return; return null; } final PackageManager pm = mContext.getPackageManager(); final PackageManager pm = context.getPackageManager(); final String[] packages; if (uid == Process.SYSTEM_UID) { packages = new String[] {PACKAGE_SYSTEM}; Loading @@ -278,11 +299,11 @@ public class BatteryEntry { } if (packages != null) { String[] packageLabels = new String[packages.length]; final 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(); final IPackageManager ipm = AppGlobals.getPackageManager(); final int userId = UserHandle.getUserId(uid); for (int i = 0; i < packageLabels.length; i++) { try { Loading @@ -293,12 +314,12 @@ public class BatteryEntry { + packageLabels[i] + ", user " + userId); continue; } CharSequence label = ai.loadLabel(pm); final CharSequence label = ai.loadLabel(pm); if (label != null) { packageLabels[i] = label.toString(); } if (ai.icon != 0) { mDefaultPackageName = packages[i]; defaultPackageName = packages[i]; icon = ai.loadIcon(pm); break; } Loading Loading @@ -326,7 +347,7 @@ public class BatteryEntry { if (nm != null) { name = nm.toString(); if (pi.applicationInfo.icon != 0) { mDefaultPackageName = pkgName; defaultPackageName = pkgName; icon = pi.applicationInfo.loadIcon(pm); } break; Loading @@ -352,12 +373,13 @@ public class BatteryEntry { UidToDetail utd = new UidToDetail(); utd.name = name; utd.icon = icon; utd.packageName = mDefaultPackageName; utd.packageName = defaultPackageName; sUidCache.put(uidString, utd); if (sHandler != null) { sHandler.sendMessage(sHandler.obtainMessage(MSG_UPDATE_NAME_ICON, this)); if (handler != null) { handler.sendMessage(sHandler.obtainMessage(MSG_UPDATE_NAME_ICON, batteryEntry)); } return new NameAndIcon(name, defaultPackageName, icon, /*iconId=*/ 0); } /** Loading Loading @@ -557,4 +579,8 @@ public class BatteryEntry { } return new NameAndIcon(name, null /* icon */, iconId); } private static <T> T getNonNull(T originalObj, T newObj) { return newObj != null ? newObj : originalObj; } }