summaryrefslogtreecommitdiffstats
path: root/core/java
diff options
context:
space:
mode:
authorRomain Guy <romainguy@android.com>2009-06-05 11:24:09 -0700
committerRomain Guy <romainguy@android.com>2009-06-05 11:24:09 -0700
commit834f0391b50d33a832bd583fd7763a9a12208e8d (patch)
treef3d4a7f5d48002ad4828b0abbcbe3cc7dc431d5b /core/java
parentad8a510fcc3b853bd0dadcffb4433c465f2993b4 (diff)
downloadframeworks_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-xcore/java/android/gesture/GestureOverlayView.java12
-rw-r--r--core/java/android/widget/AbsListView.java26
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);
}
}