diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/com/android/launcher3/DragDriver.java | 85 | ||||
-rw-r--r-- | src/com/android/launcher3/DragView.java | 6 |
2 files changed, 45 insertions, 46 deletions
diff --git a/src/com/android/launcher3/DragDriver.java b/src/com/android/launcher3/DragDriver.java index 000033c2e..12545fbfe 100644 --- a/src/com/android/launcher3/DragDriver.java +++ b/src/com/android/launcher3/DragDriver.java @@ -46,11 +46,42 @@ public abstract class DragDriver { */ public abstract void onDragViewAnimationEnd(); - public abstract boolean onTouchEvent(MotionEvent ev); + public boolean onTouchEvent(MotionEvent ev) { + final int action = ev.getAction(); + + switch (action) { + case MotionEvent.ACTION_MOVE: + mEventListener.onDriverDragMove(ev.getX(), ev.getY()); + break; + case MotionEvent.ACTION_UP: + mEventListener.onDriverDragMove(ev.getX(), ev.getY()); + mEventListener.onDriverDragEnd(ev.getX(), ev.getY(), null); + break; + case MotionEvent.ACTION_CANCEL: + mEventListener.onDriverDragCancel(); + break; + } + + return true; + } public abstract boolean onDragEvent (DragEvent event); - public abstract boolean onInterceptTouchEvent(MotionEvent ev); + + public boolean onInterceptTouchEvent(MotionEvent ev) { + final int action = ev.getAction(); + + switch (action) { + case MotionEvent.ACTION_UP: + mEventListener.onDriverDragEnd(ev.getX(), ev.getY(), null); + break; + case MotionEvent.ACTION_CANCEL: + mEventListener.onDriverDragCancel(); + break; + } + + return true; + } public static DragDriver create( DragController dragController, ItemInfo dragInfo, DragView dragView) { @@ -71,7 +102,7 @@ class SystemDragDriver extends DragDriver { private final Intent mDragIntent; private final DragView mDragView; - boolean mDragging = false; + boolean mIsFrameworkDragActive = false; boolean mReceivedDropEvent = false; float mLastX = 0; float mLastY = 0; @@ -116,10 +147,10 @@ class SystemDragDriver extends DragDriver { final int flagOpaque = 1 << 9; final int flags = (mDragIntent != null ? flagGlobal : 0) | flagOpaque; - mDragging = true; + mIsFrameworkDragActive = true; if (!mDragView.startDrag(dragData, shadowBuilder, null, flags)) { - mDragging = false; + mIsFrameworkDragActive = false; mEventListener.onDriverDragCancel(); return; } @@ -131,17 +162,17 @@ class SystemDragDriver extends DragDriver { @Override public boolean onTouchEvent(MotionEvent ev) { - return false; + return !mIsFrameworkDragActive && super.onTouchEvent(ev); } @Override public boolean onInterceptTouchEvent(MotionEvent ev) { - return false; + return !mIsFrameworkDragActive && super.onInterceptTouchEvent(ev); } @Override public boolean onDragEvent (DragEvent event) { - if (!mDragging) { + if (!mIsFrameworkDragActive) { // We are interested only in drag events started by this driver. return false; } @@ -189,7 +220,7 @@ class SystemDragDriver extends DragDriver { new AnotherWindowDropTarget(mDragView.getContext()) : null; mEventListener.onDriverDragEnd(mLastX, mLastY, dropTargetOverride); - mDragging = false; + mIsFrameworkDragActive = false; return true; default: @@ -210,41 +241,5 @@ class InternalDragDriver extends DragDriver { public void onDragViewAnimationEnd() {} @Override - public boolean onTouchEvent(MotionEvent ev) { - final int action = ev.getAction(); - - switch (action) { - case MotionEvent.ACTION_MOVE: - mEventListener.onDriverDragMove(ev.getX(), ev.getY()); - break; - case MotionEvent.ACTION_UP: - mEventListener.onDriverDragMove(ev.getX(), ev.getY()); - mEventListener.onDriverDragEnd(ev.getX(), ev.getY(), null); - break; - case MotionEvent.ACTION_CANCEL: - mEventListener.onDriverDragCancel(); - break; - } - - return true; - } - - @Override - public boolean onInterceptTouchEvent(MotionEvent ev) { - final int action = ev.getAction(); - - switch (action) { - case MotionEvent.ACTION_UP: - mEventListener.onDriverDragEnd(ev.getX(), ev.getY(), null); - break; - case MotionEvent.ACTION_CANCEL: - mEventListener.onDriverDragCancel(); - break; - } - - return true; - } - - @Override public boolean onDragEvent (DragEvent event) { return false; } }; diff --git a/src/com/android/launcher3/DragView.java b/src/com/android/launcher3/DragView.java index 8b9fddbef..235cff006 100644 --- a/src/com/android/launcher3/DragView.java +++ b/src/com/android/launcher3/DragView.java @@ -55,6 +55,7 @@ public class DragView extends View { @Thunk final DragController mDragController; private boolean mHasDrawn = false; @Thunk float mCrossFadeProgress = 0f; + private boolean mAnimationCancelled = false; ValueAnimator mAnim; // The intrinsic icon scale factor is the scale factor for a drag icon over the workspace @@ -113,7 +114,9 @@ public class DragView extends View { mAnim.addListener(new AnimatorListenerAdapter() { @Override public void onAnimationEnd(Animator animation) { - mDragController.onDragViewAnimationEnd(); + if (!mAnimationCancelled) { + mDragController.onDragViewAnimationEnd(); + } } }); @@ -326,6 +329,7 @@ public class DragView extends View { } public void cancelAnimation() { + mAnimationCancelled = true; if (mAnim != null && mAnim.isRunning()) { mAnim.cancel(); } |