diff options
author | Adam Cohen <adamcohen@google.com> | 2014-01-15 15:18:08 -0800 |
---|---|---|
committer | Danesh M <daneshm90@gmail.com> | 2014-06-06 22:54:26 -0700 |
commit | 00612cac2ed50f30095c9f16a998edb456e39cb1 (patch) | |
tree | 443cd9a04cfe47d8f230b878d24e8aca401d19bb | |
parent | 082b0f24472cb056a237ba3cad25f2eb9cf0bd4b (diff) | |
download | android_packages_apps_Trebuchet-00612cac2ed50f30095c9f16a998edb456e39cb1.tar.gz android_packages_apps_Trebuchet-00612cac2ed50f30095c9f16a998edb456e39cb1.tar.bz2 android_packages_apps_Trebuchet-00612cac2ed50f30095c9f16a998edb456e39cb1.zip |
Don't migrate shortcuts for components that no longer exist
Bug 12570791
Change-Id: Ie4b55afcee0c4d1d16acf7b830d7885800943454
-rw-r--r-- | src/com/android/launcher3/LauncherModel.java | 5 | ||||
-rw-r--r-- | src/com/android/launcher3/LauncherProvider.java | 46 |
2 files changed, 32 insertions, 19 deletions
diff --git a/src/com/android/launcher3/LauncherModel.java b/src/com/android/launcher3/LauncherModel.java index 46ee0a326..481ce9f1d 100644 --- a/src/com/android/launcher3/LauncherModel.java +++ b/src/com/android/launcher3/LauncherModel.java @@ -2854,7 +2854,7 @@ public class LauncherModel extends BroadcastReceiver { return widgetsAndShortcuts; } - private boolean isPackageDisabled(PackageManager pm, String packageName) { + private static boolean isPackageDisabled(PackageManager pm, String packageName) { try { PackageInfo pi = pm.getPackageInfo(packageName, 0); return !pi.applicationInfo.enabled; @@ -2863,7 +2863,8 @@ public class LauncherModel extends BroadcastReceiver { } return false; } - private boolean isValidPackageComponent(PackageManager pm, ComponentName cn) { + + public static boolean isValidPackageComponent(PackageManager pm, ComponentName cn) { if (cn == null) { return false; } diff --git a/src/com/android/launcher3/LauncherProvider.java b/src/com/android/launcher3/LauncherProvider.java index e689b2e4c..2fe8b015f 100644 --- a/src/com/android/launcher3/LauncherProvider.java +++ b/src/com/android/launcher3/LauncherProvider.java @@ -1625,6 +1625,7 @@ public class LauncherProvider extends ContentProvider { final int width = (int) grid.numColumns; final int height = (int) grid.numRows; final int hotseatWidth = (int) grid.numHotseatIcons; + PackageManager pm = mContext.getPackageManager(); final HashSet<String> seenIntents = new HashSet<String>(c.getCount()); @@ -1647,29 +1648,40 @@ public class LauncherProvider extends ContentProvider { + c.getString(titleIndex) + "\": " + intentStr, true); if (itemType != Favorites.ITEM_TYPE_FOLDER) { + + final Intent intent; + final ComponentName cn; + try { + intent = Intent.parseUri(intentStr, 0); + } catch (URISyntaxException e) { + // bogus intent? + Launcher.addDumpLog(TAG, + "skipping invalid intent uri", true); + continue; + } + + cn = intent.getComponent(); + if (TextUtils.isEmpty(intentStr)) { // no intent? no icon Launcher.addDumpLog(TAG, "skipping empty intent", true); continue; + } else if (!LauncherModel.isValidPackageComponent(pm, cn)) { + // component no longer exists. + Launcher.addDumpLog(TAG, "skipping item whose component" + + "no longer exists.", true); + continue; } else { - try { - // Canonicalize - final Intent intent = Intent.parseUri(intentStr, 0); - // the Play Store sets the package parameter, but Launcher - // does not, so we clear that out to keep them the same - intent.setPackage(null); - final String key = intent.toUri(0); - if (seenIntents.contains(key)) { - Launcher.addDumpLog(TAG, "skipping duplicate", true); - continue; - } else { - seenIntents.add(key); - } - } catch (URISyntaxException e) { - // bogus intent? - Launcher.addDumpLog(TAG, - "skipping invalid intent uri", true); + // Canonicalize + // the Play Store sets the package parameter, but Launcher + // does not, so we clear that out to keep them the same + intent.setPackage(null); + final String key = intent.toUri(0); + if (seenIntents.contains(key)) { + Launcher.addDumpLog(TAG, "skipping duplicate", true); continue; + } else { + seenIntents.add(key); } } } |