From 7d1fcbc409015a46219f088c6d5edbd8ab5012f8 Mon Sep 17 00:00:00 2001 From: Winson Chung Date: Tue, 4 Jan 2011 10:22:20 -0800 Subject: [PATCH] Cancelling the current drag when customization filter type changes to prevent crashes. Change-Id: Iaa3f2598325950769d38ad1d6e390ab06ea194d7 --- .../android/launcher2/CustomizePagedView.java | 1 + .../PagedViewWithDraggableItems.java | 39 +++++++++---------- 2 files changed, 19 insertions(+), 21 deletions(-) diff --git a/src/com/android/launcher2/CustomizePagedView.java b/src/com/android/launcher2/CustomizePagedView.java index ec9d52e4fc..d2edd38608 100644 --- a/src/com/android/launcher2/CustomizePagedView.java +++ b/src/com/android/launcher2/CustomizePagedView.java @@ -312,6 +312,7 @@ public class CustomizePagedView extends PagedViewWithDraggableItems public void setCustomizationFilter(CustomizationType filterType) { mCustomizationType = filterType; + cancelDragging(); if (getChildCount() > 0) { setCurrentPage(0); updateCurrentPageScroll(); diff --git a/src/com/android/launcher2/PagedViewWithDraggableItems.java b/src/com/android/launcher2/PagedViewWithDraggableItems.java index 283cceda3b..b1f199b4e2 100644 --- a/src/com/android/launcher2/PagedViewWithDraggableItems.java +++ b/src/com/android/launcher2/PagedViewWithDraggableItems.java @@ -54,13 +54,16 @@ public abstract class PagedViewWithDraggableItems extends PagedView return false; } - @Override - public boolean onInterceptTouchEvent(MotionEvent ev) { + protected void cancelDragging() { + mIsDragging = false; + mLastTouchedItem = null; + } + + private void handleTouchEvent(MotionEvent ev) { final int action = ev.getAction(); switch (action & MotionEvent.ACTION_MASK) { case MotionEvent.ACTION_DOWN: - mIsDragging = false; - mLastTouchedItem = null; + cancelDragging(); break; case MotionEvent.ACTION_MOVE: if (mTouchState != TOUCH_STATE_SCROLLING && !mIsDragging) { @@ -68,32 +71,26 @@ public abstract class PagedViewWithDraggableItems extends PagedView } break; } + } + + @Override + public boolean onInterceptTouchEvent(MotionEvent ev) { + handleTouchEvent(ev); return super.onInterceptTouchEvent(ev); } + @Override + public boolean onTouchEvent(MotionEvent ev) { + handleTouchEvent(ev); + return super.onTouchEvent(ev); + } + @Override public boolean onTouch(View v, MotionEvent event) { mLastTouchedItem = v; return false; } - @Override - public boolean onTouchEvent(MotionEvent ev) { - final int action = ev.getAction(); - switch (action & MotionEvent.ACTION_MASK) { - case MotionEvent.ACTION_DOWN: - mIsDragging = false; - mLastTouchedItem = null; - break; - case MotionEvent.ACTION_MOVE: - if (mTouchState != TOUCH_STATE_SCROLLING && !mIsDragging) { - determineDraggingStart(ev); - } - break; - } - return super.onTouchEvent(ev); - } - @Override public boolean onLongClick(View v) { // Return early if this is not initiated from a touch