From a218e732b0a67e446f30bf2aa13e6df070fe856a Mon Sep 17 00:00:00 2001 From: Christopher Tate Date: Sun, 18 Aug 2013 17:26:48 -0700 Subject: [PATCH] Don't crash when procstats has data for a now-disused uid That is, PackageManager.getPackagesForUid(uid) can return null, so deal with it. Bug 10374656 Change-Id: I4eacd48c809b778e131d37dba0e86c583553e41f --- .../settings/applications/ProcessStatsUi.java | 39 +++++++++++-------- 1 file changed, 22 insertions(+), 17 deletions(-) diff --git a/src/com/android/settings/applications/ProcessStatsUi.java b/src/com/android/settings/applications/ProcessStatsUi.java index ec49e0d5149..8e98d2362e8 100644 --- a/src/com/android/settings/applications/ProcessStatsUi.java +++ b/src/com/android/settings/applications/ProcessStatsUi.java @@ -335,26 +335,31 @@ public class ProcessStatsUi extends PreferenceFragment { } if (targetApp == null) { String[] packages = pm.getPackagesForUid(proc.mUid); - for (String curPkg : packages) { - try { - final PackageInfo pi = pm.getPackageInfo(curPkg, - PackageManager.GET_DISABLED_COMPONENTS | - PackageManager.GET_DISABLED_UNTIL_USED_COMPONENTS | - PackageManager.GET_UNINSTALLED_PACKAGES); - if (pi.sharedUserLabel != 0) { - targetApp = pi.applicationInfo; - final CharSequence nm = pm.getText(curPkg, - pi.sharedUserLabel, pi.applicationInfo); - if (nm != null) { - label = nm.toString() + " (" + proc.mName + ")"; - } else { - label = targetApp.loadLabel(pm).toString() + " (" - + proc.mName + ")"; + if (packages != null) { + for (String curPkg : packages) { + try { + final PackageInfo pi = pm.getPackageInfo(curPkg, + PackageManager.GET_DISABLED_COMPONENTS | + PackageManager.GET_DISABLED_UNTIL_USED_COMPONENTS | + PackageManager.GET_UNINSTALLED_PACKAGES); + if (pi.sharedUserLabel != 0) { + targetApp = pi.applicationInfo; + final CharSequence nm = pm.getText(curPkg, + pi.sharedUserLabel, pi.applicationInfo); + if (nm != null) { + label = nm.toString() + " (" + proc.mName + ")"; + } else { + label = targetApp.loadLabel(pm).toString() + " (" + + proc.mName + ")"; + } + break; } - break; + } catch (PackageManager.NameNotFoundException e) { } - } catch (PackageManager.NameNotFoundException e) { } + } else { + // no current packages for this uid, typically because of uninstall + Log.i(TAG, "No package for uid " + proc.mUid); } } pref.setTitle(label);