Try and resolve the package name from the intent directly falling back to the resolved component name if it fails. (Bug 6452306)
Change-Id: Ifb2187fb845f807f30df966bf298ffde1b779b46
diff --git a/src/com/android/launcher2/ApplicationInfo.java b/src/com/android/launcher2/ApplicationInfo.java
index 1fc1d1f..281d59c 100644
--- a/src/com/android/launcher2/ApplicationInfo.java
+++ b/src/com/android/launcher2/ApplicationInfo.java
@@ -102,6 +102,12 @@
firstInstallTime = info.firstInstallTime;
}
+ /** Returns the package name that the shortcut's intent will resolve to, or an empty string if
+ * none exists. */
+ String getPackageName() {
+ return super.getPackageName(intent);
+ }
+
/**
* Creates the application intent based on a component name and various launch flags.
* Sets {@link #itemType} to {@link LauncherSettings.BaseLauncherColumns#ITEM_TYPE_APPLICATION}.
diff --git a/src/com/android/launcher2/DragController.java b/src/com/android/launcher2/DragController.java
index 9b61755..b4b20c6 100644
--- a/src/com/android/launcher2/DragController.java
+++ b/src/com/android/launcher2/DragController.java
@@ -381,8 +381,8 @@
if (dragInfo != null &&
dragInfo.intent != null &&
info.intent != null) {
- boolean isSamePackage = info.intent.getComponent().getPackageName().equals(
- dragInfo.intent.getComponent().getPackageName());
+ boolean isSamePackage = dragInfo.getPackageName().equals(
+ info.getPackageName());
if (isSamePackage) {
cancelDrag();
return;
diff --git a/src/com/android/launcher2/ItemInfo.java b/src/com/android/launcher2/ItemInfo.java
index 11a6c0d..d34b87e 100644
--- a/src/com/android/launcher2/ItemInfo.java
+++ b/src/com/android/launcher2/ItemInfo.java
@@ -16,13 +16,14 @@
package com.android.launcher2;
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-
import android.content.ContentValues;
+import android.content.Intent;
import android.graphics.Bitmap;
import android.util.Log;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+
/**
* Represents an item in the launcher.
*/
@@ -109,6 +110,21 @@
container = info.container;
}
+ /** Returns the package name that the intent will resolve to, or an empty string if
+ * none exists. */
+ static String getPackageName(Intent intent) {
+ if (intent != null) {
+ String packageName = intent.getPackage();
+ if (packageName == null) {
+ packageName = intent.getComponent().getPackageName();
+ }
+ if (packageName != null) {
+ return packageName;
+ }
+ }
+ return "";
+ }
+
/**
* Write the fields of this item to the DB
*
diff --git a/src/com/android/launcher2/LauncherModel.java b/src/com/android/launcher2/LauncherModel.java
index bae4c56..97e52fe 100644
--- a/src/com/android/launcher2/LauncherModel.java
+++ b/src/com/android/launcher2/LauncherModel.java
@@ -1684,7 +1684,7 @@
for (ItemInfo i : sWorkspaceItems) {
if (i instanceof ShortcutInfo) {
ShortcutInfo info = (ShortcutInfo) i;
- if (info.intent.getComponent().getPackageName().equals(packageName)) {
+ if (packageName.equals(info.getPackageName())) {
infos.add(info);
}
}
diff --git a/src/com/android/launcher2/ShortcutInfo.java b/src/com/android/launcher2/ShortcutInfo.java
index 76892db..533059f 100644
--- a/src/com/android/launcher2/ShortcutInfo.java
+++ b/src/com/android/launcher2/ShortcutInfo.java
@@ -98,6 +98,12 @@
return mIcon;
}
+ /** Returns the package name that the shortcut's intent will resolve to, or an empty string if
+ * none exists. */
+ String getPackageName() {
+ return super.getPackageName(intent);
+ }
+
public void updateIcon(IconCache iconCache) {
mIcon = iconCache.getIcon(intent);
usingFallbackIcon = iconCache.isDefaultIcon(mIcon);
diff --git a/src/com/android/launcher2/Workspace.java b/src/com/android/launcher2/Workspace.java
index 3c84805..5e45c99 100644
--- a/src/com/android/launcher2/Workspace.java
+++ b/src/com/android/launcher2/Workspace.java
@@ -3622,7 +3622,8 @@
for (String intentStr : newApps) {
try {
Intent intent = Intent.parseUri(intentStr, 0);
- if (packageNames.contains(intent.getComponent().getPackageName())) {
+ String pn = ItemInfo.getPackageName(intent);
+ if (packageNames.contains(pn)) {
newApps.remove(intentStr);
}
} catch (URISyntaxException e) {}