Fix for NPE in #2248683
Also fix a problem in type-to-filter. It was looking for substring match
instead of searching on word boundaries. It will now search by word
boundaries (separated by space).
diff --git a/src/com/android/settings/ManageApplications.java b/src/com/android/settings/ManageApplications.java
index a71d17b..9cd6e23 100644
--- a/src/com/android/settings/ManageApplications.java
+++ b/src/com/android/settings/ManageApplications.java
@@ -1403,13 +1403,17 @@
}
} else {
final String prefixString = prefix.toString().toLowerCase();
+ final String spacePrefixString = " " + prefixString;
Map<String, String> newMap = new HashMap<String, String>();
synchronized (mFilterLock) {
Map<String, String> localMap = mFilterMap;
Set<String> keys = mFilterMap.keySet();
for (String key : keys) {
String label = localMap.get(key);
- if (label.indexOf(prefixString) != -1) {
+ if (label == null) continue;
+ label = label.toLowerCase();
+ if (label.startsWith(prefixString)
+ || label.indexOf(spacePrefixString) != -1) {
newMap.put(key, label);
}
}
@@ -1895,6 +1899,9 @@
public final int compare(ApplicationInfo a, ApplicationInfo b) {
AppInfo ainfo = mCache.getEntry(a.packageName);
AppInfo binfo = mCache.getEntry(b.packageName);
+ // Check for null app names, to avoid NPE in rare cases
+ if (ainfo == null || ainfo.appName == null) return -1;
+ if (binfo == null || binfo.appName == null) return 1;
return sCollator.compare(ainfo.appName.toString(), binfo.appName.toString());
}
}