Fix issue where shortcuts were still being added even if corresponding app is uninstalled

issue 14410162

Change-Id: I7857aace069c4eb4c1ee504088f4526d61e1f30e
This commit is contained in:
Adam Cohen
2014-05-20 17:03:04 -07:00
parent 7716b40065
commit a28b78e838
2 changed files with 28 additions and 8 deletions
@@ -17,6 +17,7 @@
package com.android.launcher3;
import android.content.BroadcastReceiver;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
@@ -29,6 +30,8 @@ import android.util.Base64;
import android.util.Log;
import android.widget.Toast;
import com.android.launcher3.compat.UserHandleCompat;
import org.json.JSONObject;
import org.json.JSONStringer;
import org.json.JSONTokener;
@@ -280,19 +283,27 @@ public class InstallShortcutReceiver extends BroadcastReceiver {
final boolean exists = LauncherModel.shortcutExists(context, name, intent);
//final boolean allowDuplicate = data.getBooleanExtra(Launcher.EXTRA_SHORTCUT_DUPLICATE, true);
// TODO-XXX: Disable duplicates for now
if (!exists /* && allowDuplicate */) {
// If the intent specifies a package, make sure the package exists
String packageName = intent.getPackage();
if (packageName == null) {
packageName = intent.getComponent() == null ? null :
intent.getComponent().getPackageName();
}
if (packageName != null && !packageName.isEmpty()) {
UserHandleCompat myUserHandle = UserHandleCompat.myUserHandle();
if (!LauncherModel.isValidPackage(context, packageName, myUserHandle)) {
if (DBG) Log.d(TAG, "Ignoring shortcut for absent package:" + intent);
continue;
}
}
if (!exists) {
// Generate a shortcut info to add into the model
ShortcutInfo info = getShortcutInfo(context, pendingInfo.data,
pendingInfo.launchIntent);
addShortcuts.add(info);
}
/*
else if (exists && !allowDuplicate) {
result = INSTALL_SHORTCUT_IS_DUPLICATE;
duplicateName = name;
}
*/
}
// Notify the user once if we weren't able to place any duplicates
@@ -2934,6 +2934,15 @@ public class LauncherModel extends BroadcastReceiver
return launcherApps.isActivityEnabledForProfile(cn, user);
}
public static boolean isValidPackage(Context context, String packageName,
UserHandleCompat user) {
if (packageName == null) {
return false;
}
final LauncherAppsCompat launcherApps = LauncherAppsCompat.getInstance(context);
return launcherApps.isPackageEnabledForProfile(packageName, user);
}
/**
* Make an ShortcutInfo object for a restored application or shortcut item that points
* to a package that is not yet installed on the system.