From be365165ed00205265c1876c4829fa9ac630da2a Mon Sep 17 00:00:00 2001 From: Winson Chung Date: Mon, 7 May 2012 10:34:12 -0700 Subject: [PATCH] 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 --- .../android/launcher2/ApplicationInfo.java | 6 +++++ src/com/android/launcher2/DragController.java | 4 ++-- src/com/android/launcher2/ItemInfo.java | 22 ++++++++++++++++--- src/com/android/launcher2/LauncherModel.java | 2 +- src/com/android/launcher2/ShortcutInfo.java | 6 +++++ src/com/android/launcher2/Workspace.java | 3 ++- 6 files changed, 36 insertions(+), 7 deletions(-) diff --git a/src/com/android/launcher2/ApplicationInfo.java b/src/com/android/launcher2/ApplicationInfo.java index 1fc1d1f55e..281d59c688 100644 --- a/src/com/android/launcher2/ApplicationInfo.java +++ b/src/com/android/launcher2/ApplicationInfo.java @@ -102,6 +102,12 @@ class ApplicationInfo extends ItemInfo { 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 9b617552e2..b4b20c69f4 100644 --- a/src/com/android/launcher2/DragController.java +++ b/src/com/android/launcher2/DragController.java @@ -381,8 +381,8 @@ public class DragController { 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 11a6c0d000..d34b87e399 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 @@ class ItemInfo { 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 bae4c56fc0..97e52fe317 100644 --- a/src/com/android/launcher2/LauncherModel.java +++ b/src/com/android/launcher2/LauncherModel.java @@ -1684,7 +1684,7 @@ public class LauncherModel extends BroadcastReceiver { 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 76892dbde7..533059f578 100644 --- a/src/com/android/launcher2/ShortcutInfo.java +++ b/src/com/android/launcher2/ShortcutInfo.java @@ -98,6 +98,12 @@ class ShortcutInfo extends ItemInfo { 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 3c84805dd5..5e45c99d82 100644 --- a/src/com/android/launcher2/Workspace.java +++ b/src/com/android/launcher2/Workspace.java @@ -3622,7 +3622,8 @@ public class Workspace extends SmoothPagedView 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) {}