summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/com/android/launcher3/DragDriver.java85
-rw-r--r--src/com/android/launcher3/DragView.java6
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();
}