diff options
author | Romain Guy <romainguy@android.com> | 2009-06-05 11:24:09 -0700 |
---|---|---|
committer | Romain Guy <romainguy@android.com> | 2009-06-05 11:24:09 -0700 |
commit | 834f0391b50d33a832bd583fd7763a9a12208e8d (patch) | |
tree | f3d4a7f5d48002ad4828b0abbcbe3cc7dc431d5b /core/java | |
parent | ad8a510fcc3b853bd0dadcffb4433c465f2993b4 (diff) | |
download | frameworks_base-834f0391b50d33a832bd583fd7763a9a12208e8d.zip frameworks_base-834f0391b50d33a832bd583fd7763a9a12208e8d.tar.gz frameworks_base-834f0391b50d33a832bd583fd7763a9a12208e8d.tar.bz2 |
Fixes #1899273.
When a "ghost" stroke was showing, events would be intercepted in ListView. This patch modifies the logic used to detect when to still events: either the current stroke is a gesture, or the previous stroke was a gesture.
Diffstat (limited to 'core/java')
-rwxr-xr-x | core/java/android/gesture/GestureOverlayView.java | 12 | ||||
-rw-r--r-- | core/java/android/widget/AbsListView.java | 26 |
2 files changed, 14 insertions, 24 deletions
diff --git a/core/java/android/gesture/GestureOverlayView.java b/core/java/android/gesture/GestureOverlayView.java index 6f2c2a7..1251964 100755 --- a/core/java/android/gesture/GestureOverlayView.java +++ b/core/java/android/gesture/GestureOverlayView.java @@ -93,6 +93,7 @@ public class GestureOverlayView extends FrameLayout { private float mTotalLength; private boolean mIsGesturing = false; + private boolean mPreviousWasGesturing = false; private boolean mInterceptEvents = true; private boolean mIsListeningForGestures; @@ -425,6 +426,7 @@ public class GestureOverlayView extends FrameLayout { clear(false); mIsGesturing = false; + mPreviousWasGesturing = false; mStrokeBuffer.clear(); final ArrayList<OnGesturingListener> otherListeners = mOnGesturingListeners; @@ -442,8 +444,10 @@ public class GestureOverlayView extends FrameLayout { @Override public boolean dispatchTouchEvent(MotionEvent event) { if (isEnabled()) { - boolean cancelDispatch = (mIsGesturing || (mCurrentGesture != null && - mCurrentGesture.getStrokesCount() > 0)) && mInterceptEvents; + final boolean cancelDispatch = (mIsGesturing || (mCurrentGesture != null && + mCurrentGesture.getStrokesCount() > 0 && mPreviousWasGesturing)) && + mInterceptEvents; + processEvent(event); if (cancelDispatch) { @@ -451,6 +455,7 @@ public class GestureOverlayView extends FrameLayout { } super.dispatchTouchEvent(event); + return true; } @@ -647,6 +652,7 @@ public class GestureOverlayView extends FrameLayout { } mStrokeBuffer.clear(); + mPreviousWasGesturing = mIsGesturing; mIsGesturing = false; final ArrayList<OnGesturingListener> listeners = mOnGesturingListeners; @@ -688,6 +694,7 @@ public class GestureOverlayView extends FrameLayout { fireOnGesturePerformed(); } + mPreviousWasGesturing = false; mIsFadingOut = false; mFadingHasStarted = false; mPath.rewind(); @@ -707,6 +714,7 @@ public class GestureOverlayView extends FrameLayout { mFadingHasStarted = false; mPath.rewind(); mCurrentGesture = null; + mPreviousWasGesturing = false; setPaintAlpha(255); } diff --git a/core/java/android/widget/AbsListView.java b/core/java/android/widget/AbsListView.java index 14a85f8..f62487f 100644 --- a/core/java/android/widget/AbsListView.java +++ b/core/java/android/widget/AbsListView.java @@ -472,7 +472,6 @@ public abstract class AbsListView extends AdapterView<ListAdapter> implements Te private ViewTreeObserver.OnGlobalLayoutListener mGesturesLayoutListener; private boolean mGlobalLayoutListenerAddedGestures; private boolean mInstallGesturesOverlay; - private boolean mPreviousGesturing; private boolean mGlobalLayoutListenerAddedFilter; @@ -737,8 +736,6 @@ public abstract class AbsListView extends AdapterView<ListAdapter> implements Te mGesturesOverlay.removeAllOnGestureListeners(); mGesturesOverlay.setGestureStrokeType(GestureOverlayView.GESTURE_STROKE_TYPE_MULTIPLE); mGesturesOverlay.addOnGesturePerformedListener(new GesturesProcessor()); - - mPreviousGesturing = false; } } @@ -753,25 +750,10 @@ public abstract class AbsListView extends AdapterView<ListAdapter> implements Te @Override public boolean dispatchTouchEvent(MotionEvent ev) { if (mGestures != GESTURES_NONE) { - if (ev.getAction() != MotionEvent.ACTION_DOWN || mFastScroller == null || - !mFastScroller.isPointInside(ev.getX(), ev.getY())) { - - if (mGesturesPopup.isShowing()) { - mGesturesOverlay.dispatchTouchEvent(ev); - - final boolean isGesturing = mGesturesOverlay.isGesturing(); - - if (!isGesturing) { - mPreviousGesturing = isGesturing; - return super.dispatchTouchEvent(ev); - } else if (!mPreviousGesturing){ - mPreviousGesturing = isGesturing; - final MotionEvent event = MotionEvent.obtain(ev); - event.setAction(MotionEvent.ACTION_CANCEL); - super.dispatchTouchEvent(event); - return true; - } - } + if ((ev.getAction() != MotionEvent.ACTION_DOWN || mFastScroller == null || + !mFastScroller.isPointInside(ev.getX(), ev.getY())) && + mGesturesPopup.isShowing()) { + mGesturesOverlay.dispatchTouchEvent(ev); } } |