Fix bug drag viz & hover state

Change-Id: I6b40d4dd43a2ee0c127df938375870347faeb5f6
diff --git a/src/com/android/launcher2/CellLayout.java b/src/com/android/launcher2/CellLayout.java
index 57953c0..018a966 100644
--- a/src/com/android/launcher2/CellLayout.java
+++ b/src/com/android/launcher2/CellLayout.java
@@ -216,7 +216,6 @@
                             Log.d(TAG, "anim " + thisIndex + " update: " + val +
                                      ", isStopped " + anim.isStopped());
                         }
-
                         // Try to prevent it from continuing to run
                         animation.cancel();
                     } else {
@@ -837,10 +836,12 @@
     void visualizeDropLocation(
             View v, Bitmap dragOutline, int originX, int originY, int spanX, int spanY) {
 
+        final int oldDragCellX = mDragCell[0];
+        final int oldDragCellY = mDragCell[1];
         final int[] nearest = findNearestVacantArea(originX, originY, spanX, spanY, v, mDragCell);
         mDragCenter.set(originX + (v.getWidth() / 2), originY + (v.getHeight() / 2));
 
-        if (nearest != null) {
+        if (nearest != null && (nearest[0] != oldDragCellX || nearest[1] != oldDragCellY)) {
             // Find the top left corner of the rect the object will occupy
             final int[] topLeft = mTmpPoint;
             cellToPoint(nearest[0], nearest[1], topLeft);
@@ -859,16 +860,12 @@
             top += (v.getHeight() - dragOutline.getHeight()) / 2;
 
             final int oldIndex = mDragOutlineCurrent;
-            final Point lastPoint = mDragOutlines[oldIndex];
-            if (lastPoint.x != left || lastPoint.y != top) {
-                mDragOutlineCurrent = (oldIndex + 1) % mDragOutlines.length;
+            mDragOutlineAnims[oldIndex].animateOut();
+            mDragOutlineCurrent = (oldIndex + 1) % mDragOutlines.length;
 
-                mDragOutlines[mDragOutlineCurrent].set(left, top);
-
-                mDragOutlineAnims[oldIndex].animateOut();
-                mDragOutlineAnims[mDragOutlineCurrent].setTag(dragOutline);
-                mDragOutlineAnims[mDragOutlineCurrent].animateIn();
-            }
+            mDragOutlines[mDragOutlineCurrent].set(left, top);
+            mDragOutlineAnims[mDragOutlineCurrent].setTag(dragOutline);
+            mDragOutlineAnims[mDragOutlineCurrent].animateIn();
         }
 
         // If we are drawing crosshairs, the entire CellLayout needs to be invalidated
@@ -1084,21 +1081,19 @@
         if (mDragging) {
             mDragging = false;
 
-            // Invalidate the drag data
-            mDragCell[0] = -1;
-            mDragCell[1] = -1;
-
             // Fade out the drag indicators
             if (mCrosshairsAnimator != null) {
                 mCrosshairsAnimator.animateOut();
             }
-
-            final int prev = mDragOutlineCurrent;
-            mDragOutlineAnims[prev].animateOut();
-            mDragOutlineCurrent = (prev + 1) % mDragOutlines.length;
-            mDragOutlines[mDragOutlineCurrent].set(-1, -1);
-            mDragOutlineAlphas[mDragOutlineCurrent] = 0;
         }
+
+        // Invalidate the drag data
+        mDragCell[0] = -1;
+        mDragCell[1] = -1;
+        mDragOutlineAnims[mDragOutlineCurrent].animateOut();
+        mDragOutlineCurrent = (mDragOutlineCurrent + 1) % mDragOutlineAnims.length;
+
+        setHover(false);
     }
 
     /**
@@ -1115,14 +1110,12 @@
             lp.dropped = true;
             child.requestLayout();
         }
-        onDragExit();
     }
 
     void onDropAborted(View child) {
         if (child != null) {
             ((LayoutParams) child.getLayoutParams()).isDragging = false;
         }
-        onDragExit();
     }
 
     /**
@@ -1142,7 +1135,6 @@
      */
     void onDragEnter(View dragView) {
         if (!mDragging) {
-//            Log.d(TAG, "Received onDragEnter while drag still active");
             // Fade in the drag indicators
             if (mCrosshairsAnimator != null) {
                 mCrosshairsAnimator.animateIn();