Fixing regression where the source icon becomes visible while dragging

Bug: 30291280
Change-Id: I5687e00371315a318e8ff93dd3de4c5f437a6971
diff --git a/src/com/android/launcher3/shortcuts/DeepShortcutsContainer.java b/src/com/android/launcher3/shortcuts/DeepShortcutsContainer.java
index c9eee81..20532c1 100644
--- a/src/com/android/launcher3/shortcuts/DeepShortcutsContainer.java
+++ b/src/com/android/launcher3/shortcuts/DeepShortcutsContainer.java
@@ -87,6 +87,8 @@
     private boolean mIsAboveIcon;
     private boolean mIsAnimatingOpen;
 
+    private boolean mSrcIconDragStarted;
+
     /**
      * Sorts shortcuts in rank order, with manifest shortcuts coming before dynamic shortcuts.
      */
@@ -349,7 +351,8 @@
 
             boolean containerContainsTouch = x >= 0 && y >= 0 && x < getWidth() && y < getHeight();
             if (shouldStartDeferredDrag((int) x, (int) y, containerContainsTouch)) {
-                cleanupDeferredDrag();
+                mSrcIconDragStarted = true;
+                cleanupDeferredDrag(true);
                 mDeferredDragIcon.getParent().requestDisallowInterceptTouchEvent(false);
                 mDeferredDragIcon.getOnLongClickListener().onLongClick(mDeferredDragIcon);
                 mLauncher.getDragController().onTouchEvent(ev);
@@ -379,7 +382,7 @@
                 }
             }
         } else if (action == MotionEvent.ACTION_UP) {
-            cleanupDeferredDrag();
+            cleanupDeferredDrag(true);
             // Launch a shortcut if user was hovering over it.
             for (int i = 0; i < childCount; i++) {
                 DeepShortcutView shortcut = getShortcutAt(i);
@@ -389,7 +392,8 @@
                 }
             }
         } else if (action == MotionEvent.ACTION_CANCEL) {
-            cleanupDeferredDrag();
+            // Do not change the source icon visibility if we are already dragging the source icon.
+            cleanupDeferredDrag(!mSrcIconDragStarted);
         }
         return true;
     }
@@ -414,11 +418,13 @@
         return !containerContainsTouch && (newDistToEdge - distToEdge > mStartDragThreshold);
     }
 
-    public void cleanupDeferredDrag() {
+    public void cleanupDeferredDrag(boolean updateSrcVisibility) {
         if (mDragView != null) {
             mDragView.remove();
         }
-        mDeferredDragIcon.setVisibility(VISIBLE);
+        if (updateSrcVisibility) {
+            mDeferredDragIcon.setVisibility(VISIBLE);
+        }
     }
 
     @Override