diff options
author | Winson Chung <winsonc@google.com> | 2011-08-18 12:12:41 -0700 |
---|---|---|
committer | Winson Chung <winsonc@google.com> | 2011-08-18 12:15:28 -0700 |
commit | 5308f24d4b66b020202b88eff672f5a89096ebb6 (patch) | |
tree | 6c7e9f4c633cd3e7d2bef552c2e53fc3951f6c9c | |
parent | c273c5814d7b312628107ad4a7bff9cc64e89eae (diff) | |
download | packages_apps_trebuchet-5308f24d4b66b020202b88eff672f5a89096ebb6.zip packages_apps_trebuchet-5308f24d4b66b020202b88eff672f5a89096ebb6.tar.gz packages_apps_trebuchet-5308f24d4b66b020202b88eff672f5a89096ebb6.tar.bz2 |
Fixing label cache issue due to different ResolveInfos being returned in different parts of loading, saves 1-10% on AllApps load. (5042022)
Change-Id: I17166bd6a50858ff76c475688fff9a9eaeba6010
-rw-r--r-- | src/com/android/launcher2/IconCache.java | 7 | ||||
-rw-r--r-- | src/com/android/launcher2/LauncherModel.java | 28 |
2 files changed, 23 insertions, 12 deletions
diff --git a/src/com/android/launcher2/IconCache.java b/src/com/android/launcher2/IconCache.java index b2ebe2a..247e164 100644 --- a/src/com/android/launcher2/IconCache.java +++ b/src/com/android/launcher2/IconCache.java @@ -183,12 +183,13 @@ public class IconCache { mCache.put(componentName, entry); - if (labelCache != null && labelCache.containsKey(info)) { - entry.title = labelCache.get(info).toString(); + ComponentName key = LauncherModel.getComponentNameFromResolveInfo(info); + if (labelCache != null && labelCache.containsKey(key)) { + entry.title = labelCache.get(key).toString(); } else { entry.title = info.loadLabel(mPackageManager).toString(); if (labelCache != null) { - labelCache.put(info, entry.title); + labelCache.put(key, entry.title); } } if (entry.title == null) { diff --git a/src/com/android/launcher2/LauncherModel.java b/src/com/android/launcher2/LauncherModel.java index c46e175..547d51f 100644 --- a/src/com/android/launcher2/LauncherModel.java +++ b/src/com/android/launcher2/LauncherModel.java @@ -1539,12 +1539,13 @@ public class LauncherModel extends BroadcastReceiver { // from the resource if (resolveInfo != null) { - if (labelCache != null && labelCache.containsKey(resolveInfo)) { - info.title = labelCache.get(resolveInfo); + ComponentName key = LauncherModel.getComponentNameFromResolveInfo(resolveInfo); + if (labelCache != null && labelCache.containsKey(key)) { + info.title = labelCache.get(key); } else { info.title = resolveInfo.activityInfo.loadLabel(manager); if (labelCache != null) { - labelCache.put(resolveInfo, info.title); + labelCache.put(key, info.title); } } } @@ -1823,6 +1824,13 @@ public class LauncherModel extends BroadcastReceiver { return sCollator.compare(a.label.toString(), b.label.toString()); } }; + static ComponentName getComponentNameFromResolveInfo(ResolveInfo info) { + if (info.activityInfo != null) { + return new ComponentName(info.activityInfo.packageName, info.activityInfo.name); + } else { + return new ComponentName(info.serviceInfo.packageName, info.serviceInfo.name); + } + } public static class ShortcutNameComparator implements Comparator<ResolveInfo> { private PackageManager mPackageManager; private HashMap<Object, CharSequence> mLabelCache; @@ -1836,19 +1844,21 @@ public class LauncherModel extends BroadcastReceiver { } public final int compare(ResolveInfo a, ResolveInfo b) { CharSequence labelA, labelB; - if (mLabelCache.containsKey(a)) { - labelA = mLabelCache.get(a); + ComponentName keyA = LauncherModel.getComponentNameFromResolveInfo(a); + ComponentName keyB = LauncherModel.getComponentNameFromResolveInfo(b); + if (mLabelCache.containsKey(keyA)) { + labelA = mLabelCache.get(keyA); } else { labelA = a.loadLabel(mPackageManager).toString(); - mLabelCache.put(a, labelA); + mLabelCache.put(keyA, labelA); } - if (mLabelCache.containsKey(b)) { - labelB = mLabelCache.get(b); + if (mLabelCache.containsKey(keyB)) { + labelB = mLabelCache.get(keyB); } else { labelB = b.loadLabel(mPackageManager).toString(); - mLabelCache.put(b, labelB); + mLabelCache.put(keyB, labelB); } return sCollator.compare(labelA, labelB); } |