Prevent Drag n' Drop/Spring-load onto a selected folder.

Bug: 29538691
Change-Id: I01b1bb59ea816d6dc328dbf7830640442041bcfb
diff --git a/src/com/android/documentsui/ItemDragListener.java b/src/com/android/documentsui/ItemDragListener.java
index 152d3a0..2d67ff9 100644
--- a/src/com/android/documentsui/ItemDragListener.java
+++ b/src/com/android/documentsui/ItemDragListener.java
@@ -29,6 +29,8 @@
 import java.util.Timer;
 import java.util.TimerTask;
 
+import javax.annotation.Nullable;
+
 /**
  * An {@link OnDragListener} that adds support for "spring loading views". Use this when you want
  * items to pop-open when user hovers on them during a drag n drop.
@@ -59,7 +61,7 @@
             case DragEvent.ACTION_DRAG_STARTED:
                 return true;
             case DragEvent.ACTION_DRAG_ENTERED:
-                handleEnteredEvent(v);
+                handleEnteredEvent(v, event);
                 return true;
             case DragEvent.ACTION_DRAG_LOCATION:
                 handleLocationEvent(v, event.getX(), event.getY());
@@ -75,11 +77,12 @@
         return false;
     }
 
-    private void handleEnteredEvent(View v) {
+    private void handleEnteredEvent(View v, DragEvent event) {
+        @Nullable TimerTask task = createOpenTask(v, event);
+        if (task == null) {
+            return;
+        }
         mDragHost.setDropTargetHighlight(v, true);
-
-        TimerTask task = createOpenTask(v);
-        assert (task != null);
         v.setTag(R.id.drag_hovering_tag, task);
         mHoverTimer.schedule(task, SPRING_TIMEOUT);
     }
@@ -110,8 +113,10 @@
         return handleDropEventChecked(v, event);
     }
 
-    @VisibleForTesting
-    TimerTask createOpenTask(final View v) {
+    /**
+     * Sub-classes such as {@link DirectoryDragListener} can override this method and return null.
+     */
+    public @Nullable TimerTask createOpenTask(final View v, DragEvent event) {
         TimerTask task = new TimerTask() {
             @Override
             public void run() {