From c2449702201ac0588f823719d23f7f6d39f6ad97 Mon Sep 17 00:00:00 2001 From: Vladislav Kaznacheev Date: Mon, 16 May 2016 12:57:15 -0700 Subject: [PATCH] Fix inconsistencies in DragEvent.getX/getY behavior and JavaDoc. Make getX/getY return view-relative position as specified in the class JavaDoc. Fix obvious errors in JavaDoc for getX/getY Bug: 28793547 Change-Id: Ic2ac646189711e7466594d4fc8326408fc0348e1 --- core/java/android/view/DragEvent.java | 11 ++++++----- core/java/android/view/ViewGroup.java | 12 ++++++++++++ 2 files changed, 18 insertions(+), 5 deletions(-) diff --git a/core/java/android/view/DragEvent.java b/core/java/android/view/DragEvent.java index 0dfbe70600396..fb482b4e33ff5 100644 --- a/core/java/android/view/DragEvent.java +++ b/core/java/android/view/DragEvent.java @@ -160,6 +160,8 @@ public class DragEvent implements Parcelable { * ACTION_DRAG_STARTED. *

* @see #ACTION_DRAG_ENDED + * @see #getX() + * @see #getY() */ public static final int ACTION_DRAG_STARTED = 1; @@ -323,17 +325,16 @@ public class DragEvent implements Parcelable { /** * Gets the X coordinate of the drag point. The value is only valid if the event action is - * {@link #ACTION_DRAG_LOCATION} or {@link #ACTION_DROP}. - * @return The current drag point's Y coordinate + * {@link #ACTION_DRAG_STARTED}, {@link #ACTION_DRAG_LOCATION} or {@link #ACTION_DROP}. + * @return The current drag point's X coordinate */ public float getX() { return mX; } /** - * Gets the Y coordinate of the drag point. The value is valid if the - * event action is {@link #ACTION_DRAG_ENTERED}, {@link #ACTION_DRAG_LOCATION}, - * {@link #ACTION_DROP}, or {@link #ACTION_DRAG_EXITED}. + * Gets the Y coordinate of the drag point. The value is only valid if the event action is + * {@link #ACTION_DRAG_STARTED}, {@link #ACTION_DRAG_LOCATION} or {@link #ACTION_DROP}. * @return The current drag point's Y coordinate */ public float getY() { diff --git a/core/java/android/view/ViewGroup.java b/core/java/android/view/ViewGroup.java index 0222d376b44e4..6b714a52ed5ad 100644 --- a/core/java/android/view/ViewGroup.java +++ b/core/java/android/view/ViewGroup.java @@ -1579,7 +1579,19 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager Log.d(View.VIEW_LOG_TAG, "Sending drag-started to view: " + child); } + final float tx = mCurrentDragStartEvent.mX; + final float ty = mCurrentDragStartEvent.mY; + + final float[] point = getTempPoint(); + point[0] = tx; + point[1] = ty; + transformPointToViewLocal(point, child); + + mCurrentDragStartEvent.mX = point[0]; + mCurrentDragStartEvent.mY = point[1]; final boolean canAccept = child.dispatchDragEvent(mCurrentDragStartEvent); + mCurrentDragStartEvent.mX = tx; + mCurrentDragStartEvent.mY = ty; if (canAccept) { mChildrenInterestedInDrag.add(child); if (!child.canAcceptDrag()) {