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 /src/com/android/launcher2/LauncherModel.java | |
parent | c273c5814d7b312628107ad4a7bff9cc64e89eae (diff) | |
download | android_packages_apps_Trebuchet-5308f24d4b66b020202b88eff672f5a89096ebb6.tar.gz android_packages_apps_Trebuchet-5308f24d4b66b020202b88eff672f5a89096ebb6.tar.bz2 android_packages_apps_Trebuchet-5308f24d4b66b020202b88eff672f5a89096ebb6.zip |
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
Diffstat (limited to 'src/com/android/launcher2/LauncherModel.java')
-rw-r--r-- | src/com/android/launcher2/LauncherModel.java | 28 |
1 files changed, 19 insertions, 9 deletions
diff --git a/src/com/android/launcher2/LauncherModel.java b/src/com/android/launcher2/LauncherModel.java index c46e1758f..547d51f2c 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); } |