Merge change 3317 into donut

* changes:
  Fixes #1899273.
This commit is contained in:
Android (Google) Code Review
2009-06-05 11:27:52 -07:00
2 changed files with 14 additions and 24 deletions

View File

@@ -93,6 +93,7 @@ public class GestureOverlayView extends FrameLayout {
private float mTotalLength; private float mTotalLength;
private boolean mIsGesturing = false; private boolean mIsGesturing = false;
private boolean mPreviousWasGesturing = false;
private boolean mInterceptEvents = true; private boolean mInterceptEvents = true;
private boolean mIsListeningForGestures; private boolean mIsListeningForGestures;
@@ -425,6 +426,7 @@ public class GestureOverlayView extends FrameLayout {
clear(false); clear(false);
mIsGesturing = false; mIsGesturing = false;
mPreviousWasGesturing = false;
mStrokeBuffer.clear(); mStrokeBuffer.clear();
final ArrayList<OnGesturingListener> otherListeners = mOnGesturingListeners; final ArrayList<OnGesturingListener> otherListeners = mOnGesturingListeners;
@@ -442,8 +444,10 @@ public class GestureOverlayView extends FrameLayout {
@Override @Override
public boolean dispatchTouchEvent(MotionEvent event) { public boolean dispatchTouchEvent(MotionEvent event) {
if (isEnabled()) { if (isEnabled()) {
boolean cancelDispatch = (mIsGesturing || (mCurrentGesture != null && final boolean cancelDispatch = (mIsGesturing || (mCurrentGesture != null &&
mCurrentGesture.getStrokesCount() > 0)) && mInterceptEvents; mCurrentGesture.getStrokesCount() > 0 && mPreviousWasGesturing)) &&
mInterceptEvents;
processEvent(event); processEvent(event);
if (cancelDispatch) { if (cancelDispatch) {
@@ -451,6 +455,7 @@ public class GestureOverlayView extends FrameLayout {
} }
super.dispatchTouchEvent(event); super.dispatchTouchEvent(event);
return true; return true;
} }
@@ -647,6 +652,7 @@ public class GestureOverlayView extends FrameLayout {
} }
mStrokeBuffer.clear(); mStrokeBuffer.clear();
mPreviousWasGesturing = mIsGesturing;
mIsGesturing = false; mIsGesturing = false;
final ArrayList<OnGesturingListener> listeners = mOnGesturingListeners; final ArrayList<OnGesturingListener> listeners = mOnGesturingListeners;
@@ -688,6 +694,7 @@ public class GestureOverlayView extends FrameLayout {
fireOnGesturePerformed(); fireOnGesturePerformed();
} }
mPreviousWasGesturing = false;
mIsFadingOut = false; mIsFadingOut = false;
mFadingHasStarted = false; mFadingHasStarted = false;
mPath.rewind(); mPath.rewind();
@@ -707,6 +714,7 @@ public class GestureOverlayView extends FrameLayout {
mFadingHasStarted = false; mFadingHasStarted = false;
mPath.rewind(); mPath.rewind();
mCurrentGesture = null; mCurrentGesture = null;
mPreviousWasGesturing = false;
setPaintAlpha(255); setPaintAlpha(255);
} }

View File

@@ -472,7 +472,6 @@ public abstract class AbsListView extends AdapterView<ListAdapter> implements Te
private ViewTreeObserver.OnGlobalLayoutListener mGesturesLayoutListener; private ViewTreeObserver.OnGlobalLayoutListener mGesturesLayoutListener;
private boolean mGlobalLayoutListenerAddedGestures; private boolean mGlobalLayoutListenerAddedGestures;
private boolean mInstallGesturesOverlay; private boolean mInstallGesturesOverlay;
private boolean mPreviousGesturing;
private boolean mGlobalLayoutListenerAddedFilter; private boolean mGlobalLayoutListenerAddedFilter;
@@ -737,8 +736,6 @@ public abstract class AbsListView extends AdapterView<ListAdapter> implements Te
mGesturesOverlay.removeAllOnGestureListeners(); mGesturesOverlay.removeAllOnGestureListeners();
mGesturesOverlay.setGestureStrokeType(GestureOverlayView.GESTURE_STROKE_TYPE_MULTIPLE); mGesturesOverlay.setGestureStrokeType(GestureOverlayView.GESTURE_STROKE_TYPE_MULTIPLE);
mGesturesOverlay.addOnGesturePerformedListener(new GesturesProcessor()); mGesturesOverlay.addOnGesturePerformedListener(new GesturesProcessor());
mPreviousGesturing = false;
} }
} }
@@ -753,25 +750,10 @@ public abstract class AbsListView extends AdapterView<ListAdapter> implements Te
@Override @Override
public boolean dispatchTouchEvent(MotionEvent ev) { public boolean dispatchTouchEvent(MotionEvent ev) {
if (mGestures != GESTURES_NONE) { if (mGestures != GESTURES_NONE) {
if (ev.getAction() != MotionEvent.ACTION_DOWN || mFastScroller == null || if ((ev.getAction() != MotionEvent.ACTION_DOWN || mFastScroller == null ||
!mFastScroller.isPointInside(ev.getX(), ev.getY())) { !mFastScroller.isPointInside(ev.getX(), ev.getY())) &&
mGesturesPopup.isShowing()) {
if (mGesturesPopup.isShowing()) {
mGesturesOverlay.dispatchTouchEvent(ev); 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;
}
}
} }
} }