More drag/drop adjustments:

* Make View.onDragEvent() public instead of protected.
* No longer @hide View.startDrag()
* Properly manage the boundaries of DRAG_STARTED / DRAG_ENDED notifications
  to windows (and as a result don't send bogus empty DRAG_STARTED events or
  double-recycle pooled DragEvents)

Change-Id: Ib75f5c1417640c82a5b043c555e02d6e6f4b4d9c
diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java
index 35b806a..472f7b4 100644
--- a/core/java/android/view/View.java
+++ b/core/java/android/view/View.java
@@ -9898,11 +9898,10 @@
     }
 
     /**
-     * Drag and drop.  App calls startDrag(), then callbacks to onMeasureDragThumbnail()
-     * and onDrawDragThumbnail() happen, then the drag operation is handed over to the
-     * OS.
+     * Drag and drop.  App calls startDrag(), then callbacks to the thumbnail builder's
+     * onProvideThumbnailMetrics() and onDrawThumbnail() methods happen, then the drag
+     * operation is handed over to the OS.
      * !!! TODO: real docs
-     * @hide
      */
     public final boolean startDrag(ClipData data, DragThumbnailBuilder thumbBuilder,
             boolean myWindowOnly) {
@@ -10027,7 +10026,7 @@
      * For DRAG_ENDED_EVENT, the 'event' argument may be null.  The view should return
      * to its normal visual state.
      */
-    protected boolean onDragEvent(DragEvent event) {
+    public boolean onDragEvent(DragEvent event) {
         return false;
     }