From: Adam Cohen Date: Wed, 15 Jan 2014 23:18:08 +0000 (-0800) Subject: Don't migrate shortcuts for components that no longer exist X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=556f6135;p=android-x86%2Fpackages-apps-Trebuchet.git Don't migrate shortcuts for components that no longer exist Bug 12570791 Change-Id: Ie4b55afcee0c4d1d16acf7b830d7885800943454 --- diff --git a/src/com/android/launcher3/LauncherModel.java b/src/com/android/launcher3/LauncherModel.java index 4478e9bbd..2102a1fac 100644 --- a/src/com/android/launcher3/LauncherModel.java +++ b/src/com/android/launcher3/LauncherModel.java @@ -2709,7 +2709,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; @@ -2718,7 +2718,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 5676a9adb..d4ce322c8 100644 --- a/src/com/android/launcher3/LauncherProvider.java +++ b/src/com/android/launcher3/LauncherProvider.java @@ -1516,6 +1516,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 seenIntents = new HashSet(c.getCount()); @@ -1538,29 +1539,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); } } } @@ -1712,4 +1724,4 @@ public class LauncherProvider extends ContentProvider { } } } -} +} \ No newline at end of file