Gracefully ignore items that don't support notifications

PackageUserKey is only meant to be used for items that support
notifications, so when trying to update it for an item that
doesn't, we don't use it to check if the item has notifications.

This fixes a crash that happens when trying to update notifications
for a legacy shortcut, as such a shortcut doesn't have a component
on its intent, which we were trying to use to populate PackageUserKey.

Bug: 34842278
Change-Id: I8c69ccebbf9d93505d5b29ecd25d76c65610ddc4
diff --git a/src/com/android/launcher3/Workspace.java b/src/com/android/launcher3/Workspace.java
index d2008a6..9819418 100644
--- a/src/com/android/launcher3/Workspace.java
+++ b/src/com/android/launcher3/Workspace.java
@@ -3987,8 +3987,8 @@
         mapOverItems(MAP_RECURSE, new ItemOperator() {
             @Override
             public boolean evaluate(ItemInfo info, View v) {
-                if (info instanceof ShortcutInfo && v instanceof BubbleTextView) {
-                    packageUserKey.updateFromItemInfo(info);
+                if (info instanceof ShortcutInfo && v instanceof BubbleTextView
+                        && packageUserKey.updateFromItemInfo(info)) {
                     if (updatedBadges.contains(packageUserKey)) {
                         ((BubbleTextView) v).applyBadgeState(info);
                     }
diff --git a/src/com/android/launcher3/allapps/AllAppsContainerView.java b/src/com/android/launcher3/allapps/AllAppsContainerView.java
index ec1fa34..54d0bbe 100644
--- a/src/com/android/launcher3/allapps/AllAppsContainerView.java
+++ b/src/com/android/launcher3/allapps/AllAppsContainerView.java
@@ -478,8 +478,7 @@
     public void updateIconBadges(Set<PackageUserKey> updatedBadges) {
         final PackageUserKey packageUserKey = new PackageUserKey(null, null);
         for (AlphabeticalAppsList.AdapterItem app : mApps.getAdapterItems()) {
-            if (app.appInfo != null) {
-                packageUserKey.updateFromItemInfo(app.appInfo);
+            if (app.appInfo != null && packageUserKey.updateFromItemInfo(app.appInfo)) {
                 if (updatedBadges.contains(packageUserKey)) {
                     mAdapter.notifyItemChanged(app.position);
                 }
diff --git a/src/com/android/launcher3/util/PackageUserKey.java b/src/com/android/launcher3/util/PackageUserKey.java
index d08b0e9..3fb2401 100644
--- a/src/com/android/launcher3/util/PackageUserKey.java
+++ b/src/com/android/launcher3/util/PackageUserKey.java
@@ -4,6 +4,7 @@
 import android.service.notification.StatusBarNotification;
 
 import com.android.launcher3.ItemInfo;
+import com.android.launcher3.shortcuts.DeepShortcutManager;
 
 import java.util.Arrays;
 
@@ -32,9 +33,16 @@
         mHashCode = Arrays.hashCode(new Object[] {packageName, user});
     }
 
-    /** This should only be called to avoid new object creations in a loop. */
-    public void updateFromItemInfo(ItemInfo info) {
-        update(info.getTargetComponent().getPackageName(), info.user);
+    /**
+     * This should only be called to avoid new object creations in a loop.
+     * @return Whether this PackageUserKey was successfully updated - it shouldn't be used if not.
+     */
+    public boolean updateFromItemInfo(ItemInfo info) {
+        if (DeepShortcutManager.supportsShortcuts(info)) {
+            update(info.getTargetComponent().getPackageName(), info.user);
+            return true;
+        }
+        return false;
     }
 
     @Override