Don't migrate shortcuts for components that no longer exist

Bug 12570791

Change-Id: Ie4b55afcee0c4d1d16acf7b830d7885800943454
This commit is contained in:
Adam Cohen
2014-01-15 15:18:08 -08:00
parent 230cbf831c
commit 556f6135f9
2 changed files with 33 additions and 20 deletions
+3 -2
View File
@@ -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;
}
+30 -18
View File
@@ -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<String> seenIntents = new HashSet<String>(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 {
}
}
}
}
}