Merge "Better separation between DragDriver and DragController" into ub-launcher3-master
diff --git a/src/com/android/launcher3/DragController.java b/src/com/android/launcher3/DragController.java
index 53e90fc..2b4f019 100644
--- a/src/com/android/launcher3/DragController.java
+++ b/src/com/android/launcher3/DragController.java
@@ -43,7 +43,7 @@
 /**
  * Class for initiating a drag within a view or across multiple views.
  */
-public class DragController {
+public class DragController implements DragDriver.EventListener {
     private static final String TAG = "Launcher.DragController";
 
     /** Indicates the drag is a move.  */
@@ -91,7 +91,7 @@
     /** the area at the edge of the screen that makes the workspace go left
      *   or right while you're dragging.
      */
-    private int mScrollZone;
+    private final int mScrollZone;
 
     private DropTarget.DragObject mDragObject;
 
@@ -123,7 +123,7 @@
     private int mTmpPoint[] = new int[2];
     private Rect mDragLayerRect = new Rect();
 
-    protected int mFlingToDeleteThresholdVelocity;
+    protected final int mFlingToDeleteThresholdVelocity;
     private VelocityTracker mVelocityTracker;
 
     /**
@@ -341,6 +341,7 @@
         }
         endDrag();
     }
+
     public void onAppsRemoved(final ArrayList<String> packageNames, HashSet<ComponentName> cns) {
         // Cancel the current drag if we are removing an app that we are dragging
         if (mDragObject != null) {
@@ -428,18 +429,14 @@
         mLastTouchUpTime = -1;
     }
 
-    /**
-     * Call this from the drag driver.
-     */
+    @Override
     public void onDriverDragMove(float x, float y) {
         final int[] dragLayerPos = getClampedDragLayerPos(x, y);
 
         handleMoveEvent(dragLayerPos[0], dragLayerPos[1]);
     }
 
-    /**
-     * Call this from the drag driver.
-     */
+    @Override
     public void onDriverDragEnd(float x, float y, DropTarget dropTargetOverride) {
         final int[] dragLayerPos = getClampedDragLayerPos(x, y);
         final int dragLayerX = dragLayerPos[0];
@@ -467,6 +464,11 @@
         endDrag();
     }
 
+    @Override
+    public void onDriverDragCancel() {
+        cancelDrag();
+    }
+
     /**
      * Call this from a drag source view.
      */
diff --git a/src/com/android/launcher3/DragDriver.java b/src/com/android/launcher3/DragDriver.java
index b4e7bda..6cd52bd 100644
--- a/src/com/android/launcher3/DragDriver.java
+++ b/src/com/android/launcher3/DragDriver.java
@@ -28,10 +28,16 @@
  * Base class for driving a drag/drop operation.
  */
 public abstract class DragDriver {
-    protected final DragController mDragController;
+    protected final EventListener mEventListener;
 
-    public DragDriver(DragController dragController) {
-        mDragController = dragController;
+    public interface EventListener {
+        void onDriverDragMove(float x, float y);
+        void onDriverDragEnd(float x, float y, DropTarget dropTargetOverride);
+        void onDriverDragCancel();
+    }
+
+    public DragDriver(EventListener eventListener) {
+        mEventListener = eventListener;
     }
 
     /**
@@ -113,7 +119,7 @@
 
         if (!mDragView.startDrag(dragData, shadowBuilder, null, flags)) {
             mDragging = false;
-            mDragController.cancelDrag();
+            mEventListener.onDriverDragCancel();
             return;
         }
 
@@ -151,7 +157,7 @@
             case DragEvent.ACTION_DRAG_LOCATION:
                 mLastX = event.getX();
                 mLastY = event.getY();
-                mDragController.onDriverDragMove(event.getX(), event.getY());
+                mEventListener.onDriverDragMove(event.getX(), event.getY());
                 return true;
 
             case DragEvent.ACTION_DROP:
@@ -172,7 +178,7 @@
                 final DropTarget dropTargetOverride = acceptedByAnotherWindow ?
                         new AnotherWindowDropTarget(mDragView.getContext()) : null;
 
-                mDragController.onDriverDragEnd(mLastX, mLastY, dropTargetOverride);
+                mEventListener.onDriverDragEnd(mLastX, mLastY, dropTargetOverride);
                 mDragging = false;
                 return true;
 
@@ -199,14 +205,14 @@
 
         switch (action) {
             case MotionEvent.ACTION_MOVE:
-                mDragController.onDriverDragMove(ev.getX(), ev.getY());
+                mEventListener.onDriverDragMove(ev.getX(), ev.getY());
                 break;
             case MotionEvent.ACTION_UP:
-                mDragController.onDriverDragMove(ev.getX(), ev.getY());
-                mDragController.onDriverDragEnd(ev.getX(), ev.getY(), null);
+                mEventListener.onDriverDragMove(ev.getX(), ev.getY());
+                mEventListener.onDriverDragEnd(ev.getX(), ev.getY(), null);
                 break;
             case MotionEvent.ACTION_CANCEL:
-                mDragController.cancelDrag();
+                mEventListener.onDriverDragCancel();
                 break;
         }
 
@@ -219,10 +225,10 @@
 
         switch (action) {
             case MotionEvent.ACTION_UP:
-                mDragController.onDriverDragEnd(ev.getX(), ev.getY(), null);
+                mEventListener.onDriverDragEnd(ev.getX(), ev.getY(), null);
                 break;
             case MotionEvent.ACTION_CANCEL:
-                mDragController.cancelDrag();
+                mEventListener.onDriverDragCancel();
                 break;
         }