diff --git a/src/com/android/launcher3/dragndrop/DragController.java b/src/com/android/launcher3/dragndrop/DragController.java
index 80c2860..5a5e7d0 100644
--- a/src/com/android/launcher3/dragndrop/DragController.java
+++ b/src/com/android/launcher3/dragndrop/DragController.java
@@ -221,7 +221,7 @@
         if (!mIsInPreDrag) {
             callOnDragStart();
         } else if (mOptions.preDragCondition != null) {
-            mOptions.preDragCondition.onPreDragStart();
+            mOptions.preDragCondition.onPreDragStart(mDragObject);
         }
 
         mLastTouch[0] = mMotionDownX;
@@ -236,7 +236,7 @@
             listener.onDragStart(mDragObject, mOptions);
         }
         if (mOptions.preDragCondition != null) {
-            mOptions.preDragCondition.onPreDragEnd(true /* dragStarted*/);
+            mOptions.preDragCondition.onPreDragEnd(mDragObject, true /* dragStarted*/);
         }
         mIsInPreDrag = false;
     }
@@ -335,7 +335,7 @@
 
     private void callOnDragEnd() {
         if (mIsInPreDrag && mOptions.preDragCondition != null) {
-            mOptions.preDragCondition.onPreDragEnd(false /* dragStarted*/);
+            mOptions.preDragCondition.onPreDragEnd(mDragObject, false /* dragStarted*/);
         }
         mIsInPreDrag = false;
         mOptions = null;
diff --git a/src/com/android/launcher3/dragndrop/DragOptions.java b/src/com/android/launcher3/dragndrop/DragOptions.java
index 906855a..230fa2d 100644
--- a/src/com/android/launcher3/dragndrop/DragOptions.java
+++ b/src/com/android/launcher3/dragndrop/DragOptions.java
@@ -20,6 +20,8 @@
 import android.support.annotation.CallSuper;
 import android.view.View;
 
+import com.android.launcher3.DropTarget;
+
 /**
  * Set of options to control the drag and drop behavior.
  */
@@ -52,7 +54,7 @@
          * The pre-drag has started, but onDragStart() is
          * deferred until shouldStartDrag() returns true.
          */
-        void onPreDragStart();
+        void onPreDragStart(DropTarget.DragObject dragObject);
 
         /**
          * The pre-drag has ended. This gets called at the same time as onDragStart()
@@ -60,6 +62,6 @@
          * @param dragStarted Whether the pre-drag ended because the actual drag started.
          *                    This will be true if the condition was met, otherwise false.
          */
-        void onPreDragEnd(boolean dragStarted);
+        void onPreDragEnd(DropTarget.DragObject dragObject, boolean dragStarted);
     }
 }
diff --git a/src/com/android/launcher3/dragndrop/PinItemDragListener.java b/src/com/android/launcher3/dragndrop/PinItemDragListener.java
index 73ad1c8..9770d40 100644
--- a/src/com/android/launcher3/dragndrop/PinItemDragListener.java
+++ b/src/com/android/launcher3/dragndrop/PinItemDragListener.java
@@ -40,6 +40,7 @@
 import com.android.launcher3.LauncherAppState;
 import com.android.launcher3.LauncherAppWidgetProviderInfo;
 import com.android.launcher3.PendingAddItemInfo;
+import com.android.launcher3.R;
 import com.android.launcher3.compat.PinItemRequestCompat;
 import com.android.launcher3.folder.Folder;
 import com.android.launcher3.graphics.LauncherIcons;
@@ -57,7 +58,8 @@
  * {@link DragSource} for handling drop from from a different window. This object is initialized
  * in the source window and is passed on to the Launcher activity as an Intent extra.
  */
-public class PinItemDragListener implements Parcelable, View.OnDragListener, DragSource {
+public class PinItemDragListener
+        implements Parcelable, View.OnDragListener, DragSource, DragOptions.PreDragCondition {
 
     private static final String TAG = "PinItemDragListener";
 
@@ -136,11 +138,6 @@
             return false;
         }
 
-        if (mLauncher.isWorkspaceLocked()) {
-            // TODO: implement wait
-            return false;
-        }
-
         final PendingAddItemInfo item;
         final Bitmap preview;
         final View view = new View(mLauncher);
@@ -203,6 +200,7 @@
         Point downPos = new Point((int) event.getX(), (int) event.getY());
         DragOptions options = new DragOptions();
         options.systemDndStartPoint = downPos;
+        options.preDragCondition = this;
 
         int x = downPos.x + dragShift.x;
         int y = downPos.y + dragShift.y;
@@ -213,6 +211,30 @@
     }
 
     @Override
+    public boolean shouldStartDrag(double distanceDragged) {
+        // Stay in pre-drag mode, if workspace is locked.
+        return !mLauncher.isWorkspaceLocked();
+    }
+
+    @Override
+    public void onPreDragStart(DropTarget.DragObject dragObject) {
+        // The predrag starts when the workspace is not yet loaded. In some cases we set
+        // the dragLayer alpha to 0 to have a nice fade-in animation. But that will prevent the
+        // dragView from being visible. Instead just skip the fade-in animation here.
+        mLauncher.getDragLayer().setAlpha(1);
+
+        dragObject.dragView.setColor(
+                mLauncher.getResources().getColor(R.color.delete_target_hover_tint));
+    }
+
+    @Override
+    public void onPreDragEnd(DropTarget.DragObject dragObject, boolean dragStarted) {
+        if (dragStarted) {
+            dragObject.dragView.setColor(0);
+        }
+    }
+
+    @Override
     public boolean supportsAppInfoDropTarget() {
         return false;
     }
diff --git a/src/com/android/launcher3/popup/PopupContainerWithArrow.java b/src/com/android/launcher3/popup/PopupContainerWithArrow.java
index c69cf6d..af1bd9b 100644
--- a/src/com/android/launcher3/popup/PopupContainerWithArrow.java
+++ b/src/com/android/launcher3/popup/PopupContainerWithArrow.java
@@ -498,12 +498,12 @@
             }
 
             @Override
-            public void onPreDragStart() {
+            public void onPreDragStart(DropTarget.DragObject dragObject) {
                 mOriginalIcon.setVisibility(INVISIBLE);
             }
 
             @Override
-            public void onPreDragEnd(boolean dragStarted) {
+            public void onPreDragEnd(DropTarget.DragObject dragObject, boolean dragStarted) {
                 if (!dragStarted) {
                     mOriginalIcon.setVisibility(VISIBLE);
                     mLauncher.getUserEventDispatcher().logDeepShortcutsOpen(mOriginalIcon);
