Cleanup and refactoring in relation to drag and drop

-> folder creation, adding to folders, reordering, switching pages
-> ensuring parity of dragEnter and dragExit in cell layouts and workspace
   (neither were consistently getting an even number of each)
-> actually enforced above with exceptions -- probably want to
   take these out, but maybe we can leave them in as warnings
-> fixed bug with mapping points to hotseat
-> fixes other bugs with drag and drop

Change-Id: I564568f810f2784d122ec6135012b67c2e8e7551
diff --git a/src/com/android/launcher2/CellLayout.java b/src/com/android/launcher2/CellLayout.java
index 199c41a..da7c2b0 100644
--- a/src/com/android/launcher2/CellLayout.java
+++ b/src/com/android/launcher2/CellLayout.java
@@ -161,6 +161,7 @@
     private int[] mDirectionVector = new int[2];
     int[] mPreviousReorderDirection = new int[2];
     private static final int INVALID_DIRECTION = -100;
+    private DropTarget.DragEnforcer mDragEnforcer;
 
     public CellLayout(Context context) {
         this(context, null);
@@ -172,6 +173,7 @@
 
     public CellLayout(Context context, AttributeSet attrs, int defStyle) {
         super(context, attrs, defStyle);
+        mDragEnforcer = new DropTarget.DragEnforcer(mContext);
 
         // A ViewGroup usually does not draw, but CellLayout needs to draw a rectangle to show
         // the user where a dragged item will land when dropped.
@@ -2508,6 +2510,7 @@
      * or it may have begun on another layout.
      */
     void onDragEnter() {
+        mDragEnforcer.onDragEnter();
         if (!mDragging) {
             // Fade in the drag indicators
             if (mCrosshairsAnimator != null) {
@@ -2521,6 +2524,7 @@
      * Called when drag has left this CellLayout or has been completed (successfully or not)
      */
     void onDragExit() {
+        mDragEnforcer.onDragExit();
         // This can actually be called when we aren't in a drag, e.g. when adding a new
         // item to this layout via the customize drawer.
         // Guard against that case.