diff --git a/src/com/android/launcher3/allapps/AllAppsRecyclerView.java b/src/com/android/launcher3/allapps/AllAppsRecyclerView.java
index 55f544c..2183477 100644
--- a/src/com/android/launcher3/allapps/AllAppsRecyclerView.java
+++ b/src/com/android/launcher3/allapps/AllAppsRecyclerView.java
@@ -208,12 +208,8 @@
 
     @Override
     public void fillInLaunchSourceData(View v, ItemInfo info, Target target, Target targetParent) {
-        targetParent.containerType = getContainerType(v);
-    }
-
-    public int getContainerType(View v) {
         if (mApps.hasFilter()) {
-            return LauncherLogProto.SEARCHRESULT;
+            targetParent.containerType = LauncherLogProto.SEARCHRESULT;
         } else {
             if (v instanceof BubbleTextView) {
                 BubbleTextView icon = (BubbleTextView) v;
@@ -222,11 +218,12 @@
                     List<AlphabeticalAppsList.AdapterItem> items = mApps.getAdapterItems();
                     AlphabeticalAppsList.AdapterItem item = items.get(position);
                     if (item.viewType == AllAppsGridAdapter.VIEW_TYPE_PREDICTION_ICON) {
-                        return LauncherLogProto.PREDICTION;
+                        targetParent.containerType = LauncherLogProto.PREDICTION;
+                        return;
                     }
                 }
             }
-            return LauncherLogProto.ALLAPPS;
+            targetParent.containerType = LauncherLogProto.ALLAPPS;
         }
     }
 
diff --git a/src/com/android/launcher3/logging/UserEventDispatcher.java b/src/com/android/launcher3/logging/UserEventDispatcher.java
index e780cc9..64a5f57 100644
--- a/src/com/android/launcher3/logging/UserEventDispatcher.java
+++ b/src/com/android/launcher3/logging/UserEventDispatcher.java
@@ -147,12 +147,14 @@
         dispatchUserEvent(event, null);
     }
 
-    public void logDeepShortcutsOpen(int containerType) {
+    public void logDeepShortcutsOpen(View icon) {
         LauncherEvent event = LoggerUtils.initLauncherEvent(
                 Action.TOUCH, Target.ITEM, Target.CONTAINER);
-        event.action.touch = Action.LONGPRESS;
+        LaunchSourceProvider provider = getLaunchProviderRecursive(icon);
+        ItemInfo info = (ItemInfo) icon.getTag();
+        provider.fillInLaunchSourceData(icon, info, event.srcTarget[0], event.srcTarget[1]);
         event.srcTarget[0].itemType = LauncherLogProto.DEEPSHORTCUT;
-        event.srcTarget[1].containerType = containerType;
+        event.action.touch = Action.LONGPRESS;
         event.elapsedContainerMillis = System.currentTimeMillis() - mElapsedContainerMillis;
         event.elapsedSessionMillis = System.currentTimeMillis() - mElapsedSessionMillis;
         dispatchUserEvent(event, null);
diff --git a/src/com/android/launcher3/shortcuts/DeepShortcutsContainer.java b/src/com/android/launcher3/shortcuts/DeepShortcutsContainer.java
index a341b97..6cd6d33 100644
--- a/src/com/android/launcher3/shortcuts/DeepShortcutsContainer.java
+++ b/src/com/android/launcher3/shortcuts/DeepShortcutsContainer.java
@@ -33,7 +33,6 @@
 import android.os.Looper;
 import android.text.TextUtils;
 import android.util.AttributeSet;
-import android.util.Log;
 import android.view.Gravity;
 import android.view.HapticFeedbackConstants;
 import android.view.LayoutInflater;
@@ -54,19 +53,16 @@
 import com.android.launcher3.LauncherAnimUtils;
 import com.android.launcher3.LauncherAppState;
 import com.android.launcher3.LauncherModel;
-import com.android.launcher3.LauncherSettings;
 import com.android.launcher3.LauncherViewPropertyAnimator;
 import com.android.launcher3.R;
 import com.android.launcher3.ShortcutInfo;
 import com.android.launcher3.Utilities;
 import com.android.launcher3.Workspace;
 import com.android.launcher3.accessibility.ShortcutMenuAccessibilityDelegate;
-import com.android.launcher3.allapps.AllAppsRecyclerView;
 import com.android.launcher3.compat.UserHandleCompat;
 import com.android.launcher3.dragndrop.DragController;
 import com.android.launcher3.dragndrop.DragLayer;
 import com.android.launcher3.dragndrop.DragView;
-import com.android.launcher3.folder.Folder;
 import com.android.launcher3.graphics.TriangleShape;
 import com.android.launcher3.logging.UserEventDispatcher;
 import com.android.launcher3.userevent.nano.LauncherLogProto;
@@ -476,6 +472,7 @@
             }
         } else if (action == MotionEvent.ACTION_UP) {
             cleanupDeferredDrag(true);
+            mLauncher.getUserEventDispatcher().logDeepShortcutsOpen(mDeferredDragIcon);
         } else if (action == MotionEvent.ACTION_CANCEL) {
             // Do not change the source icon visibility if we are already dragging the source icon.
             cleanupDeferredDrag(!mSrcIconDragStarted);
@@ -745,33 +742,11 @@
             container.populateAndShow(icon, ids);
             icon.performHapticFeedback(HapticFeedbackConstants.LONG_PRESS,
                     HapticFeedbackConstants.FLAG_IGNORE_VIEW_SETTING);
-            logOpen(launcher, icon);
             return container;
         }
         return null;
     }
 
-    private static void logOpen(Launcher launcher, View icon) {
-        ItemInfo info = (ItemInfo) icon.getTag();
-        long iconContainer = info.container;
-        Folder openFolder = launcher.getWorkspace().getOpenFolder();
-        int containerType;
-        if (iconContainer == LauncherSettings.Favorites.CONTAINER_DESKTOP) {
-            containerType = LauncherLogProto.WORKSPACE;
-        } else if (iconContainer == LauncherSettings.Favorites.CONTAINER_HOTSEAT) {
-            containerType = LauncherLogProto.HOTSEAT;
-        } else if (openFolder != null && iconContainer == openFolder.getInfo().id) {
-            containerType = LauncherLogProto.FOLDER;
-        } else if (icon.getParent() instanceof AllAppsRecyclerView) {
-            containerType = ((AllAppsRecyclerView) icon.getParent()).getContainerType(icon);
-        } else {
-            // This should not happen.
-            Log.w(TAG, "Couldn't determine parent of shortcut container");
-            containerType = LauncherLogProto.DEFAULT_CONTAINERTYPE;
-        }
-        launcher.getUserEventDispatcher().logDeepShortcutsOpen(containerType);
-    }
-
     /**
      * Extension of {@link ShortcutInfo} which does not badge the icons.
      */
