Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(111)

Unified Diff: content/public/android/javatests/src/org/chromium/content/browser/ContentViewGestureHandlerTest.java

Issue 120513005: [Android] Perform eager gesture recognition on MotionEvents (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: More testing Created 6 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: content/public/android/javatests/src/org/chromium/content/browser/ContentViewGestureHandlerTest.java
diff --git a/content/public/android/javatests/src/org/chromium/content/browser/ContentViewGestureHandlerTest.java b/content/public/android/javatests/src/org/chromium/content/browser/ContentViewGestureHandlerTest.java
index e18171b0ac5478c611c03b299824dcb5a00c5982..0d9a1e3443b79277f2386b76aadbcc878d26f6ee 100644
--- a/content/public/android/javatests/src/org/chromium/content/browser/ContentViewGestureHandlerTest.java
+++ b/content/public/android/javatests/src/org/chromium/content/browser/ContentViewGestureHandlerTest.java
@@ -10,6 +10,7 @@ import android.os.SystemClock;
import android.test.InstrumentationTestCase;
import android.test.suitebuilder.annotation.SmallTest;
import android.util.Log;
+import android.view.InputDevice;
import android.view.MotionEvent;
import android.view.MotionEvent.PointerCoords;
import android.view.MotionEvent.PointerProperties;
@@ -18,7 +19,6 @@ import android.view.ViewConfiguration;
import org.chromium.base.test.util.Feature;
import org.chromium.base.test.util.ScalableTimeout;
import org.chromium.content.browser.ContentViewGestureHandler.MotionEventDelegate;
-import org.chromium.content.browser.third_party.GestureDetector;
import java.util.ArrayList;
import java.util.concurrent.CountDownLatch;
@@ -32,147 +32,80 @@ public class ContentViewGestureHandlerTest extends InstrumentationTestCase {
private static final int FAKE_COORD_Y = 24;
private static final String TAG = "ContentViewGestureHandler";
- private MockListener mMockListener;
private MockMotionEventDelegate mMockMotionEventDelegate;
- private MockGestureDetector mMockGestureDetector;
- private MockZoomManager mMockZoomManager;
private ContentViewGestureHandler mGestureHandler;
- private LongPressDetector mLongPressDetector;
-
- static class MockListener extends GestureDetector.SimpleOnGestureListener {
- MotionEvent mLastLongPress;
- MotionEvent mLastShowPress;
- MotionEvent mLastSingleTap;
- MotionEvent mLastFling1;
- CountDownLatch mLongPressCalled;
- CountDownLatch mShowPressCalled;
-
- public MockListener() {
- mLongPressCalled = new CountDownLatch(1);
- mShowPressCalled = new CountDownLatch(1);
- }
- @Override
- public void onLongPress(MotionEvent e) {
- mLastLongPress = MotionEvent.obtain(e);
- mLongPressCalled.countDown();
- }
-
- @Override
- public void onShowPress(MotionEvent e) {
- mLastShowPress = MotionEvent.obtain(e);
- mShowPressCalled.countDown();
- Log.e("Overscroll", "OnShowPress");
- }
-
- @Override
- public boolean onSingleTapConfirmed(MotionEvent e) {
- mLastSingleTap = e;
- return true;
- }
-
- @Override
- public boolean onSingleTapUp(MotionEvent e) {
- mLastSingleTap = e;
- return true;
- }
-
- @Override
- public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
- return true;
- }
+ static class MockMotionEventDelegate implements MotionEventDelegate {
+ static class GestureEvent {
+ public final int mType;
+ public final long mTimeMs;
+ public final int mX;
+ public final int mY;
+ public final Bundle mExtraParams;
- @Override
- public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
- mLastFling1 = e1;
- return true;
- }
- }
+ public GestureEvent(int type, long timeMs, int x, int y, Bundle extraParams) {
+ mType = type;
+ mTimeMs = timeMs;
+ mX = x;
+ mY = y;
+ mExtraParams = extraParams;
+ }
- static class MockGestureDetector extends GestureDetector {
- MotionEvent mLastEvent;
- public MockGestureDetector(Context context, OnGestureListener listener) {
- super(context, listener);
- }
+ public int getType() {
+ return mType;
+ }
- @Override
- public boolean onTouchEvent(MotionEvent ev) {
- mLastEvent = MotionEvent.obtain(ev);
- return super.onTouchEvent(ev);
- }
- }
+ public long getTimeMs() {
+ return mTimeMs;
+ }
- static class MockMotionEventDelegate implements MotionEventDelegate {
- private ContentViewGestureHandler mSynchronousConfirmTarget;
- private int mSynchronousConfirmAckResult;
+ public int getX() {
+ return mX;
+ }
- public int mLastTouchAction;
- public int mLastGestureType;
- public int mTotalSentGestureCount;
+ public int getY() {
+ return mY;
+ }
- @Override
- public boolean sendTouchEvent(long timeMs, int action, TouchPoint[] pts) {
- mLastTouchAction = action;
- if (mSynchronousConfirmTarget != null) {
- mSynchronousConfirmTarget.confirmTouchEvent(mSynchronousConfirmAckResult);
+ public Bundle getExtraParams() {
+ return mExtraParams;
}
- return true;
}
+ GestureEvent mMostRecentGestureEvent;
+ GestureEvent mActiveScrollStartEvent;
+ final ArrayList<Integer> mGestureTypeList = new ArrayList<Integer>();
+ final ArrayList<Long> mGestureTimeList = new ArrayList<Long>();
- @Override
- public boolean sendGesture(int type, long timeMs, int x, int y, Bundle extraParams) {
- Log.i(TAG,"Gesture event received with type id " + type);
- mLastGestureType = type;
- mTotalSentGestureCount++;
- return true;
- }
+ final CountDownLatch mLongPressCalled = new CountDownLatch(1);
+ final CountDownLatch mShowPressCalled = new CountDownLatch(1);
@Override
- public void sendSingleTapUMA(int type) {
- // Not implemented.
+ public void onTouchEventHandlingBegin(long timeMs, int action, TouchPoint[] pts) {
}
@Override
- public void sendActionAfterDoubleTapUMA(int type,
- boolean clickDelayEnabled) {
- // Not implemented.
+ public void onTouchEventHandlingEnd() {
}
@Override
- public void invokeZoomPicker() {
- // Not implemented.
- }
-
- public void enableSynchronousConfirmTouchEvent(
- ContentViewGestureHandler handler, int ackResult) {
- mSynchronousConfirmTarget = handler;
- mSynchronousConfirmAckResult = ackResult;
- }
-
- public void disableSynchronousConfirmTouchEvent() {
- mSynchronousConfirmTarget = null;
- }
- }
-
- static class MockZoomManager extends ZoomManager {
- private ContentViewGestureHandler mHandlerForMoveEvents;
-
- MockZoomManager(Context context, ContentViewCore contentViewCore) {
- super(context, contentViewCore);
- }
-
- public void pinchOnMoveEvents(ContentViewGestureHandler handler) {
- mHandlerForMoveEvents = handler;
- }
-
- @Override
- public boolean processTouchEvent(MotionEvent event) {
- if (event.getActionMasked() == MotionEvent.ACTION_MOVE
- && mHandlerForMoveEvents != null) {
- mHandlerForMoveEvents.pinchBy(event.getEventTime(), 1, 1, 1.1f);
- return true;
+ public boolean onGestureEventCreated(
+ int type, long timeMs, int x, int y, Bundle extraParams) {
+ Log.i(TAG, "Gesture event received with type id " + type);
+ mMostRecentGestureEvent = new GestureEvent(type, timeMs, x, y, extraParams);
+ mGestureTypeList.add(mMostRecentGestureEvent.mType);
+ mGestureTimeList.add(timeMs);
+ if (type == ContentViewGestureHandler.GESTURE_SCROLL_START) {
+ mActiveScrollStartEvent = mMostRecentGestureEvent;
+ } else if (type == ContentViewGestureHandler.GESTURE_SCROLL_END
+ || type == ContentViewGestureHandler.GESTURE_FLING_CANCEL) {
+ mActiveScrollStartEvent = null;
+ } else if (type == ContentViewGestureHandler.GESTURE_LONG_PRESS) {
+ mLongPressCalled.countDown();
+ } else if (type == ContentViewGestureHandler.GESTURE_SHOW_PRESS) {
+ mShowPressCalled.countDown();
}
- return false;
+
+ return true;
}
}
@@ -182,18 +115,10 @@ public class ContentViewGestureHandlerTest extends InstrumentationTestCase {
@Override
public void setUp() {
- mMockListener = new MockListener();
- mMockGestureDetector = new MockGestureDetector(
- getInstrumentation().getTargetContext(), mMockListener);
mMockMotionEventDelegate = new MockMotionEventDelegate();
- mMockZoomManager = new MockZoomManager(getInstrumentation().getTargetContext(), null);
mGestureHandler = new ContentViewGestureHandler(
- getInstrumentation().getTargetContext(), mMockMotionEventDelegate,
- mMockZoomManager);
- mLongPressDetector = new LongPressDetector(
- getInstrumentation().getTargetContext(), mGestureHandler);
- mGestureHandler.setTestDependencies(
- mLongPressDetector, mMockGestureDetector, mMockListener);
+ getInstrumentation().getTargetContext(), mMockMotionEventDelegate);
+ mGestureHandler.updateMultiTouchSupport(false);
TouchPoint.initializeConstantsForTesting();
}
@@ -208,302 +133,17 @@ public class ContentViewGestureHandlerTest extends InstrumentationTestCase {
final long downTime = SystemClock.uptimeMillis();
final long eventTime = SystemClock.uptimeMillis();
- MotionEvent event = motionEvent(MotionEvent.ACTION_DOWN, downTime, downTime);
-
- assertFalse(mGestureHandler.onTouchEvent(event));
- assertTrue("Should have a pending gesture", mMockGestureDetector.mLastEvent != null);
- assertTrue("Should have a pending LONG_PRESS", mLongPressDetector.hasPendingMessage());
-
- event = motionEvent(MotionEvent.ACTION_UP, downTime, eventTime + 10);
- mLongPressDetector.cancelLongPressIfNeeded(event);
- assertTrue("Should not have a pending LONG_PRESS", !mLongPressDetector.hasPendingMessage());
- assertTrue(mGestureHandler.onTouchEvent(event));
- // Synchronous, no need to wait.
- assertTrue("Should have a single tap", mMockListener.mLastSingleTap != null);
- }
-
- /**
- * Verify that when a touch event handler is registered the touch events are queued
- * and sent in order.
- * @throws Exception
- */
- @SmallTest
- @Feature({"Gestures"})
- public void testFlingOnTouchHandler() throws Exception {
- final long downTime = SystemClock.uptimeMillis();
- final long eventTime = SystemClock.uptimeMillis();
-
- MotionEvent event = motionEvent(MotionEvent.ACTION_DOWN, downTime, downTime);
-
- mGestureHandler.hasTouchEventHandlers(true);
-
- assertTrue(mGestureHandler.onTouchEvent(event));
- assertEquals(1, mGestureHandler.getNumberOfPendingMotionEventsForTesting());
- assertTrue("Should not have a pending gesture", mMockGestureDetector.mLastEvent == null);
- assertFalse("Should not have a pending LONG_PRESS", mLongPressDetector.hasPendingMessage());
-
- event = MotionEvent.obtain(
- downTime, eventTime + 5, MotionEvent.ACTION_MOVE,
- FAKE_COORD_X * 5, FAKE_COORD_Y * 5, 0);
- assertTrue(mGestureHandler.onTouchEvent(event));
- assertEquals(2, mGestureHandler.getNumberOfPendingMotionEventsForTesting());
-
- event = MotionEvent.obtain(
- downTime, eventTime + 10, MotionEvent.ACTION_MOVE,
- FAKE_COORD_X * 10, FAKE_COORD_Y * 10, 0);
- assertTrue(mGestureHandler.onTouchEvent(event));
- assertEquals("We should have coalesced move events into one"
- , 2, mGestureHandler.getNumberOfPendingMotionEventsForTesting());
-
- event = MotionEvent.obtain(
- downTime, eventTime + 15, MotionEvent.ACTION_UP,
- FAKE_COORD_X * 10, FAKE_COORD_Y * 10, 0);
- assertTrue(mGestureHandler.onTouchEvent(event));
- assertEquals(3, mGestureHandler.getNumberOfPendingMotionEventsForTesting());
-
- mGestureHandler.confirmTouchEvent(
- ContentViewGestureHandler.INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
- assertEquals(2, mGestureHandler.getNumberOfPendingMotionEventsForTesting());
- assertEquals(MotionEvent.ACTION_MOVE,
- mGestureHandler.peekFirstInPendingMotionEventsForTesting().getActionMasked());
- assertFalse("Pending LONG_PRESS should have been canceled",
- mLongPressDetector.hasPendingMessage());
-
- mGestureHandler.confirmTouchEvent(ContentViewGestureHandler.INPUT_EVENT_ACK_STATE_CONSUMED);
- assertEquals(1, mGestureHandler.getNumberOfPendingMotionEventsForTesting());
- assertEquals(MotionEvent.ACTION_UP,
- mGestureHandler.peekFirstInPendingMotionEventsForTesting().getActionMasked());
-
- mGestureHandler.confirmTouchEvent(ContentViewGestureHandler.INPUT_EVENT_ACK_STATE_CONSUMED);
- assertEquals(0, mGestureHandler.getNumberOfPendingMotionEventsForTesting());
-
- // Synchronous, no need to wait.
- assertTrue("Should not have a fling", mMockListener.mLastFling1 == null);
- assertTrue("Should not have a long press", mMockListener.mLastLongPress == null);
- }
-
- /**
- * Verify that after a touch event handlers starts handling a gesture, even though some event
- * in the middle of the gesture returns with NOT_CONSUMED, we don't send that to the gesture
- * detector to avoid falling to a faulty state.
- * @throws Exception
- */
- @SmallTest
- @Feature({"Gestures"})
- public void testFlingOnTouchHandlerWithOneEventNotConsumed() throws Exception {
- final long downTime = SystemClock.uptimeMillis();
- final long eventTime = SystemClock.uptimeMillis();
-
- MotionEvent event = motionEvent(MotionEvent.ACTION_DOWN, downTime, downTime);
-
- mGestureHandler.hasTouchEventHandlers(true);
-
- assertTrue(mGestureHandler.onTouchEvent(event));
- assertEquals(1, mGestureHandler.getNumberOfPendingMotionEventsForTesting());
- assertTrue("Should not have a pending gesture", mMockGestureDetector.mLastEvent == null);
- assertFalse("Should not have a pending LONG_PRESS", mLongPressDetector.hasPendingMessage());
-
- event = MotionEvent.obtain(
- downTime, eventTime + 5, MotionEvent.ACTION_MOVE,
- FAKE_COORD_X * 5, FAKE_COORD_Y * 5, 0);
- assertTrue(mGestureHandler.onTouchEvent(event));
- assertEquals(2, mGestureHandler.getNumberOfPendingMotionEventsForTesting());
-
- event = MotionEvent.obtain(
- downTime, eventTime + 10, MotionEvent.ACTION_MOVE,
- FAKE_COORD_X * 10, FAKE_COORD_Y * 10, 0);
- assertTrue(mGestureHandler.onTouchEvent(event));
- assertEquals("We should have coalesced move events into one"
- , 2, mGestureHandler.getNumberOfPendingMotionEventsForTesting());
-
- event = MotionEvent.obtain(
- downTime, eventTime + 15, MotionEvent.ACTION_UP,
- FAKE_COORD_X * 10, FAKE_COORD_Y * 10, 0);
- assertTrue(mGestureHandler.onTouchEvent(event));
- assertEquals(3, mGestureHandler.getNumberOfPendingMotionEventsForTesting());
-
- mGestureHandler.confirmTouchEvent(
- ContentViewGestureHandler.INPUT_EVENT_ACK_STATE_CONSUMED);
- assertEquals(2, mGestureHandler.getNumberOfPendingMotionEventsForTesting());
- assertEquals(MotionEvent.ACTION_MOVE,
- mGestureHandler.peekFirstInPendingMotionEventsForTesting().getActionMasked());
-
- mGestureHandler.confirmTouchEvent(
- ContentViewGestureHandler.INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
- assertEquals(1, mGestureHandler.getNumberOfPendingMotionEventsForTesting());
- assertEquals(MotionEvent.ACTION_UP,
- mGestureHandler.peekFirstInPendingMotionEventsForTesting().getActionMasked());
- assertTrue("Even though the last event was not consumed by JavaScript," +
- "it shouldn't have been sent to the Gesture Detector",
- mMockGestureDetector.mLastEvent == null);
-
- mGestureHandler.confirmTouchEvent(ContentViewGestureHandler.INPUT_EVENT_ACK_STATE_CONSUMED);
- assertEquals(0, mGestureHandler.getNumberOfPendingMotionEventsForTesting());
-
- // Synchronous, no need to wait.
- assertTrue("Should not have a fling", mMockListener.mLastFling1 == null);
- assertTrue("Should not have a long press", mMockListener.mLastLongPress == null);
- }
-
- /**
- * Verify that when a registered touch event handler return NO_CONSUMER_EXISTS for down event
- * all queue is drained until next down.
- * @throws Exception
- */
- @SmallTest
- @Feature({"Gestures"})
- public void testDrainWithFlingAndClickOutofTouchHandler() throws Exception {
- final long downTime = SystemClock.uptimeMillis();
- final long eventTime = SystemClock.uptimeMillis();
-
- mGestureHandler = new ContentViewGestureHandler(
- getInstrumentation().getTargetContext(), new MockMotionEventDelegate(),
- mMockZoomManager);
- mLongPressDetector = new LongPressDetector(
- getInstrumentation().getTargetContext(), mGestureHandler);
-
- mGestureHandler.hasTouchEventHandlers(true);
-
- MotionEvent event = motionEvent(MotionEvent.ACTION_DOWN, downTime, downTime);
- assertTrue(mGestureHandler.onTouchEvent(event));
- assertEquals(1, mGestureHandler.getNumberOfPendingMotionEventsForTesting());
- assertFalse("Should not have a pending LONG_PRESS", mLongPressDetector.hasPendingMessage());
-
- event = MotionEvent.obtain(
- downTime, eventTime + 5, MotionEvent.ACTION_MOVE,
- FAKE_COORD_X * 5, FAKE_COORD_Y * 5, 0);
- assertTrue(mGestureHandler.onTouchEvent(event));
- assertEquals(2, mGestureHandler.getNumberOfPendingMotionEventsForTesting());
-
- event = MotionEvent.obtain(
- downTime, eventTime + 10, MotionEvent.ACTION_MOVE,
- FAKE_COORD_X * 10, FAKE_COORD_Y * 10, 0);
- assertTrue(mGestureHandler.onTouchEvent(event));
- assertEquals(2, mGestureHandler.getNumberOfPendingMotionEventsForTesting());
-
- event = MotionEvent.obtain(
- downTime, eventTime + 15, MotionEvent.ACTION_UP,
- FAKE_COORD_X * 10, FAKE_COORD_Y * 10, 0);
- assertTrue(mGestureHandler.onTouchEvent(event));
- assertEquals(3, mGestureHandler.getNumberOfPendingMotionEventsForTesting());
-
- event = motionEvent(MotionEvent.ACTION_DOWN, eventTime + 20, eventTime + 20);
- assertTrue(mGestureHandler.onTouchEvent(event));
- assertEquals(4, mGestureHandler.getNumberOfPendingMotionEventsForTesting());
-
- event = MotionEvent.obtain(
- downTime, eventTime + 20, MotionEvent.ACTION_UP,
- FAKE_COORD_X, FAKE_COORD_Y, 0);
- assertTrue(mGestureHandler.onTouchEvent(event));
- assertEquals(5, mGestureHandler.getNumberOfPendingMotionEventsForTesting());
-
- mGestureHandler.confirmTouchEvent(
- ContentViewGestureHandler.INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS);
- assertEquals("The queue should have been drained until first down since no consumer exists",
- 2, mGestureHandler.getNumberOfPendingMotionEventsForTesting());
- assertEquals(MotionEvent.ACTION_DOWN,
- mGestureHandler.peekFirstInPendingMotionEventsForTesting().getActionMasked());
-
- mGestureHandler.confirmTouchEvent(
- ContentViewGestureHandler.INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS);
- assertEquals("The queue should have been drained",
- 0, mGestureHandler.getNumberOfPendingMotionEventsForTesting());
- }
-
- /**
- * Verify that when a touch event handler is registered the touch events stop getting queued
- * after we received INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS.
- * @throws Exception
- */
- @SmallTest
- @Feature({"Gestures"})
- public void testFlingOutOfTouchHandler() throws Exception {
- final long downTime = SystemClock.uptimeMillis();
- final long eventTime = SystemClock.uptimeMillis();
-
- MotionEvent event = motionEvent(MotionEvent.ACTION_DOWN, downTime, downTime);
-
- mGestureHandler.hasTouchEventHandlers(true);
-
- assertTrue(mGestureHandler.onTouchEvent(event));
- assertEquals(1, mGestureHandler.getNumberOfPendingMotionEventsForTesting());
- assertTrue("Should not have a pending gesture", mMockGestureDetector.mLastEvent == null);
- assertFalse("Should not have a pending LONG_PRESS", mLongPressDetector.hasPendingMessage());
-
- mGestureHandler.confirmTouchEvent(
- ContentViewGestureHandler.INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS);
- assertEquals(0, mGestureHandler.getNumberOfPendingMotionEventsForTesting());
- assertEquals("The down touch event should have been sent to the Gesture Detector",
- event.getEventTime(), mMockGestureDetector.mLastEvent.getEventTime());
- assertEquals("The down touch event should have been sent to the Gesture Detector",
- MotionEvent.ACTION_DOWN, mMockGestureDetector.mLastEvent.getActionMasked());
-
- event = MotionEvent.obtain(
- downTime, eventTime + 5, MotionEvent.ACTION_MOVE,
- FAKE_COORD_X * 5, FAKE_COORD_Y * 5, 0);
- assertTrue(mGestureHandler.onTouchEvent(event));
- assertEquals(0, mGestureHandler.getNumberOfPendingMotionEventsForTesting());
- assertEquals("Motion events should be going to the Gesture Detector directly",
- event.getEventTime(), mMockGestureDetector.mLastEvent.getEventTime());
- assertEquals("Motion events should be going to the Gesture Detector directly",
- MotionEvent.ACTION_MOVE, mMockGestureDetector.mLastEvent.getActionMasked());
-
- event = MotionEvent.obtain(
- downTime, eventTime + 10, MotionEvent.ACTION_UP,
- FAKE_COORD_X * 5, FAKE_COORD_Y * 5, 0);
- assertTrue(mGestureHandler.onTouchEvent(event));
- assertEquals(0, mGestureHandler.getNumberOfPendingMotionEventsForTesting());
- assertEquals("Motion events should be going to the Gesture Detector directly",
- event.getEventTime(), mMockGestureDetector.mLastEvent.getEventTime());
- assertEquals("Motion events should be going to the Gesture Detector directly",
- MotionEvent.ACTION_UP, mMockGestureDetector.mLastEvent.getActionMasked());
-
- // Synchronous, no need to wait.
- assertTrue("Should have a fling", mMockListener.mLastFling1 != null);
- assertTrue("Should not have a long press", mMockListener.mLastLongPress == null);
- }
-
- /**
- * Verifies that a single tap doesn't cause a long press event to be sent.
- * @throws Exception
- */
- @SmallTest
- @Feature({"Gestures"})
- public void testNoLongPressIsSentForSingleTapOutOfTouchHandler() throws Exception {
- final long downTime = SystemClock.uptimeMillis();
- final long eventTime = SystemClock.uptimeMillis();
+ mGestureHandler.updateDoubleTapSupport(false);
MotionEvent event = motionEvent(MotionEvent.ACTION_DOWN, downTime, downTime);
-
- mGestureHandler.hasTouchEventHandlers(true);
-
assertTrue(mGestureHandler.onTouchEvent(event));
- assertEquals(1, mGestureHandler.getNumberOfPendingMotionEventsForTesting());
- assertTrue("Should not have a pending gesture", mMockGestureDetector.mLastEvent == null);
- assertFalse("Should not have a pending LONG_PRESS", mLongPressDetector.hasPendingMessage());
+ assertEquals(ContentViewGestureHandler.GESTURE_TAP_DOWN,
+ mMockMotionEventDelegate.mMostRecentGestureEvent.mType);
- event = motionEvent(MotionEvent.ACTION_UP, downTime, eventTime + 5);
+ event = motionEvent(MotionEvent.ACTION_UP, downTime, eventTime + 10);
assertTrue(mGestureHandler.onTouchEvent(event));
- assertEquals(2, mGestureHandler.getNumberOfPendingMotionEventsForTesting());
-
- mGestureHandler.confirmTouchEvent(
- ContentViewGestureHandler.INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
-
- assertEquals(1, mGestureHandler.getNumberOfPendingMotionEventsForTesting());
- assertEquals("The down touch event should have been sent to the Gesture Detector",
- event.getDownTime(), mMockGestureDetector.mLastEvent.getEventTime());
- assertEquals("The next event should be ACTION_UP",
- MotionEvent.ACTION_UP,
- mGestureHandler.peekFirstInPendingMotionEventsForTesting().getActionMasked());
-
- mGestureHandler.confirmTouchEvent(
- ContentViewGestureHandler.INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
-
- assertEquals(0, mGestureHandler.getNumberOfPendingMotionEventsForTesting());
- assertEquals("The up touch event should have been sent to the Gesture Detector",
- event.getEventTime(), mMockGestureDetector.mLastEvent.getEventTime());
-
- assertFalse("Should not have a pending LONG_PRESS", mLongPressDetector.hasPendingMessage());
+ assertEquals(ContentViewGestureHandler.GESTURE_SINGLE_TAP_CONFIRMED,
+ mMockMotionEventDelegate.mMostRecentGestureEvent.mType);
}
/**
@@ -518,25 +158,23 @@ public class ContentViewGestureHandlerTest extends InstrumentationTestCase {
MotionEvent event = motionEvent(MotionEvent.ACTION_DOWN, downTime, downTime);
- assertFalse(mGestureHandler.onTouchEvent(event));
- assertTrue("Should have a pending gesture", mMockGestureDetector.mLastEvent != null);
- assertTrue("Should have a pending LONG_PRESS", mLongPressDetector.hasPendingMessage());
+ assertTrue(mGestureHandler.onTouchEvent(event));
+ assertEquals(ContentViewGestureHandler.GESTURE_TAP_DOWN,
+ mMockMotionEventDelegate.mMostRecentGestureEvent.mType);
event = MotionEvent.obtain(
downTime, eventTime + 5, MotionEvent.ACTION_MOVE,
FAKE_COORD_X * 10, FAKE_COORD_Y * 10, 0);
- mLongPressDetector.cancelLongPressIfNeeded(event);
- assertTrue("Should not have a pending LONG_PRESS", !mLongPressDetector.hasPendingMessage());
assertTrue(mGestureHandler.onTouchEvent(event));
event = MotionEvent.obtain(
downTime, eventTime + 10, MotionEvent.ACTION_UP,
FAKE_COORD_X * 10, FAKE_COORD_Y * 10, 0);
assertTrue(mGestureHandler.onTouchEvent(event));
-
- // Synchronous, no need to wait.
- assertTrue("Should have a fling", mMockListener.mLastFling1 != null);
- assertTrue("Should not have a long press", mMockListener.mLastLongPress == null);
+ assertEquals(ContentViewGestureHandler.GESTURE_FLING_START,
+ mMockMotionEventDelegate.mMostRecentGestureEvent.mType);
+ assertFalse(mMockMotionEventDelegate.mGestureTypeList.contains(
+ ContentViewGestureHandler.GESTURE_LONG_PRESS));
}
/**
@@ -571,11 +209,6 @@ public class ContentViewGestureHandlerTest extends InstrumentationTestCase {
final int scrollToX = FAKE_COORD_X + 100;
final int scrollToY = FAKE_COORD_Y + 100;
- GestureRecordingMotionEventDelegate mockDelegate =
- new GestureRecordingMotionEventDelegate();
- mGestureHandler = new ContentViewGestureHandler(
- getInstrumentation().getTargetContext(), mockDelegate, mMockZoomManager);
-
MotionEvent event = motionEvent(MotionEvent.ACTION_DOWN, downTime, downTime);
assertTrue(mGestureHandler.onTouchEvent(event));
@@ -585,31 +218,31 @@ public class ContentViewGestureHandlerTest extends InstrumentationTestCase {
assertTrue(mGestureHandler.onTouchEvent(event));
assertTrue(mGestureHandler.isNativeScrolling());
assertTrue("A scrollStart event should have been sent",
- mockDelegate.mGestureTypeList.contains(
+ mMockMotionEventDelegate.mGestureTypeList.contains(
ContentViewGestureHandler.GESTURE_SCROLL_START));
assertEquals("We should have started scrolling",
ContentViewGestureHandler.GESTURE_SCROLL_BY,
- mockDelegate.mMostRecentGestureEvent.mType);
+ mMockMotionEventDelegate.mMostRecentGestureEvent.mType);
assertEquals("Only tapDown, tapCancel, scrollBegin and scrollBy should have been sent",
- 4, mockDelegate.mGestureTypeList.size());
+ 4, mMockMotionEventDelegate.mGestureTypeList.size());
assertEquals("scrollBegin should be sent before scrollBy",
ContentViewGestureHandler.GESTURE_SCROLL_START,
- (int) mockDelegate.mGestureTypeList.get(2));
+ (int) mMockMotionEventDelegate.mGestureTypeList.get(2));
assertEquals("scrollBegin should have the time of the ACTION_MOVE",
- eventTime + 1000, (long) mockDelegate.mGestureTimeList.get(2));
+ eventTime + 1000, (long) mMockMotionEventDelegate.mGestureTimeList.get(2));
event = MotionEvent.obtain(
downTime, eventTime + 1000, endActionType, scrollToX, scrollToY, 0);
mGestureHandler.onTouchEvent(event);
assertFalse(mGestureHandler.isNativeScrolling());
assertTrue("A scrollEnd event should have been sent",
- mockDelegate.mGestureTypeList.contains(
+ mMockMotionEventDelegate.mGestureTypeList.contains(
ContentViewGestureHandler.GESTURE_SCROLL_END));
assertEquals("We should have stopped scrolling",
ContentViewGestureHandler.GESTURE_SCROLL_END,
- mockDelegate.mMostRecentGestureEvent.mType);
+ mMockMotionEventDelegate.mMostRecentGestureEvent.mType);
assertEquals("Only tapDown, scrollBegin and scrollBy and scrollEnd should have been sent",
- 5, mockDelegate.mGestureTypeList.size());
+ 5, mMockMotionEventDelegate.mGestureTypeList.size());
}
/**
@@ -625,11 +258,6 @@ public class ContentViewGestureHandlerTest extends InstrumentationTestCase {
final long downTime = SystemClock.uptimeMillis();
final long eventTime = SystemClock.uptimeMillis();
- GestureRecordingMotionEventDelegate mockDelegate =
- new GestureRecordingMotionEventDelegate();
- mGestureHandler = new ContentViewGestureHandler(
- getInstrumentation().getTargetContext(), mockDelegate, mMockZoomManager);
-
MotionEvent event = motionEvent(MotionEvent.ACTION_DOWN, downTime, downTime);
assertTrue(mGestureHandler.onTouchEvent(event));
@@ -640,18 +268,18 @@ public class ContentViewGestureHandlerTest extends InstrumentationTestCase {
assertTrue(mGestureHandler.onTouchEvent(event));
assertTrue(mGestureHandler.isNativeScrolling());
assertTrue("A scrollStart event should have been sent",
- mockDelegate.mGestureTypeList.contains(
+ mMockMotionEventDelegate.mGestureTypeList.contains(
ContentViewGestureHandler.GESTURE_SCROLL_START));
assertEquals("We should have started scrolling",
ContentViewGestureHandler.GESTURE_SCROLL_BY,
- mockDelegate.mMostRecentGestureEvent.mType);
+ mMockMotionEventDelegate.mMostRecentGestureEvent.mType);
assertEquals("Only tapDown, tapCancel, scrollBegin and scrollBy should have been sent",
- 4, mockDelegate.mGestureTypeList.size());
+ 4, mMockMotionEventDelegate.mGestureTypeList.size());
assertEquals("scrollBegin should be sent before scrollBy",
ContentViewGestureHandler.GESTURE_SCROLL_START,
- (int) mockDelegate.mGestureTypeList.get(2));
- GestureRecordingMotionEventDelegate.GestureEvent startEvent =
- mockDelegate.getActiveScrollStartEvent();
+ (int) mMockMotionEventDelegate.mGestureTypeList.get(2));
+ MockMotionEventDelegate.GestureEvent startEvent =
+ mMockMotionEventDelegate.mActiveScrollStartEvent;
assertNotNull(startEvent);
assertEquals("scrollBegin should have the time of the ACTION_MOVE",
eventTime + 10, (long) startEvent.getTimeMs());
@@ -669,22 +297,14 @@ public class ContentViewGestureHandlerTest extends InstrumentationTestCase {
assertFalse(mGestureHandler.isNativeScrolling());
assertEquals("We should have started flinging",
ContentViewGestureHandler.GESTURE_FLING_START,
- mockDelegate.mMostRecentGestureEvent.mType);
+ mMockMotionEventDelegate.mMostRecentGestureEvent.mType);
assertTrue("A scroll end event should not have been sent",
- !mockDelegate.mGestureTypeList.contains(
+ !mMockMotionEventDelegate.mGestureTypeList.contains(
ContentViewGestureHandler.GESTURE_SCROLL_END));
assertEquals("The last up should have caused flingStart to be sent",
- 5, mockDelegate.mGestureTypeList.size());
+ 5, mMockMotionEventDelegate.mGestureTypeList.size());
assertEquals("flingStart should have the time of the ACTION_UP",
- eventTime + 15, (long) mockDelegate.mGestureTimeList.get(4));
-
- event = motionEvent(MotionEvent.ACTION_DOWN, downTime + 50, downTime + 50);
- assertTrue(mGestureHandler.onTouchEvent(event));
- assertTrue("A flingCancel should have been sent",
- mockDelegate.mGestureTypeList.contains(
- ContentViewGestureHandler.GESTURE_FLING_CANCEL));
- assertEquals("Only tapDown and flingCancel should have been sent",
- 7, mockDelegate.mGestureTypeList.size());
+ eventTime + 15, (long) mMockMotionEventDelegate.mGestureTimeList.get(4));
}
/**
@@ -698,24 +318,14 @@ public class ContentViewGestureHandlerTest extends InstrumentationTestCase {
final long downTime = SystemClock.uptimeMillis();
final long eventTime = SystemClock.uptimeMillis();
- GestureRecordingMotionEventDelegate mockDelegate =
- new GestureRecordingMotionEventDelegate();
- mGestureHandler = new ContentViewGestureHandler(
- getInstrumentation().getTargetContext(), mockDelegate, mMockZoomManager);
-
mGestureHandler.fling(eventTime, 5, 5, 0, 0);
- assertEquals("A zero-velocity fling should not be forwrded",
- null, mockDelegate.mMostRecentGestureEvent);
+ assertEquals("A zero-velocity fling should not be forwarded",
+ null, mMockMotionEventDelegate.mMostRecentGestureEvent);
mGestureHandler.fling(eventTime, 5, 5, 5, 0);
assertEquals("Subsequent flings should work properly",
ContentViewGestureHandler.GESTURE_FLING_START,
- mockDelegate.mMostRecentGestureEvent.mType);
-
- mGestureHandler.fling(eventTime, 5, 5, 0, 0);
- assertEquals("A zero-velocity fling should cancel any outstanding fling",
- ContentViewGestureHandler.GESTURE_FLING_CANCEL,
- mockDelegate.mMostRecentGestureEvent.mType);
+ mMockMotionEventDelegate.mMostRecentGestureEvent.mType);
MotionEvent event = motionEvent(MotionEvent.ACTION_DOWN, downTime, downTime);
assertTrue(mGestureHandler.onTouchEvent(event));
@@ -725,16 +335,16 @@ public class ContentViewGestureHandlerTest extends InstrumentationTestCase {
assertTrue(mGestureHandler.onTouchEvent(event));
assertTrue(mGestureHandler.isNativeScrolling());
assertTrue("A scrollStart event should have been sent",
- mockDelegate.mGestureTypeList.contains(
+ mMockMotionEventDelegate.mGestureTypeList.contains(
ContentViewGestureHandler.GESTURE_SCROLL_START));
assertEquals("We should have started scrolling",
ContentViewGestureHandler.GESTURE_SCROLL_BY,
- mockDelegate.mMostRecentGestureEvent.mType);
+ mMockMotionEventDelegate.mMostRecentGestureEvent.mType);
mGestureHandler.fling(eventTime, 5, 5, 0, 0);
assertEquals("A zero-velicty fling should end the current scroll sequence",
ContentViewGestureHandler.GESTURE_SCROLL_END,
- mockDelegate.mMostRecentGestureEvent.mType);
+ mMockMotionEventDelegate.mMostRecentGestureEvent.mType);
}
/**
@@ -746,41 +356,42 @@ public class ContentViewGestureHandlerTest extends InstrumentationTestCase {
@Feature({"Gestures"})
public void testShowPressCancelOnWindowFocusLost() throws Exception {
final long time = SystemClock.uptimeMillis();
- GestureRecordingMotionEventDelegate mockDelegate =
- new GestureRecordingMotionEventDelegate();
- mGestureHandler = new ContentViewGestureHandler(
- getInstrumentation().getTargetContext(), mockDelegate, mMockZoomManager);
- mLongPressDetector = new LongPressDetector(
- getInstrumentation().getTargetContext(), mGestureHandler);
- mGestureHandler.setTestDependencies(mLongPressDetector, null, null);
- MotionEvent event = motionEvent(MotionEvent.ACTION_DOWN, time, time);
- mGestureHandler.onTouchEvent(event);
+ getInstrumentation().runOnMainSync(new Runnable() {
+ @Override
+ public void run() {
+ setUp();
+ MotionEvent event = motionEvent(MotionEvent.ACTION_DOWN, time, time);
+ mGestureHandler.onTouchEvent(event);
+ }
+ });
- mGestureHandler.sendShowPressedStateGestureForTesting();
- assertEquals("A show pressed state event should have been sent",
- ContentViewGestureHandler.GESTURE_SHOW_PRESSED_STATE,
- mockDelegate.mMostRecentGestureEvent.mType);
- assertEquals("Only showPressedState and tapDown should have been sent",
- 2, mockDelegate.mGestureTypeList.size());
+ assertTrue(mMockMotionEventDelegate.mShowPressCalled.await(
+ ScalableTimeout.ScaleTimeout(ViewConfiguration.getTapTimeout() + 10),
+ TimeUnit.MILLISECONDS));
- mLongPressDetector.startLongPressTimerIfNeeded(event);
- mLongPressDetector.sendLongPressGestureForTest();
+ assertTrue(mMockMotionEventDelegate.mLongPressCalled.await(
+ ScalableTimeout.ScaleTimeout(ViewConfiguration.getLongPressTimeout()
+ + ViewConfiguration.getTapTimeout() + 10),
+ TimeUnit.MILLISECONDS));
- assertEquals("Only should have sent only LONG_PRESS event",
- 3, mockDelegate.mGestureTypeList.size());
- assertEquals("Should have a long press event next",
+ assertEquals("Should have sent SHOW_PRESS and LONG_PRESS events",
+ 3, mMockMotionEventDelegate.mGestureTypeList.size());
+ assertEquals("Should have a show press event",
+ ContentViewGestureHandler.GESTURE_SHOW_PRESS,
+ mMockMotionEventDelegate.mGestureTypeList.get(1).intValue());
+ assertEquals("Should have a long press event",
ContentViewGestureHandler.GESTURE_LONG_PRESS,
- mockDelegate.mGestureTypeList.get(2).intValue());
+ mMockMotionEventDelegate.mGestureTypeList.get(2).intValue());
// The long press triggers window focus loss by opening a context menu
mGestureHandler.onWindowFocusLost();
assertEquals("Only should have sent only GESTURE_TAP_CANCEL event",
- 4, mockDelegate.mGestureTypeList.size());
+ 4, mMockMotionEventDelegate.mGestureTypeList.size());
assertEquals("Should have a gesture show press cancel event next",
ContentViewGestureHandler.GESTURE_TAP_CANCEL,
- mockDelegate.mGestureTypeList.get(3).intValue());
+ mMockMotionEventDelegate.mGestureTypeList.get(3).intValue());
}
/**
@@ -793,25 +404,17 @@ public class ContentViewGestureHandlerTest extends InstrumentationTestCase {
final long downTime = SystemClock.uptimeMillis();
final long eventTime = SystemClock.uptimeMillis();
- GestureRecordingMotionEventDelegate mockDelegate =
- new GestureRecordingMotionEventDelegate();
- mGestureHandler = new ContentViewGestureHandler(
- getInstrumentation().getTargetContext(), mockDelegate, mMockZoomManager);
- mLongPressDetector = new LongPressDetector(
- getInstrumentation().getTargetContext(), mGestureHandler);
-
MotionEvent event = motionEvent(MotionEvent.ACTION_DOWN, downTime, downTime);
assertTrue(mGestureHandler.onTouchEvent(event));
- assertFalse("Should not have a pending LONG_PRESS", mLongPressDetector.hasPendingMessage());
mGestureHandler.sendShowPressedStateGestureForTesting();
assertEquals("A show pressed state event should have been sent",
- ContentViewGestureHandler.GESTURE_SHOW_PRESSED_STATE,
- mockDelegate.mMostRecentGestureEvent.mType);
+ ContentViewGestureHandler.GESTURE_SHOW_PRESS,
+ mMockMotionEventDelegate.mMostRecentGestureEvent.mType);
assertEquals("Only tapDown and showPressedState should have been sent",
- 2, mockDelegate.mGestureTypeList.size());
+ 2, mMockMotionEventDelegate.mGestureTypeList.size());
event = MotionEvent.obtain(
downTime, eventTime + 10, MotionEvent.ACTION_MOVE,
@@ -820,13 +423,13 @@ public class ContentViewGestureHandlerTest extends InstrumentationTestCase {
assertEquals("We should have started scrolling",
ContentViewGestureHandler.GESTURE_SCROLL_BY,
- mockDelegate.mMostRecentGestureEvent.mType);
+ mMockMotionEventDelegate.mMostRecentGestureEvent.mType);
assertTrue("A show press cancel event should have been sent",
- mockDelegate.mGestureTypeList.contains(
+ mMockMotionEventDelegate.mGestureTypeList.contains(
ContentViewGestureHandler.GESTURE_TAP_CANCEL));
assertEquals("Only tapDown, showPressedState, showPressCancel, scrollBegin and scrollBy" +
" should have been sent",
- 5, mockDelegate.mGestureTypeList.size());
+ 5, mMockMotionEventDelegate.mGestureTypeList.size());
event = MotionEvent.obtain(
downTime, eventTime + 15, MotionEvent.ACTION_UP,
@@ -834,12 +437,12 @@ public class ContentViewGestureHandlerTest extends InstrumentationTestCase {
assertTrue(mGestureHandler.onTouchEvent(event));
assertEquals("We should have started flinging",
ContentViewGestureHandler.GESTURE_FLING_START,
- mockDelegate.mMostRecentGestureEvent.mType);
+ mMockMotionEventDelegate.mMostRecentGestureEvent.mType);
assertTrue("A scroll end event should not have been sent",
- !mockDelegate.mGestureTypeList.contains(
+ !mMockMotionEventDelegate.mGestureTypeList.contains(
ContentViewGestureHandler.GESTURE_SCROLL_END));
assertEquals("The last up should have caused flingStart to be sent",
- 6, mockDelegate.mGestureTypeList.size());
+ 6, mMockMotionEventDelegate.mGestureTypeList.size());
}
/**
@@ -853,23 +456,15 @@ public class ContentViewGestureHandlerTest extends InstrumentationTestCase {
final long downTime = SystemClock.uptimeMillis();
final long eventTime = SystemClock.uptimeMillis();
- GestureRecordingMotionEventDelegate mockDelegate =
- new GestureRecordingMotionEventDelegate();
- mGestureHandler = new ContentViewGestureHandler(
- getInstrumentation().getTargetContext(), mockDelegate, mMockZoomManager);
- mLongPressDetector = new LongPressDetector(
- getInstrumentation().getTargetContext(), mGestureHandler);
-
MotionEvent event = motionEvent(MotionEvent.ACTION_DOWN, downTime, downTime);
assertTrue(mGestureHandler.onTouchEvent(event));
- assertFalse("Should not have a pending LONG_PRESS", mLongPressDetector.hasPendingMessage());
mGestureHandler.sendShowPressedStateGestureForTesting();
- assertEquals("GESTURE_SHOW_PRESSED_STATE should have been sent",
- ContentViewGestureHandler.GESTURE_SHOW_PRESSED_STATE,
- mockDelegate.mMostRecentGestureEvent.mType);
- assertEquals("Only GESTURE_TAP_DOWN and GESTURE_SHOW_PRESSED_STATE should have been sent",
- 2, mockDelegate.mGestureTypeList.size());
+ assertEquals("GESTURE_SHOW_PRESS should have been sent",
+ ContentViewGestureHandler.GESTURE_SHOW_PRESS,
+ mMockMotionEventDelegate.mMostRecentGestureEvent.mType);
+ assertEquals("Only GESTURE_TAP_DOWN and GESTURE_SHOW_PRESS should have been sent",
+ 2, mMockMotionEventDelegate.mGestureTypeList.size());
event = MotionEvent.obtain(
downTime, eventTime + 5, MotionEvent.ACTION_UP,
@@ -877,11 +472,11 @@ public class ContentViewGestureHandlerTest extends InstrumentationTestCase {
mGestureHandler.onTouchEvent(event);
assertEquals("A GESTURE_SINGLE_TAP_UNCONFIRMED event should have been sent",
ContentViewGestureHandler.GESTURE_SINGLE_TAP_UNCONFIRMED,
- mockDelegate.mMostRecentGestureEvent.mType);
+ mMockMotionEventDelegate.mMostRecentGestureEvent.mType);
assertEquals("Only GESTURE_TAP_DOWN, " +
- "GESTURE_SHOW_PRESSED_STATE and " +
+ "GESTURE_SHOW_PRESS and " +
"GESTURE_SINGLE_TAP_UNCONFIRMED should have been sent",
- 3, mockDelegate.mGestureTypeList.size());
+ 3, mMockMotionEventDelegate.mGestureTypeList.size());
event = MotionEvent.obtain(
eventTime + 10, eventTime + 10, MotionEvent.ACTION_DOWN,
@@ -889,13 +484,13 @@ public class ContentViewGestureHandlerTest extends InstrumentationTestCase {
assertTrue(mGestureHandler.onTouchEvent(event));
assertEquals("A GESTURE_TAP_DOWN event should have been sent ",
ContentViewGestureHandler.GESTURE_TAP_DOWN,
- mockDelegate.mMostRecentGestureEvent.mType);
+ mMockMotionEventDelegate.mMostRecentGestureEvent.mType);
assertEquals("Only GESTURE_TAP_DOWN, " +
- "GESTURE_SHOW_PRESSED_STATE, " +
+ "GESTURE_SHOW_PRESS, " +
"GESTURE_SINGLE_TAP_UNCONFIRMED," +
"GESTURE_TAP_CANCEL and" +
"GESTURE_TAP_DOWN should have been sent",
- 5, mockDelegate.mGestureTypeList.size());
+ 5, mMockMotionEventDelegate.mGestureTypeList.size());
// Moving a very small amount of distance should not trigger the double tap drag zoom mode.
event = MotionEvent.obtain(
@@ -903,11 +498,11 @@ public class ContentViewGestureHandlerTest extends InstrumentationTestCase {
FAKE_COORD_X, FAKE_COORD_Y + 1, 0);
assertTrue(mGestureHandler.onTouchEvent(event));
assertEquals("Only GESTURE_TAP_DOWN, " +
- "GESTURE_SHOW_PRESSED_STATE, " +
+ "GESTURE_SHOW_PRESS, " +
"GESTURE_SINGLE_TAP_UNCONFIRMED and" +
- "GESTURE_TAP_CANCEL and" +
+ "GESTURE_TAP_CANCEL and " +
"GESTURE_TAP_DOWN should have been sent",
- 5, mockDelegate.mGestureTypeList.size());
+ 5, mMockMotionEventDelegate.mGestureTypeList.size());
event = MotionEvent.obtain(
eventTime + 10, eventTime + 15, MotionEvent.ACTION_UP,
@@ -915,14 +510,14 @@ public class ContentViewGestureHandlerTest extends InstrumentationTestCase {
assertTrue(mGestureHandler.onTouchEvent(event));
assertEquals("A double tap should have occurred",
ContentViewGestureHandler.GESTURE_DOUBLE_TAP,
- mockDelegate.mMostRecentGestureEvent.mType);
+ mMockMotionEventDelegate.mMostRecentGestureEvent.mType);
assertEquals("Only GESTURE_TAP_DOWN, " +
- "GESTURE_SHOW_PRESSED_STATE, " +
+ "GESTURE_SHOW_PRESS, " +
"GESTURE_SINGLE_TAP_UNCONFIRMED, " +
"GESTURE_TAP_CANCEL, " +
"GESTURE_TAP_DOWN, " +
"GESTURE_DOUBLE_TAP should have been sent",
- 6, mockDelegate.mGestureTypeList.size());
+ 6, mMockMotionEventDelegate.mGestureTypeList.size());
}
/**
@@ -935,23 +530,15 @@ public class ContentViewGestureHandlerTest extends InstrumentationTestCase {
final long downTime1 = SystemClock.uptimeMillis();
final long downTime2 = downTime1 + 100;
- GestureRecordingMotionEventDelegate mockDelegate =
- new GestureRecordingMotionEventDelegate();
- mGestureHandler = new ContentViewGestureHandler(
- getInstrumentation().getTargetContext(), mockDelegate, mMockZoomManager);
- mLongPressDetector = new LongPressDetector(
- getInstrumentation().getTargetContext(), mGestureHandler);
-
MotionEvent event = motionEvent(MotionEvent.ACTION_DOWN, downTime1, downTime1);
assertTrue(mGestureHandler.onTouchEvent(event));
- assertFalse("Should not have a pending LONG_PRESS", mLongPressDetector.hasPendingMessage());
mGestureHandler.sendShowPressedStateGestureForTesting();
- assertEquals("GESTURE_SHOW_PRESSED_STATE should have been sent",
- ContentViewGestureHandler.GESTURE_SHOW_PRESSED_STATE,
- mockDelegate.mMostRecentGestureEvent.mType);
- assertEquals("Only GESTURE_TAP_DOWN and GESTURE_SHOW_PRESSED_STATE should have been sent",
- 2, mockDelegate.mGestureTypeList.size());
+ assertEquals("GESTURE_SHOW_PRESS should have been sent",
+ ContentViewGestureHandler.GESTURE_SHOW_PRESS,
+ mMockMotionEventDelegate.mMostRecentGestureEvent.mType);
+ assertEquals("Only GESTURE_TAP_DOWN and GESTURE_SHOW_PRESS should have been sent",
+ 2, mMockMotionEventDelegate.mGestureTypeList.size());
event = MotionEvent.obtain(
@@ -960,12 +547,12 @@ public class ContentViewGestureHandlerTest extends InstrumentationTestCase {
mGestureHandler.onTouchEvent(event);
assertEquals("A GESTURE_SINGLE_TAP_UNCONFIRMED event should have been sent",
ContentViewGestureHandler.GESTURE_SINGLE_TAP_UNCONFIRMED,
- mockDelegate.mMostRecentGestureEvent.mType);
+ mMockMotionEventDelegate.mMostRecentGestureEvent.mType);
assertEquals("Only GESTURE_TAP_DOWN, " +
- "GESTURE_SHOW_PRESSED_STATE and " +
+ "GESTURE_SHOW_PRESS and " +
"GESTURE_TAP_UNCONFIRMED " +
"should have been sent",
- 3, mockDelegate.mGestureTypeList.size());
+ 3, mMockMotionEventDelegate.mGestureTypeList.size());
event = MotionEvent.obtain(
downTime2, downTime2, MotionEvent.ACTION_DOWN,
@@ -973,23 +560,23 @@ public class ContentViewGestureHandlerTest extends InstrumentationTestCase {
assertTrue(mGestureHandler.onTouchEvent(event));
assertEquals("GESTURE_TAP_DOWN should have been sent",
ContentViewGestureHandler.GESTURE_TAP_DOWN,
- mockDelegate.mMostRecentGestureEvent.mType);
+ mMockMotionEventDelegate.mMostRecentGestureEvent.mType);
assertEquals("Only GESTURE_TAP_DOWN, " +
- "GESTURE_SHOW_PRESSED_STATE, " +
+ "GESTURE_SHOW_PRESS, " +
"GESTURE_TAP_UNCONFIRMED," +
"GESTURE_TAP_CANCEL and" +
"GESTURE_TAP_DOWN should have been sent",
- 5, mockDelegate.mGestureTypeList.size());
+ 5, mMockMotionEventDelegate.mGestureTypeList.size());
event = MotionEvent.obtain(
downTime2, downTime2 + 5, MotionEvent.ACTION_MOVE,
FAKE_COORD_X, FAKE_COORD_Y + 100, 0);
assertTrue(mGestureHandler.onTouchEvent(event));
assertTrue("GESTURE_SCROLL_START should have been sent",
- mockDelegate.mGestureTypeList.contains(
+ mMockMotionEventDelegate.mGestureTypeList.contains(
ContentViewGestureHandler.GESTURE_SCROLL_START));
- GestureRecordingMotionEventDelegate.GestureEvent startEvent =
- mockDelegate.getActiveScrollStartEvent();
+ MockMotionEventDelegate.GestureEvent startEvent =
+ mMockMotionEventDelegate.mActiveScrollStartEvent;
assertEquals(FAKE_COORD_X, startEvent.getX());
assertEquals(FAKE_COORD_Y + 100, startEvent.getY());
Bundle extraParams = startEvent.getExtraParams();
@@ -1001,29 +588,29 @@ public class ContentViewGestureHandlerTest extends InstrumentationTestCase {
assertEquals("GESTURE_PINCH_BEGIN should have been sent",
ContentViewGestureHandler.GESTURE_PINCH_BEGIN,
- mockDelegate.mMostRecentGestureEvent.mType);
+ mMockMotionEventDelegate.mMostRecentGestureEvent.mType);
assertEquals("Only GESTURE_TAP_DOWN, " +
- "GESTURE_SHOW_PRESSED_STATE, " +
+ "GESTURE_SHOW_PRESS, " +
"GESTURE_TAP_UNCONFIRMED," +
"GESTURE_TAP_CANCEL, " +
"GESTURE_TAP_DOWN, " +
"GESTURE_TAP_CANCEL, " +
"GESTURE_SCROLL_START, and " +
"GESTURE_PINCH_BEGIN should have been sent",
- 8, mockDelegate.mGestureTypeList.size());
+ 8, mMockMotionEventDelegate.mGestureTypeList.size());
event = MotionEvent.obtain(
downTime2, downTime2 + 10, MotionEvent.ACTION_MOVE,
FAKE_COORD_X, FAKE_COORD_Y + 200, 0);
assertTrue(mGestureHandler.onTouchEvent(event));
assertTrue("GESTURE_SCROLL_BY should have been sent",
- mockDelegate.mGestureTypeList.contains(
+ mMockMotionEventDelegate.mGestureTypeList.contains(
ContentViewGestureHandler.GESTURE_SCROLL_BY));
assertEquals("GESTURE_PINCH_BY should have been sent",
ContentViewGestureHandler.GESTURE_PINCH_BY,
- mockDelegate.mMostRecentGestureEvent.mType);
+ mMockMotionEventDelegate.mMostRecentGestureEvent.mType);
assertEquals("Only GESTURE_TAP_DOWN, " +
- "GESTURE_SHOW_PRESSED_STATE, " +
+ "GESTURE_SHOW_PRESS, " +
"GESTURE_TAP_UNCONFIRMED," +
"GESTURE_TAP_CANCEL, " +
"GESTURE_TAP_DOWN, " +
@@ -1032,20 +619,20 @@ public class ContentViewGestureHandlerTest extends InstrumentationTestCase {
"GESTURE_PINCH_BEGIN, " +
"GESTURE_SCROLL_BY, and " +
"GESTURE_PINCH_BY should have been sent",
- 10, mockDelegate.mGestureTypeList.size());
+ 10, mMockMotionEventDelegate.mGestureTypeList.size());
event = MotionEvent.obtain(
downTime2, downTime2 + 15, MotionEvent.ACTION_UP,
FAKE_COORD_X, FAKE_COORD_Y + 200, 0);
assertTrue(mGestureHandler.onTouchEvent(event));
assertTrue("GESTURE_PINCH_END should have been sent",
- mockDelegate.mGestureTypeList.contains(
+ mMockMotionEventDelegate.mGestureTypeList.contains(
ContentViewGestureHandler.GESTURE_PINCH_END));
assertEquals("GESTURE_SCROLL_END should have been sent",
ContentViewGestureHandler.GESTURE_SCROLL_END,
- mockDelegate.mMostRecentGestureEvent.mType);
+ mMockMotionEventDelegate.mMostRecentGestureEvent.mType);
assertEquals("Only GESTURE_TAP_DOWN, " +
- "GESTURE_SHOW_PRESSED_STATE, " +
+ "GESTURE_SHOW_PRESS, " +
"GESTURE_TAP_UNCONFIRMED," +
"GESTURE_TAP_CANCEL, " +
"GESTURE_TAP_DOWN, " +
@@ -1056,7 +643,7 @@ public class ContentViewGestureHandlerTest extends InstrumentationTestCase {
"GESTURE_PINCH_BY, " +
"GESTURE_PINCH_END, and " +
"GESTURE_SCROLL_END should have been sent",
- 12, mockDelegate.mGestureTypeList.size());
+ 12, mMockMotionEventDelegate.mGestureTypeList.size());
}
@@ -1071,22 +658,15 @@ public class ContentViewGestureHandlerTest extends InstrumentationTestCase {
final long downTime1 = SystemClock.uptimeMillis();
final long downTime2 = downTime1 + 100;
- GestureRecordingMotionEventDelegate mockDelegate =
- new GestureRecordingMotionEventDelegate();
- mGestureHandler = new ContentViewGestureHandler(
- getInstrumentation().getTargetContext(), mockDelegate, mMockZoomManager);
- mLongPressDetector = new LongPressDetector(
- getInstrumentation().getTargetContext(), mGestureHandler);
-
MotionEvent event = motionEvent(MotionEvent.ACTION_DOWN, downTime1, downTime1);
assertTrue(mGestureHandler.onTouchEvent(event));
mGestureHandler.sendShowPressedStateGestureForTesting();
- assertEquals("GESTURE_SHOW_PRESSED_STATE should have been sent",
- ContentViewGestureHandler.GESTURE_SHOW_PRESSED_STATE,
- mockDelegate.mMostRecentGestureEvent.mType);
- assertEquals("Only GESTURE_TAP_DOWN and GESTURE_SHOW_PRESSED_STATE should have been sent",
- 2, mockDelegate.mGestureTypeList.size());
+ assertEquals("GESTURE_SHOW_PRESS should have been sent",
+ ContentViewGestureHandler.GESTURE_SHOW_PRESS,
+ mMockMotionEventDelegate.mMostRecentGestureEvent.mType);
+ assertEquals("Only GESTURE_TAP_DOWN and GESTURE_SHOW_PRESS should have been sent",
+ 2, mMockMotionEventDelegate.mGestureTypeList.size());
event = MotionEvent.obtain(
downTime1, downTime1 + 5, MotionEvent.ACTION_UP,
@@ -1094,12 +674,12 @@ public class ContentViewGestureHandlerTest extends InstrumentationTestCase {
mGestureHandler.onTouchEvent(event);
assertEquals("A GESTURE_SINGLE_TAP_UNCONFIRMED event should have been sent",
ContentViewGestureHandler.GESTURE_SINGLE_TAP_UNCONFIRMED,
- mockDelegate.mMostRecentGestureEvent.mType);
+ mMockMotionEventDelegate.mMostRecentGestureEvent.mType);
assertEquals("Only GESTURE_TAP_DOWN, " +
- "GESTURE_SHOW_PRESSED_STATE and " +
+ "GESTURE_SHOW_PRESS and " +
"GESTURE_TAP_UNCONFIRMED " +
"should have been sent",
- 3, mockDelegate.mGestureTypeList.size());
+ 3, mMockMotionEventDelegate.mGestureTypeList.size());
event = MotionEvent.obtain(
downTime2, downTime2, MotionEvent.ACTION_DOWN,
@@ -1107,47 +687,47 @@ public class ContentViewGestureHandlerTest extends InstrumentationTestCase {
assertTrue(mGestureHandler.onTouchEvent(event));
assertEquals("GESTURE_TAP_DOWN should have been sent",
ContentViewGestureHandler.GESTURE_TAP_DOWN,
- mockDelegate.mMostRecentGestureEvent.mType);
+ mMockMotionEventDelegate.mMostRecentGestureEvent.mType);
assertEquals("Only GESTURE_TAP_DOWN, " +
- "GESTURE_SHOW_PRESSED_STATE, " +
+ "GESTURE_SHOW_PRESS, " +
"GESTURE_TAP_UNCONFIRMED," +
"GESTURE_TAP_CANCEL and" +
"GESTURE_TAP_DOWN should have been sent",
- 5, mockDelegate.mGestureTypeList.size());
+ 5, mMockMotionEventDelegate.mGestureTypeList.size());
event = MotionEvent.obtain(
downTime2, downTime2 + 5, MotionEvent.ACTION_MOVE,
FAKE_COORD_X, FAKE_COORD_Y + 100, 0);
assertTrue(mGestureHandler.onTouchEvent(event));
assertTrue("GESTURE_SCROLL_START should have been sent",
- mockDelegate.mGestureTypeList.contains(
+ mMockMotionEventDelegate.mGestureTypeList.contains(
ContentViewGestureHandler.GESTURE_SCROLL_START));
assertEquals("GESTURE_PINCH_BEGIN should have been sent",
ContentViewGestureHandler.GESTURE_PINCH_BEGIN,
- mockDelegate.mMostRecentGestureEvent.mType);
+ mMockMotionEventDelegate.mMostRecentGestureEvent.mType);
assertEquals("Only GESTURE_TAP_DOWN, " +
- "GESTURE_SHOW_PRESSED_STATE, " +
+ "GESTURE_SHOW_PRESS, " +
"GESTURE_TAP_UNCONFIRMED," +
"GESTURE_TAP_CANCEL, " +
"GESTURE_TAP_DOWN, " +
"GESTURE_TAP_CANCEL, " +
"GESTURE_SCROLL_START, and " +
"GESTURE_PINCH_BEGIN should have been sent",
- 8, mockDelegate.mGestureTypeList.size());
+ 8, mMockMotionEventDelegate.mGestureTypeList.size());
event = MotionEvent.obtain(
downTime2, downTime2 + 10, MotionEvent.ACTION_POINTER_DOWN,
FAKE_COORD_X, FAKE_COORD_Y + 200, 0);
mGestureHandler.onTouchEvent(event);
assertTrue("GESTURE_PINCH_END should have been sent",
- mockDelegate.mGestureTypeList.contains(
+ mMockMotionEventDelegate.mGestureTypeList.contains(
ContentViewGestureHandler.GESTURE_PINCH_END));
assertEquals("GESTURE_SCROLL_END should have been sent",
ContentViewGestureHandler.GESTURE_SCROLL_END,
- mockDelegate.mMostRecentGestureEvent.mType);
+ mMockMotionEventDelegate.mMostRecentGestureEvent.mType);
assertEquals("Only GESTURE_TAP_DOWN, " +
- "GESTURE_SHOW_PRESSED_STATE, " +
+ "GESTURE_SHOW_PRESS, " +
"GESTURE_TAP_UNCONFIRMED," +
"GESTURE_TAP_CANCEL, " +
"GESTURE_TAP_DOWN, " +
@@ -1156,21 +736,21 @@ public class ContentViewGestureHandlerTest extends InstrumentationTestCase {
"GESTURE_PINCH_BEGIN, " +
"GESTURE_PINCH_END, and " +
"GESTURE_SCROLL_END should have been sent",
- 10, mockDelegate.mGestureTypeList.size());
+ 10, mMockMotionEventDelegate.mGestureTypeList.size());
event = MotionEvent.obtain(
downTime2, downTime2 + 15, MotionEvent.ACTION_POINTER_UP,
FAKE_COORD_X, FAKE_COORD_Y + 200, 0);
mGestureHandler.onTouchEvent(event);
assertEquals("No new gestures should have been sent",
- 10, mockDelegate.mGestureTypeList.size());
+ 10, mMockMotionEventDelegate.mGestureTypeList.size());
event = MotionEvent.obtain(
downTime2, downTime2 + 20, MotionEvent.ACTION_UP,
FAKE_COORD_X, FAKE_COORD_Y + 200, 0);
mGestureHandler.onTouchEvent(event);
assertEquals("No new gestures should have been sent",
- 10, mockDelegate.mGestureTypeList.size());
+ 10, mMockMotionEventDelegate.mGestureTypeList.size());
}
/**
@@ -1184,10 +764,6 @@ public class ContentViewGestureHandlerTest extends InstrumentationTestCase {
final long downTime1 = SystemClock.uptimeMillis();
final long downTime2 = downTime1 + 100;
- GestureRecordingMotionEventDelegate mockDelegate =
- new GestureRecordingMotionEventDelegate();
- mGestureHandler = new ContentViewGestureHandler(
- getInstrumentation().getTargetContext(), mockDelegate, mMockZoomManager);
mGestureHandler.updateDoubleTapSupport(false);
MotionEvent event = motionEvent(MotionEvent.ACTION_DOWN, downTime1, downTime1);
@@ -1211,10 +787,10 @@ public class ContentViewGestureHandlerTest extends InstrumentationTestCase {
// disabled.
assertTrue(mGestureHandler.onTouchEvent(event));
assertTrue("GESTURE_SCROLL_START should have been sent",
- mockDelegate.mGestureTypeList.contains(
+ mMockMotionEventDelegate.mGestureTypeList.contains(
ContentViewGestureHandler.GESTURE_SCROLL_START));
assertFalse("No GESTURE_PINCH_BEGIN should have been sent",
- mockDelegate.mGestureTypeList.contains(
+ mMockMotionEventDelegate.mGestureTypeList.contains(
ContentViewGestureHandler.GESTURE_PINCH_BEGIN));
event = MotionEvent.obtain(
@@ -1223,113 +799,24 @@ public class ContentViewGestureHandlerTest extends InstrumentationTestCase {
assertTrue(mGestureHandler.onTouchEvent(event));
assertEquals("GESTURE_SCROLL_BY should have been sent",
ContentViewGestureHandler.GESTURE_SCROLL_BY,
- mockDelegate.mMostRecentGestureEvent.mType);
+ mMockMotionEventDelegate.mMostRecentGestureEvent.mType);
assertEquals("GESTURE_SCROLL_BY should have been sent",
event.getEventTime(),
- mockDelegate.mMostRecentGestureEvent.getTimeMs());
+ mMockMotionEventDelegate.mMostRecentGestureEvent.getTimeMs());
assertTrue("No GESTURE_PINCH_BY should have been sent",
ContentViewGestureHandler.GESTURE_PINCH_BY !=
- mockDelegate.mMostRecentGestureEvent.mType);
+ mMockMotionEventDelegate.mMostRecentGestureEvent.mType);
event = MotionEvent.obtain(
downTime2, downTime2 + 15, MotionEvent.ACTION_UP,
FAKE_COORD_X, FAKE_COORD_Y + 200, 0);
assertTrue(mGestureHandler.onTouchEvent(event));
assertFalse("No GESTURE_PINCH_END should have been sent",
- mockDelegate.mGestureTypeList.contains(
+ mMockMotionEventDelegate.mGestureTypeList.contains(
ContentViewGestureHandler.GESTURE_PINCH_END));
}
/**
- * Mock MotionEventDelegate that remembers the most recent gesture event and any
- * currently active scroll start event.
- */
- static class GestureRecordingMotionEventDelegate implements MotionEventDelegate {
- static class GestureEvent {
- private final int mType;
- private final long mTimeMs;
- private final int mX;
- private final int mY;
- private final Bundle mExtraParams;
-
- public GestureEvent(int type, long timeMs, int x, int y, Bundle extraParams) {
- mType = type;
- mTimeMs = timeMs;
- mX = x;
- mY = y;
- mExtraParams = extraParams;
- }
-
- public int getType() {
- return mType;
- }
-
- public long getTimeMs() {
- return mTimeMs;
- }
-
- public int getX() {
- return mX;
- }
-
- public int getY() {
- return mY;
- }
-
- public Bundle getExtraParams() {
- return mExtraParams;
- }
- }
- private GestureEvent mMostRecentGestureEvent;
- private GestureEvent mActiveScrollStartEvent;
- private final ArrayList<Integer> mGestureTypeList = new ArrayList<Integer>();
- private final ArrayList<Long> mGestureTimeList = new ArrayList<Long>();
-
- @Override
- public boolean sendTouchEvent(long timeMs, int action, TouchPoint[] pts) {
- return true;
- }
-
- @Override
- public boolean sendGesture(int type, long timeMs, int x, int y, Bundle extraParams) {
- Log.i(TAG, "Gesture event received with type id " + type);
- mMostRecentGestureEvent = new GestureEvent(type, timeMs, x, y, extraParams);
- mGestureTypeList.add(mMostRecentGestureEvent.mType);
- mGestureTimeList.add(timeMs);
- if (type == ContentViewGestureHandler.GESTURE_SCROLL_START)
- mActiveScrollStartEvent = mMostRecentGestureEvent;
- else if (type == ContentViewGestureHandler.GESTURE_SCROLL_END ||
- type == ContentViewGestureHandler.GESTURE_FLING_CANCEL)
- mActiveScrollStartEvent = null;
- return true;
- }
-
- @Override
- public void sendSingleTapUMA(int type) {
- // Not implemented.
- }
-
- @Override
- public void sendActionAfterDoubleTapUMA(int type,
- boolean clickDelayEnabled) {
- // Not implemented.
- }
-
- @Override
- public void invokeZoomPicker() {
- // Not implemented.
- }
-
- public GestureEvent getMostRecentGestureEvent() {
- return mMostRecentGestureEvent;
- }
-
- public GestureEvent getActiveScrollStartEvent() {
- return mActiveScrollStartEvent;
- }
- }
-
- /**
* Generate a scroll gesture and verify that the resulting scroll motion event has both absolute
* and relative position information.
*/
@@ -1340,27 +827,24 @@ public class ContentViewGestureHandlerTest extends InstrumentationTestCase {
final int deltaY = 84;
final long downTime = SystemClock.uptimeMillis();
- GestureRecordingMotionEventDelegate delegate = new GestureRecordingMotionEventDelegate();
- ContentViewGestureHandler gestureHandler = new ContentViewGestureHandler(
- getInstrumentation().getTargetContext(), delegate, mMockZoomManager);
MotionEvent event = motionEvent(MotionEvent.ACTION_DOWN, downTime, downTime);
- assertTrue(gestureHandler.onTouchEvent(event));
+ assertTrue(mGestureHandler.onTouchEvent(event));
// Move twice so that we get two GESTURE_SCROLL_BY events and can compare
// the relative and absolute coordinates.
event = MotionEvent.obtain(
downTime, downTime + 5, MotionEvent.ACTION_MOVE,
FAKE_COORD_X - deltaX / 2, FAKE_COORD_Y - deltaY / 2, 0);
- assertTrue(gestureHandler.onTouchEvent(event));
+ assertTrue(mGestureHandler.onTouchEvent(event));
event = MotionEvent.obtain(
downTime, downTime + 10, MotionEvent.ACTION_MOVE,
FAKE_COORD_X - deltaX, FAKE_COORD_Y - deltaY, 0);
- assertTrue(gestureHandler.onTouchEvent(event));
+ assertTrue(mGestureHandler.onTouchEvent(event));
// Make sure the reported gesture event has all the expected data.
- GestureRecordingMotionEventDelegate.GestureEvent gestureEvent =
- delegate.getMostRecentGestureEvent();
+ MockMotionEventDelegate.GestureEvent gestureEvent =
+ mMockMotionEventDelegate.mMostRecentGestureEvent;
assertNotNull(gestureEvent);
assertEquals(ContentViewGestureHandler.GESTURE_SCROLL_BY, gestureEvent.getType());
assertEquals(downTime + 10, gestureEvent.getTimeMs());
@@ -1385,28 +869,25 @@ public class ContentViewGestureHandlerTest extends InstrumentationTestCase {
final int deltaY = 89;
final long downTime = SystemClock.uptimeMillis();
- GestureRecordingMotionEventDelegate delegate = new GestureRecordingMotionEventDelegate();
- ContentViewGestureHandler gestureHandler = new ContentViewGestureHandler(
- getInstrumentation().getTargetContext(), delegate, mMockZoomManager);
MotionEvent event = motionEvent(MotionEvent.ACTION_DOWN, downTime, downTime);
- assertTrue(gestureHandler.onTouchEvent(event));
+ assertTrue(mGestureHandler.onTouchEvent(event));
// Move twice such that the first event isn't sufficient to start
// scrolling on it's own.
event = MotionEvent.obtain(
downTime, downTime + 5, MotionEvent.ACTION_MOVE,
FAKE_COORD_X + 2, FAKE_COORD_Y + 1, 0);
- assertFalse(gestureHandler.onTouchEvent(event));
+ assertTrue(mGestureHandler.onTouchEvent(event));
assertNull("Expect scrolling hasn't yet started",
- delegate.getActiveScrollStartEvent());
+ mMockMotionEventDelegate.mActiveScrollStartEvent);
event = MotionEvent.obtain(
downTime, downTime + 10, MotionEvent.ACTION_MOVE,
FAKE_COORD_X + deltaX, FAKE_COORD_Y + deltaY, 0);
- assertTrue(gestureHandler.onTouchEvent(event));
+ assertTrue(mGestureHandler.onTouchEvent(event));
- GestureRecordingMotionEventDelegate.GestureEvent startEvent =
- delegate.getActiveScrollStartEvent();
+ MockMotionEventDelegate.GestureEvent startEvent =
+ mMockMotionEventDelegate.mActiveScrollStartEvent;
assertNotNull(startEvent);
assertEquals(ContentViewGestureHandler.GESTURE_SCROLL_START, startEvent.getType());
assertEquals(downTime + 10, startEvent.getTimeMs());
@@ -1431,77 +912,39 @@ public class ContentViewGestureHandlerTest extends InstrumentationTestCase {
final long downTime = SystemClock.uptimeMillis();
final long eventTime = SystemClock.uptimeMillis();
- GestureRecordingMotionEventDelegate mockDelegate =
- new GestureRecordingMotionEventDelegate();
- mGestureHandler = new ContentViewGestureHandler(
- getInstrumentation().getTargetContext(), mockDelegate, mMockZoomManager);
- mLongPressDetector = mGestureHandler.getLongPressDetector();
+ getInstrumentation().runOnMainSync(new Runnable() {
+ @Override
+ public void run() {
+ setUp();
- MotionEvent event = motionEvent(MotionEvent.ACTION_DOWN, downTime, downTime);
- assertTrue(mGestureHandler.onTouchEvent(event));
- assertTrue("Should have a pending LONG_PRESS", mLongPressDetector.hasPendingMessage());
- event = MotionEvent.obtain(
- downTime, eventTime + 5, MotionEvent.ACTION_MOVE,
- FAKE_COORD_X * 5, FAKE_COORD_Y * 5, 0);
- assertTrue(mGestureHandler.onTouchEvent(event));
- event = MotionEvent.obtain(
- downTime, eventTime + 10, MotionEvent.ACTION_MOVE,
- FAKE_COORD_X * 10, FAKE_COORD_Y * 10, 0);
- assertTrue(mGestureHandler.onTouchEvent(event));
- assertTrue("Should not have a pending LONG_PRESS", !mLongPressDetector.hasPendingMessage());
+ MotionEvent event = motionEvent(MotionEvent.ACTION_DOWN, downTime, downTime);
+ assertTrue(mGestureHandler.onTouchEvent(event));
+ event = MotionEvent.obtain(
+ downTime, eventTime + 5, MotionEvent.ACTION_MOVE,
+ FAKE_COORD_X * 5, FAKE_COORD_Y * 5, 0);
+ assertTrue(mGestureHandler.onTouchEvent(event));
+ event = MotionEvent.obtain(
+ downTime, eventTime + 10, MotionEvent.ACTION_MOVE,
+ FAKE_COORD_X * 10, FAKE_COORD_Y * 10, 0);
+ assertTrue(mGestureHandler.onTouchEvent(event));
+ }
+ });
+
+ assertFalse(mMockMotionEventDelegate.mLongPressCalled.await(
+ ScalableTimeout.ScaleTimeout(ViewConfiguration.getLongPressTimeout()
+ + ViewConfiguration.getTapTimeout() + 10),
+ TimeUnit.MILLISECONDS));
// No LONG_TAP because LONG_PRESS timer is cancelled.
assertFalse("No LONG_PRESS should be sent",
- mockDelegate.mGestureTypeList.contains(
+ mMockMotionEventDelegate.mGestureTypeList.contains(
ContentViewGestureHandler.GESTURE_LONG_PRESS));
assertFalse("No LONG_TAP should be sent",
- mockDelegate.mGestureTypeList.contains(
+ mMockMotionEventDelegate.mGestureTypeList.contains(
ContentViewGestureHandler.GESTURE_LONG_TAP));
}
/**
- * Verifies that when hasTouchEventHandlers changes while in a gesture, that the pending
- * queue does not grow continually.
- */
- @SmallTest
- @Feature({"Gestures"})
- public void testHasTouchEventHandlersChangesInGesture() {
- final long downTime = SystemClock.uptimeMillis();
- final long eventTime = SystemClock.uptimeMillis();
-
- mGestureHandler = new ContentViewGestureHandler(
- getInstrumentation().getTargetContext(), new MockMotionEventDelegate(),
- mMockZoomManager);
- mLongPressDetector = new LongPressDetector(
- getInstrumentation().getTargetContext(), mGestureHandler);
-
- MotionEvent event = motionEvent(MotionEvent.ACTION_DOWN, downTime, downTime);
- assertTrue(mGestureHandler.onTouchEvent(event));
- assertEquals(0, mGestureHandler.getNumberOfPendingMotionEventsForTesting());
- assertFalse("Should not have a pending LONG_PRESS", mLongPressDetector.hasPendingMessage());
-
- event = MotionEvent.obtain(
- downTime, eventTime + 5, MotionEvent.ACTION_MOVE,
- FAKE_COORD_X * 5, FAKE_COORD_Y * 5, 0);
- assertTrue(mGestureHandler.onTouchEvent(event));
- assertEquals(0, mGestureHandler.getNumberOfPendingMotionEventsForTesting());
-
- mGestureHandler.hasTouchEventHandlers(true);
-
- event = MotionEvent.obtain(
- downTime, eventTime + 10, MotionEvent.ACTION_MOVE,
- FAKE_COORD_X * 10, FAKE_COORD_Y * 10, 0);
- assertTrue(mGestureHandler.onTouchEvent(event));
- assertEquals(0, mGestureHandler.getNumberOfPendingMotionEventsForTesting());
-
- event = MotionEvent.obtain(
- downTime, eventTime + 15, MotionEvent.ACTION_MOVE,
- FAKE_COORD_X * 15, FAKE_COORD_Y * 15, 0);
- assertTrue(mGestureHandler.onTouchEvent(event));
- assertEquals(0, mGestureHandler.getNumberOfPendingMotionEventsForTesting());
- }
-
- /**
* Verify that LONG_TAP is triggered after LongPress followed by an UP.
*
* @throws Exception
@@ -1512,255 +955,186 @@ public class ContentViewGestureHandlerTest extends InstrumentationTestCase {
final long downTime = SystemClock.uptimeMillis();
final long eventTime = SystemClock.uptimeMillis();
- GestureRecordingMotionEventDelegate mockDelegate =
- new GestureRecordingMotionEventDelegate();
- mGestureHandler = new ContentViewGestureHandler(
- getInstrumentation().getTargetContext(), mockDelegate, mMockZoomManager);
- mLongPressDetector = mGestureHandler.getLongPressDetector();
-
- MotionEvent event = motionEvent(MotionEvent.ACTION_DOWN, downTime, downTime);
- assertTrue(mGestureHandler.onTouchEvent(event));
- assertTrue("Should have a pending LONG_PRESS", mLongPressDetector.hasPendingMessage());
+ getInstrumentation().runOnMainSync(new Runnable() {
+ @Override
+ public void run() {
+ setUp();
+ mGestureHandler = new ContentViewGestureHandler(
+ getInstrumentation().getTargetContext(), mMockMotionEventDelegate);
+ MotionEvent event = motionEvent(MotionEvent.ACTION_DOWN, downTime, downTime);
+ assertTrue(mGestureHandler.onTouchEvent(event));
+ }
+ });
- mLongPressDetector.sendLongPressGestureForTest();
+ assertTrue(mMockMotionEventDelegate.mLongPressCalled.await(
+ ScalableTimeout.ScaleTimeout(ViewConfiguration.getLongPressTimeout()
+ + ViewConfiguration.getTapTimeout() + 10),
+ TimeUnit.MILLISECONDS));
assertEquals("A LONG_PRESS gesture should have been sent",
ContentViewGestureHandler.GESTURE_LONG_PRESS,
- mockDelegate.mMostRecentGestureEvent.mType);
+ mMockMotionEventDelegate.mMostRecentGestureEvent.mType);
- event = motionEvent(MotionEvent.ACTION_UP, downTime, eventTime + 1000);
- assertTrue(mGestureHandler.onTouchEvent(event));
+ MotionEvent event = motionEvent(MotionEvent.ACTION_UP, downTime, eventTime + 1000);
+ mGestureHandler.onTouchEvent(event);
assertEquals("A LONG_TAP gesture should have been sent",
ContentViewGestureHandler.GESTURE_LONG_TAP,
- mockDelegate.mMostRecentGestureEvent.mType);
+ mMockMotionEventDelegate.mMostRecentGestureEvent.mType);
}
/**
- * Verify that the touch slop region is removed from the first scroll delta to avoid a jump when
- * starting to scroll.
+ * Verify that a LONG_PRESS gesture does not prevent further scrolling.
+ *
* @throws Exception
*/
@SmallTest
@Feature({"Gestures"})
- public void testTouchSlopRemovedFromScroll() throws Exception {
- Context context = getInstrumentation().getTargetContext();
+ public void testGestureLongPressDoesNotPreventScrolling() throws Exception {
final long downTime = SystemClock.uptimeMillis();
final long eventTime = SystemClock.uptimeMillis();
- final int scaledTouchSlop = ViewConfiguration.get(context).getScaledTouchSlop();
- final int scrollDelta = 5;
-
- GestureRecordingMotionEventDelegate mockDelegate =
- new GestureRecordingMotionEventDelegate();
- mGestureHandler = new ContentViewGestureHandler(
- context, mockDelegate, mMockZoomManager);
-
- MotionEvent event = motionEvent(MotionEvent.ACTION_DOWN, downTime, downTime);
- assertTrue(mGestureHandler.onTouchEvent(event));
-
- event = MotionEvent.obtain(
- downTime, eventTime + 10, MotionEvent.ACTION_MOVE,
- FAKE_COORD_X, FAKE_COORD_Y + scaledTouchSlop + scrollDelta, 0);
- assertTrue(mGestureHandler.onTouchEvent(event));
-
- assertEquals("We should have started scrolling",
- ContentViewGestureHandler.GESTURE_SCROLL_BY,
- mockDelegate.mMostRecentGestureEvent.mType);
-
- GestureRecordingMotionEventDelegate.GestureEvent gestureEvent =
- mockDelegate.getMostRecentGestureEvent();
- assertNotNull(gestureEvent);
- Bundle extraParams = gestureEvent.getExtraParams();
- assertEquals(0, extraParams.getInt(ContentViewGestureHandler.DISTANCE_X));
- assertEquals(-scrollDelta, extraParams.getInt(ContentViewGestureHandler.DISTANCE_Y));
- }
- /**
- * Verify that touch moves are deferred if they are within the touch slop region
- * and the touch sequence is not being consumed.
- * @throws Exception
- */
- @SmallTest
- @Feature({"Gestures"})
- public void testTouchMoveWithinTouchSlopDeferred() throws Exception {
- Context context = getInstrumentation().getTargetContext();
- final long downTime = SystemClock.uptimeMillis();
- final long eventTime = SystemClock.uptimeMillis();
- final int scaledTouchSlop = ViewConfiguration.get(context).getScaledTouchSlop();
- final int lessThanSlopScrollDelta = scaledTouchSlop / 2;
- final int greaterThanSlopScrollDelta = scaledTouchSlop * 2;
+ getInstrumentation().runOnMainSync(new Runnable() {
+ @Override
+ public void run() {
+ setUp();
+ mGestureHandler = new ContentViewGestureHandler(
+ getInstrumentation().getTargetContext(), mMockMotionEventDelegate);
+ MotionEvent event = motionEvent(MotionEvent.ACTION_DOWN, downTime, downTime);
+ assertTrue(mGestureHandler.onTouchEvent(event));
+ }
+ });
- mGestureHandler.hasTouchEventHandlers(true);
+ final long longPressTimeoutMs = ViewConfiguration.getLongPressTimeout()
+ + ViewConfiguration.getTapTimeout() + 10;
+ assertTrue(mMockMotionEventDelegate.mLongPressCalled.await(
+ ScalableTimeout.ScaleTimeout(longPressTimeoutMs), TimeUnit.MILLISECONDS));
- MotionEvent event = motionEvent(MotionEvent.ACTION_DOWN, downTime, downTime);
- assertTrue(mGestureHandler.onTouchEvent(event));
- assertEquals("The touch down should have been forwarded",
- TouchPoint.TOUCH_EVENT_TYPE_START, mMockMotionEventDelegate.mLastTouchAction);
- assertEquals(1, mGestureHandler.getNumberOfPendingMotionEventsForTesting());
+ assertEquals("A LONG_PRESS gesture should have been sent",
+ ContentViewGestureHandler.GESTURE_LONG_PRESS,
+ mMockMotionEventDelegate.mMostRecentGestureEvent.mType);
- event = MotionEvent.obtain(
- downTime, eventTime + 10, MotionEvent.ACTION_MOVE,
- FAKE_COORD_X, FAKE_COORD_Y + lessThanSlopScrollDelta, 0);
- assertTrue(mGestureHandler.onTouchEvent(event));
- assertEquals(2, mGestureHandler.getNumberOfPendingMotionEventsForTesting());
+ MotionEvent event = MotionEvent.obtain(
+ downTime, eventTime + longPressTimeoutMs, MotionEvent.ACTION_MOVE,
+ FAKE_COORD_X + 100, FAKE_COORD_Y + 100, 0);
+ mGestureHandler.onTouchEvent(event);
- mGestureHandler.confirmTouchEvent(
- ContentViewGestureHandler.INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
- assertEquals("The less-than-slop touch move should not have been forwarded",
- TouchPoint.TOUCH_EVENT_TYPE_START, mMockMotionEventDelegate.mLastTouchAction);
- assertEquals(0, mGestureHandler.getNumberOfPendingMotionEventsForTesting());
+ assertEquals("Scrolling should have started",
+ ContentViewGestureHandler.GESTURE_SCROLL_BY,
+ mMockMotionEventDelegate.mMostRecentGestureEvent.mType);
+ assertTrue(mMockMotionEventDelegate.mGestureTypeList.contains(
+ ContentViewGestureHandler.GESTURE_SCROLL_START));
+ assertTrue(mMockMotionEventDelegate.mGestureTypeList.contains(
+ ContentViewGestureHandler.GESTURE_TAP_CANCEL));
- event = MotionEvent.obtain(
- downTime, eventTime + 10, MotionEvent.ACTION_MOVE,
- FAKE_COORD_X, FAKE_COORD_Y + greaterThanSlopScrollDelta, 0);
- assertTrue(mGestureHandler.onTouchEvent(event));
- assertEquals("The touch move should have been forwarded",
- TouchPoint.TOUCH_EVENT_TYPE_MOVE, mMockMotionEventDelegate.mLastTouchAction);
- mGestureHandler.confirmTouchEvent(
- ContentViewGestureHandler.INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
- assertEquals(0, mGestureHandler.getNumberOfPendingMotionEventsForTesting());
+ event = motionEvent(MotionEvent.ACTION_UP, downTime, eventTime + longPressTimeoutMs);
+ mGestureHandler.onTouchEvent(event);
+ assertFalse("Scrolling should have prevented the LONG_TAP",
+ mMockMotionEventDelegate.mGestureTypeList.contains(
+ ContentViewGestureHandler.GESTURE_LONG_TAP));
}
/**
- * Verify that touch moves are not deferred even if they are within the touch slop region
- * when the touch sequence is being consumed.
+ * Verify that LONG_PRESS is not fired during a double-tap sequence.
+ *
* @throws Exception
*/
@SmallTest
@Feature({"Gestures"})
- public void testTouchMoveWithinTouchSlopNotDeferredIfJavascriptConsumingGesture()
- throws Exception {
- Context context = getInstrumentation().getTargetContext();
+ public void testNoGestureLongPressDuringDoubleTap() throws Exception {
final long downTime = SystemClock.uptimeMillis();
final long eventTime = SystemClock.uptimeMillis();
- final int scaledTouchSlop = ViewConfiguration.get(context).getScaledTouchSlop();
- final int lessThanSlopScrollDelta = scaledTouchSlop / 2;
-
- mGestureHandler.hasTouchEventHandlers(true);
-
- MotionEvent event = motionEvent(MotionEvent.ACTION_DOWN, downTime, downTime);
- assertTrue(mGestureHandler.onTouchEvent(event));
- assertEquals("The touch down should have been forwarded",
- TouchPoint.TOUCH_EVENT_TYPE_START, mMockMotionEventDelegate.mLastTouchAction);
- assertEquals(1, mGestureHandler.getNumberOfPendingMotionEventsForTesting());
-
- event = MotionEvent.obtain(
- downTime, eventTime + 10, MotionEvent.ACTION_MOVE,
- FAKE_COORD_X, FAKE_COORD_Y + lessThanSlopScrollDelta, 0);
- assertTrue(mGestureHandler.onTouchEvent(event));
- assertEquals(2, mGestureHandler.getNumberOfPendingMotionEventsForTesting());
- mGestureHandler.confirmTouchEvent(
- ContentViewGestureHandler.INPUT_EVENT_ACK_STATE_CONSUMED);
- assertEquals("The less-than-slop touch move should have been forwarded",
- TouchPoint.TOUCH_EVENT_TYPE_MOVE, mMockMotionEventDelegate.mLastTouchAction);
- }
+ getInstrumentation().runOnMainSync(new Runnable() {
+ @Override
+ public void run() {
+ setUp();
+ mGestureHandler.updateDoubleTapSupport(true);
+ MotionEvent event = MotionEvent.obtain(
+ downTime, eventTime, MotionEvent.ACTION_DOWN,
+ FAKE_COORD_X, FAKE_COORD_Y, 0);
+ assertTrue(mGestureHandler.onTouchEvent(event));
- /**
- * Verify that touch moves are not deferred when the MotionEvent has multiple active pointers.
- * @throws Exception
- */
- @SmallTest
- @Feature({"Gestures"})
- public void testTouchMoveNotDeferredWithMultiplePointers()
- throws Exception {
- Context context = getInstrumentation().getTargetContext();
- final long downTime = SystemClock.uptimeMillis();
- final long eventTime = SystemClock.uptimeMillis();
- final int scaledTouchSlop = ViewConfiguration.get(context).getScaledTouchSlop();
- final int lessThanSlopScrollDelta = scaledTouchSlop / 2;
+ event = MotionEvent.obtain(
+ downTime, eventTime + 1, MotionEvent.ACTION_UP,
+ FAKE_COORD_X, FAKE_COORD_Y, 0);
+ mGestureHandler.onTouchEvent(event);
+ assertEquals("A GESTURE_SINGLE_TAP_UNCONFIRMED event should have been sent",
+ ContentViewGestureHandler.GESTURE_SINGLE_TAP_UNCONFIRMED,
+ mMockMotionEventDelegate.mMostRecentGestureEvent.mType);
- mGestureHandler.hasTouchEventHandlers(true);
+ event = MotionEvent.obtain(
+ downTime + 2, eventTime + 2, MotionEvent.ACTION_DOWN,
+ FAKE_COORD_X, FAKE_COORD_Y, 0);
+ assertTrue(mGestureHandler.onTouchEvent(event));
+ assertEquals("A GESTURE_TAP_DOWN event should have been sent ",
+ ContentViewGestureHandler.GESTURE_TAP_DOWN,
+ mMockMotionEventDelegate.mMostRecentGestureEvent.mType);
+ assertTrue(mGestureHandler.isDoubleTapActive());
+ }
+ });
- final int secondaryCoordX = FAKE_COORD_X + 10 * scaledTouchSlop;
- final int secondaryCoordY = FAKE_COORD_Y + 10 * scaledTouchSlop;
+ final int longPressTimeoutMs = ViewConfiguration.getLongPressTimeout()
+ + ViewConfiguration.getTapTimeout() + 10;
- PointerProperties pp0 = new PointerProperties();
- pp0.id = 0;
- pp0.toolType = MotionEvent.TOOL_TYPE_FINGER;
- PointerProperties pp1 = new PointerProperties();
- pp1.id = 1;
- pp1.toolType = MotionEvent.TOOL_TYPE_FINGER;
+ assertFalse(mMockMotionEventDelegate.mLongPressCalled.await(
+ longPressTimeoutMs, TimeUnit.MILLISECONDS));
- PointerCoords pc0 = new PointerCoords();
- pc0.x = FAKE_COORD_X;
- pc0.y = FAKE_COORD_Y;
- pc0.pressure = 1;
- pc0.size = 1;
- PointerCoords pc1 = new PointerCoords();
- pc1.x = secondaryCoordX;
- pc1.y = secondaryCoordY;
- pc1.pressure = 1;
- pc1.size = 1;
+ assertFalse("A LONG_PRESS gesture should not have been sent",
+ ContentViewGestureHandler.GESTURE_LONG_PRESS
+ == mMockMotionEventDelegate.mMostRecentGestureEvent.mType);
MotionEvent event = MotionEvent.obtain(
- eventTime, eventTime, MotionEvent.ACTION_DOWN,
- 1, new PointerProperties[] { pp0 }, new PointerCoords[] { pc0 },
- 0, 0, 1.0f, 1.0f, 0, 0, 0, 0);
- assertTrue(mGestureHandler.onTouchEvent(event));
- assertEquals(1, mGestureHandler.getNumberOfPendingMotionEventsForTesting());
- assertEquals("The touch down should have been forwarded",
- TouchPoint.TOUCH_EVENT_TYPE_START, mMockMotionEventDelegate.mLastTouchAction);
-
- event = MotionEvent.obtain(
- eventTime, eventTime, MotionEvent.ACTION_POINTER_DOWN,
- 2, new PointerProperties[] { pp0, pp1 }, new PointerCoords[] { pc0, pc1 },
- 0, 0, 1.0f, 1.0f, 0, 0, 0, 0);
+ downTime + 2, eventTime + longPressTimeoutMs, MotionEvent.ACTION_MOVE,
+ FAKE_COORD_X + 20, FAKE_COORD_Y + 20, 0);
assertTrue(mGestureHandler.onTouchEvent(event));
- assertEquals(2, mGestureHandler.getNumberOfPendingMotionEventsForTesting());
-
- mGestureHandler.confirmTouchEvent(
- ContentViewGestureHandler.INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
- assertEquals(1, mGestureHandler.getNumberOfPendingMotionEventsForTesting());
- assertEquals("The secondary touch down should have been forwarded",
- TouchPoint.TOUCH_EVENT_TYPE_START, mMockMotionEventDelegate.mLastTouchAction);
-
- pc1.x = secondaryCoordX + lessThanSlopScrollDelta;
- pc1.y = secondaryCoordY + lessThanSlopScrollDelta;
+ assertEquals("A double tap drag should have started",
+ ContentViewGestureHandler.GESTURE_PINCH_BEGIN,
+ mMockMotionEventDelegate.mMostRecentGestureEvent.mType);
+ assertTrue(mGestureHandler.isDoubleTapActive());
event = MotionEvent.obtain(
- eventTime, eventTime, MotionEvent.ACTION_MOVE,
- 2, new PointerProperties[] { pp0, pp1 }, new PointerCoords[] { pc0, pc1 },
- 0, 0, 1.0f, 1.0f, 0, 0, 0, 0);
+ downTime + 2, eventTime + longPressTimeoutMs, MotionEvent.ACTION_UP,
+ FAKE_COORD_X, FAKE_COORD_Y + 1, 0);
assertTrue(mGestureHandler.onTouchEvent(event));
- assertEquals(2, mGestureHandler.getNumberOfPendingMotionEventsForTesting());
-
- mGestureHandler.confirmTouchEvent(
- ContentViewGestureHandler.INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
- assertEquals(1, mGestureHandler.getNumberOfPendingMotionEventsForTesting());
- assertEquals("The secondary touch move should have been forwarded",
- TouchPoint.TOUCH_EVENT_TYPE_MOVE, mMockMotionEventDelegate.mLastTouchAction);
+ assertEquals("A double tap drag should have ended",
+ ContentViewGestureHandler.GESTURE_SCROLL_END,
+ mMockMotionEventDelegate.mMostRecentGestureEvent.mType);
+ assertFalse(mGestureHandler.isDoubleTapActive());
}
- private static void sendLastScrollByEvent(ContentViewGestureHandler handler) {
+ /**
+ * Verify that the touch slop region is removed from the first scroll delta to avoid a jump when
+ * starting to scroll.
+ * @throws Exception
+ */
+ @SmallTest
+ @Feature({"Gestures"})
+ public void testTouchSlopRemovedFromScroll() throws Exception {
+ Context context = getInstrumentation().getTargetContext();
final long downTime = SystemClock.uptimeMillis();
final long eventTime = SystemClock.uptimeMillis();
- MotionEvent event = motionEvent(MotionEvent.ACTION_DOWN, downTime, downTime);
- assertTrue(handler.onTouchEvent(event));
- event = MotionEvent.obtain(
- downTime, eventTime + 10, MotionEvent.ACTION_MOVE,
- FAKE_COORD_X, FAKE_COORD_Y + 30, 0);
- assertTrue(handler.onTouchEvent(event));
- }
+ final int scaledTouchSlop = ViewConfiguration.get(context).getScaledTouchSlop();
+ final int scrollDelta = 5;
- private static void sendLastZoomEvent(
- ContentViewGestureHandler handler, MockZoomManager zoomManager) {
- zoomManager.pinchOnMoveEvents(handler);
- final long downTime = SystemClock.uptimeMillis();
- final long eventTime = SystemClock.uptimeMillis();
MotionEvent event = motionEvent(MotionEvent.ACTION_DOWN, downTime, downTime);
- assertTrue(handler.onTouchEvent(event));
+ assertTrue(mGestureHandler.onTouchEvent(event));
+
event = MotionEvent.obtain(
downTime, eventTime + 10, MotionEvent.ACTION_MOVE,
- FAKE_COORD_X, FAKE_COORD_Y + 30, 0);
- assertTrue(handler.onTouchEvent(event));
- }
+ FAKE_COORD_X, FAKE_COORD_Y + scaledTouchSlop + scrollDelta, 0);
+ assertTrue(mGestureHandler.onTouchEvent(event));
- private static void sendLastPinchEvent(ContentViewGestureHandler handler) {
- final long downTime = SystemClock.uptimeMillis();
- final long eventTime = SystemClock.uptimeMillis();
- handler.pinchBegin(downTime, FAKE_COORD_X, FAKE_COORD_Y);
- handler.pinchBy(eventTime + 10, FAKE_COORD_X, FAKE_COORD_Y, 2);
+ assertEquals("We should have started scrolling",
+ ContentViewGestureHandler.GESTURE_SCROLL_BY,
+ mMockMotionEventDelegate.mMostRecentGestureEvent.mType);
+
+ MockMotionEventDelegate.GestureEvent gestureEvent =
+ mMockMotionEventDelegate.mMostRecentGestureEvent;
+ assertNotNull(gestureEvent);
+ Bundle extraParams = gestureEvent.getExtraParams();
+ assertEquals(0, extraParams.getInt(ContentViewGestureHandler.DISTANCE_X));
+ assertEquals(-scrollDelta, extraParams.getInt(ContentViewGestureHandler.DISTANCE_Y));
}
/**
@@ -1775,25 +1149,19 @@ public class ContentViewGestureHandlerTest extends InstrumentationTestCase {
final long downTime = SystemClock.uptimeMillis();
final long eventTime = SystemClock.uptimeMillis();
- GestureRecordingMotionEventDelegate mockDelegate =
- new GestureRecordingMotionEventDelegate();
- mGestureHandler = new ContentViewGestureHandler(
- getInstrumentation().getTargetContext(), mockDelegate, mMockZoomManager);
-
MotionEvent event = motionEvent(MotionEvent.ACTION_DOWN, downTime, downTime);
assertTrue(mGestureHandler.onTouchEvent(event));
assertEquals("A TAP_DOWN gesture should have been sent",
ContentViewGestureHandler.GESTURE_TAP_DOWN,
- mockDelegate.mMostRecentGestureEvent.mType);
+ mMockMotionEventDelegate.mMostRecentGestureEvent.mType);
event = motionEvent(MotionEvent.ACTION_UP, downTime, eventTime + 10);
assertFalse(mGestureHandler.onTouchEvent(event));
assertEquals("A GESTURE_SINGLE_TAP_UNCONFIRMED gesture should have been sent",
ContentViewGestureHandler.GESTURE_SINGLE_TAP_UNCONFIRMED,
- mockDelegate.mMostRecentGestureEvent.mType);
-
- assertTrue("Should not have confirmed a single tap yet",
- mMockListener.mLastSingleTap == null);
+ mMockMotionEventDelegate.mMostRecentGestureEvent.mType);
+ assertFalse(mMockMotionEventDelegate.mGestureTypeList.contains(
+ ContentViewGestureHandler.GESTURE_SINGLE_TAP_CONFIRMED));
}
/**
@@ -1807,27 +1175,22 @@ public class ContentViewGestureHandlerTest extends InstrumentationTestCase {
long downTime = SystemClock.uptimeMillis();
long eventTime = SystemClock.uptimeMillis();
- GestureRecordingMotionEventDelegate mockDelegate =
- new GestureRecordingMotionEventDelegate();
- mGestureHandler = new ContentViewGestureHandler(
- getInstrumentation().getTargetContext(), mockDelegate, mMockZoomManager);
-
MotionEvent event = motionEvent(MotionEvent.ACTION_DOWN, downTime, downTime);
assertTrue(mGestureHandler.onTouchEvent(event));
assertEquals(ContentViewGestureHandler.GESTURE_TAP_DOWN,
- mockDelegate.mMostRecentGestureEvent.mType);
+ mMockMotionEventDelegate.mMostRecentGestureEvent.mType);
assertTrue(mGestureHandler.needsTapEndingEventForTesting());
event = motionEvent(MotionEvent.ACTION_UP, downTime, eventTime + 5);
- assertFalse(mGestureHandler.onTouchEvent(event));
+ mGestureHandler.onTouchEvent(event);
assertEquals(ContentViewGestureHandler.GESTURE_SINGLE_TAP_UNCONFIRMED,
- mockDelegate.mMostRecentGestureEvent.mType);
+ mMockMotionEventDelegate.mMostRecentGestureEvent.mType);
assertTrue("An unconfirmed tap does not terminate the tap down.",
mGestureHandler.needsTapEndingEventForTesting());
// A confirmed tap is a tap-ending event.
downTime += 20;
eventTime += 20;
- mockDelegate.mGestureTypeList.clear();
+ mMockMotionEventDelegate.mGestureTypeList.clear();
mGestureHandler.updateShouldDisableDoubleTap(true);
event = MotionEvent.obtain(
downTime, downTime, MotionEvent.ACTION_DOWN,
@@ -1839,14 +1202,14 @@ public class ContentViewGestureHandlerTest extends InstrumentationTestCase {
FAKE_COORD_X, FAKE_COORD_Y, 0);
assertTrue(mGestureHandler.onTouchEvent(event));
assertEquals(ContentViewGestureHandler.GESTURE_SINGLE_TAP_CONFIRMED,
- mockDelegate.mMostRecentGestureEvent.mType);
+ mMockMotionEventDelegate.mMostRecentGestureEvent.mType);
assertFalse("A confirmed single tap should terminate the tap down.",
mGestureHandler.needsTapEndingEventForTesting());
// A double tap gesture is a tap-ending event.
downTime += 20;
eventTime += 20;
- mockDelegate.mGestureTypeList.clear();
+ mMockMotionEventDelegate.mGestureTypeList.clear();
mGestureHandler.updateShouldDisableDoubleTap(false);
event = MotionEvent.obtain(
downTime, downTime, MotionEvent.ACTION_DOWN,
@@ -1866,14 +1229,14 @@ public class ContentViewGestureHandlerTest extends InstrumentationTestCase {
FAKE_COORD_X, FAKE_COORD_Y, 0);
assertTrue(mGestureHandler.onTouchEvent(event));
assertEquals(ContentViewGestureHandler.GESTURE_DOUBLE_TAP,
- mockDelegate.mMostRecentGestureEvent.mType);
+ mMockMotionEventDelegate.mMostRecentGestureEvent.mType);
assertFalse("A double tap should terminate the tap down.",
mGestureHandler.needsTapEndingEventForTesting());
// A double tap drag gesture will trigger a tap-ending event.
downTime += 20;
eventTime += 20;
- mockDelegate.mGestureTypeList.clear();
+ mMockMotionEventDelegate.mGestureTypeList.clear();
mGestureHandler.updateShouldDisableDoubleTap(false);
event = MotionEvent.obtain(
downTime, downTime, MotionEvent.ACTION_DOWN,
@@ -1894,9 +1257,9 @@ public class ContentViewGestureHandlerTest extends InstrumentationTestCase {
assertTrue(mGestureHandler.onTouchEvent(event));
assertFalse("A double tap drag should terminate the tap down.",
mGestureHandler.needsTapEndingEventForTesting());
- assertTrue(mockDelegate.mGestureTypeList.contains(
+ assertTrue(mMockMotionEventDelegate.mGestureTypeList.contains(
ContentViewGestureHandler.GESTURE_SCROLL_START));
- assertTrue(mockDelegate.mGestureTypeList.contains(
+ assertTrue(mMockMotionEventDelegate.mGestureTypeList.contains(
ContentViewGestureHandler.GESTURE_TAP_CANCEL));
event = MotionEvent.obtain(
eventTime + 10, eventTime + 20, MotionEvent.ACTION_UP,
@@ -1907,7 +1270,7 @@ public class ContentViewGestureHandlerTest extends InstrumentationTestCase {
// A scroll event will trigger a tap-ending (cancel) event.
downTime += 25;
eventTime += 25;
- mockDelegate.mGestureTypeList.clear();
+ mMockMotionEventDelegate.mGestureTypeList.clear();
event = MotionEvent.obtain(
downTime, downTime, MotionEvent.ACTION_DOWN,
FAKE_COORD_X, FAKE_COORD_Y, 0);
@@ -1917,9 +1280,9 @@ public class ContentViewGestureHandlerTest extends InstrumentationTestCase {
downTime, eventTime + 5, MotionEvent.ACTION_MOVE,
FAKE_COORD_X, FAKE_COORD_Y + 100, 0);
assertTrue(mGestureHandler.onTouchEvent(event));
- assertTrue(mockDelegate.mGestureTypeList.contains(
+ assertTrue(mMockMotionEventDelegate.mGestureTypeList.contains(
ContentViewGestureHandler.GESTURE_SCROLL_START));
- assertTrue(mockDelegate.mGestureTypeList.contains(
+ assertTrue(mMockMotionEventDelegate.mGestureTypeList.contains(
ContentViewGestureHandler.GESTURE_TAP_CANCEL));
assertFalse("A scroll should terminate the tap down.",
mGestureHandler.needsTapEndingEventForTesting());
@@ -1927,133 +1290,6 @@ public class ContentViewGestureHandlerTest extends InstrumentationTestCase {
}
/**
- * Verify that touch move events are properly coalesced.
- * @throws Exception
- */
- @SmallTest
- @Feature({"Gestures"})
- public void testTouchMoveCoalescing() throws Exception {
- final long downTime = SystemClock.uptimeMillis();
- final long eventTime = SystemClock.uptimeMillis();
-
- mGestureHandler.hasTouchEventHandlers(true);
-
- MotionEvent event = motionEvent(MotionEvent.ACTION_DOWN, downTime, downTime);
- assertTrue(mGestureHandler.onTouchEvent(event));
- mGestureHandler.confirmTouchEvent(ContentViewGestureHandler.INPUT_EVENT_ACK_STATE_CONSUMED);
- assertEquals(TouchPoint.TOUCH_EVENT_TYPE_START, mMockMotionEventDelegate.mLastTouchAction);
-
- event = MotionEvent.obtain(
- downTime, eventTime + 5, MotionEvent.ACTION_MOVE,
- FAKE_COORD_X * 5, FAKE_COORD_Y * 5, 0);
- assertTrue(mGestureHandler.onTouchEvent(event));
- assertFalse("Should not have a pending LONG_PRESS", mLongPressDetector.hasPendingMessage());
- assertEquals("Initial move events should offered to javascript and added to the queue",
- 1, mGestureHandler.getNumberOfPendingMotionEventsForTesting());
- assertEquals(TouchPoint.TOUCH_EVENT_TYPE_MOVE, mMockMotionEventDelegate.mLastTouchAction);
-
- event = MotionEvent.obtain(
- downTime, eventTime + 10, MotionEvent.ACTION_MOVE,
- FAKE_COORD_X * 10, FAKE_COORD_Y * 10, 0);
- assertTrue(mGestureHandler.onTouchEvent(event));
- assertEquals("Move events already sent to javascript should not be coalesced",
- 2, mGestureHandler.getNumberOfPendingMotionEventsForTesting());
-
- event = MotionEvent.obtain(
- downTime, eventTime + 15, MotionEvent.ACTION_MOVE,
- FAKE_COORD_X * 15, FAKE_COORD_Y * 15, 0);
- assertTrue(mGestureHandler.onTouchEvent(event));
- assertEquals("Similar pending move events should be coalesced",
- 2, mGestureHandler.getNumberOfPendingMotionEventsForTesting());
-
- PointerProperties pp1 = new PointerProperties();
- pp1.id = 0;
- pp1.toolType = MotionEvent.TOOL_TYPE_FINGER;
- PointerProperties pp2 = new PointerProperties();
- pp2.id = 1;
- pp2.toolType = MotionEvent.TOOL_TYPE_FINGER;
- PointerProperties[] properties = new PointerProperties[] { pp1, pp2 };
-
- PointerCoords pc1 = new PointerCoords();
- pc1.x = FAKE_COORD_X * 10;
- pc1.y = FAKE_COORD_Y * 10;
- pc1.pressure = 1;
- pc1.size = 1;
- PointerCoords pc2 = new PointerCoords();
- pc2.x = FAKE_COORD_X * 15;
- pc2.y = FAKE_COORD_Y * 15;
- pc2.pressure = 1;
- pc2.size = 1;
- PointerCoords[] coords = new PointerCoords[] { pc1, pc2 };
-
- event = MotionEvent.obtain(
- downTime, eventTime + 20, MotionEvent.ACTION_MOVE,
- 2, properties, coords, 0, 0, 1.0f, 1.0f, 0, 0, 0, 0);
- assertTrue(mGestureHandler.onTouchEvent(event));
- assertEquals("Move events with different pointer counts should not be coalesced",
- 3, mGestureHandler.getNumberOfPendingMotionEventsForTesting());
-
- event = MotionEvent.obtain(
- downTime, eventTime + 25, MotionEvent.ACTION_MOVE,
- 2, properties, coords, 0, 0, 1.0f, 1.0f, 0, 0, 0, 0);
- assertTrue(mGestureHandler.onTouchEvent(event));
- assertEquals("Move events with similar pointer counts should be coalesced",
- 3, mGestureHandler.getNumberOfPendingMotionEventsForTesting());
-
- event = motionEvent(MotionEvent.ACTION_DOWN, downTime, downTime);
- assertTrue(mGestureHandler.onTouchEvent(event));
- assertEquals("Move events should not be coalesced with other events",
- 4, mGestureHandler.getNumberOfPendingMotionEventsForTesting());
- }
-
- /**
- * Verify that synchronous confirmTouchEvent() calls made from the MotionEventDelegate behave
- * properly.
- * @throws Exception
- */
- @SmallTest
- @Feature({"Gestures"})
- public void testSynchronousConfirmTouchEvent() throws Exception {
- final long downTime = SystemClock.uptimeMillis();
- final long eventTime = SystemClock.uptimeMillis();
-
- mGestureHandler.hasTouchEventHandlers(true);
-
- mMockMotionEventDelegate.disableSynchronousConfirmTouchEvent();
-
- // Queue an asynchronously handled event.
- MotionEvent event = motionEvent(MotionEvent.ACTION_DOWN, downTime, downTime);
- assertTrue(mGestureHandler.onTouchEvent(event));
- assertEquals(1, mGestureHandler.getNumberOfPendingMotionEventsForTesting());
-
- // Queue another event; this will remain in the queue until the first event is confirmed.
- event = MotionEvent.obtain(
- downTime, eventTime + 5, MotionEvent.ACTION_MOVE,
- FAKE_COORD_X * 10, FAKE_COORD_Y * 10, 0);
- assertTrue(mGestureHandler.onTouchEvent(event));
- assertEquals(2, mGestureHandler.getNumberOfPendingMotionEventsForTesting());
-
- // Enable synchronous event confirmation upon dispatch.
- mMockMotionEventDelegate.enableSynchronousConfirmTouchEvent(
- mGestureHandler, ContentViewGestureHandler.INPUT_EVENT_ACK_STATE_CONSUMED);
-
- // Confirm the original event; this should dispatch the second event and confirm it
- // synchronously.
- mGestureHandler.confirmTouchEvent(
- ContentViewGestureHandler.INPUT_EVENT_ACK_STATE_CONSUMED);
- assertTrue(mGestureHandler.onTouchEvent(event));
- assertEquals(0, mGestureHandler.getNumberOfPendingMotionEventsForTesting());
- assertEquals(TouchPoint.TOUCH_EVENT_TYPE_MOVE, mMockMotionEventDelegate.mLastTouchAction);
-
- // Adding events to any empty queue will trigger synchronous dispatch and confirmation.
- event = MotionEvent.obtain(
- downTime, eventTime + 10, MotionEvent.ACTION_MOVE,
- FAKE_COORD_X * 5, FAKE_COORD_Y * 5, 0);
- assertTrue(mGestureHandler.onTouchEvent(event));
- assertEquals(0, mGestureHandler.getNumberOfPendingMotionEventsForTesting());
- }
-
- /**
* Verify that no double tap gestures are created if the gesture handler is
* told to disable double tap gesture detection (according to the logic in
* ContentViewCore.onRenderCoordinatesUpdated).
@@ -2065,10 +1301,6 @@ public class ContentViewGestureHandlerTest extends InstrumentationTestCase {
final long downTime = SystemClock.uptimeMillis();
final long eventTime = SystemClock.uptimeMillis();
- GestureRecordingMotionEventDelegate mockDelegate =
- new GestureRecordingMotionEventDelegate();
- mGestureHandler = new ContentViewGestureHandler(
- getInstrumentation().getTargetContext(), mockDelegate, mMockZoomManager);
mGestureHandler.updateShouldDisableDoubleTap(true);
MotionEvent event = MotionEvent.obtain(
@@ -2076,7 +1308,7 @@ public class ContentViewGestureHandlerTest extends InstrumentationTestCase {
FAKE_COORD_X, FAKE_COORD_Y, 0);
assertTrue(mGestureHandler.onTouchEvent(event));
assertEquals("Only GESTURE_TAP_DOWN should have been sent",
- 1, mockDelegate.mGestureTypeList.size());
+ 1, mMockMotionEventDelegate.mGestureTypeList.size());
event = MotionEvent.obtain(
downTime, eventTime + 5, MotionEvent.ACTION_UP,
@@ -2084,10 +1316,10 @@ public class ContentViewGestureHandlerTest extends InstrumentationTestCase {
assertTrue(mGestureHandler.onTouchEvent(event));
assertEquals("A GESTURE_SINGLE_TAP_CONFIRMED event should have been sent",
ContentViewGestureHandler.GESTURE_SINGLE_TAP_CONFIRMED,
- mockDelegate.mMostRecentGestureEvent.mType);
+ mMockMotionEventDelegate.mMostRecentGestureEvent.mType);
assertEquals("Only GESTURE_TAP_DOWN and GESTURE_SINGLE_TAP_CONFIRMED " +
"should have been sent",
- 2, mockDelegate.mGestureTypeList.size());
+ 2, mMockMotionEventDelegate.mGestureTypeList.size());
event = MotionEvent.obtain(
eventTime + 10, eventTime + 10, MotionEvent.ACTION_DOWN,
@@ -2096,7 +1328,7 @@ public class ContentViewGestureHandlerTest extends InstrumentationTestCase {
assertEquals("Only GESTURE_TAP_DOWN, " +
"GESTURE_SINGLE_TAP_CONFIRMED and " +
"GESTURE_TAP_DOWN should have been sent",
- 3, mockDelegate.mGestureTypeList.size());
+ 3, mMockMotionEventDelegate.mGestureTypeList.size());
event = MotionEvent.obtain(
eventTime + 10, eventTime + 15, MotionEvent.ACTION_UP,
@@ -2104,12 +1336,12 @@ public class ContentViewGestureHandlerTest extends InstrumentationTestCase {
assertTrue(mGestureHandler.onTouchEvent(event));
assertEquals("A double tap should not have occurred",
ContentViewGestureHandler.GESTURE_SINGLE_TAP_CONFIRMED,
- mockDelegate.mMostRecentGestureEvent.mType);
+ mMockMotionEventDelegate.mMostRecentGestureEvent.mType);
assertEquals("Only GESTURE_TAP_DOWN, " +
"GESTURE_SINGLE_TAP_CONFIRMED, " +
"GESTURE_TAP_DOWN and " +
"GESTURE_SINGLE_TAP_CONFIRMED should have been sent",
- 4, mockDelegate.mGestureTypeList.size());
+ 4, mMockMotionEventDelegate.mGestureTypeList.size());
}
/**
@@ -2125,10 +1357,6 @@ public class ContentViewGestureHandlerTest extends InstrumentationTestCase {
final long downTime1 = SystemClock.uptimeMillis();
final long downTime2 = downTime1 + 100;
- GestureRecordingMotionEventDelegate mockDelegate =
- new GestureRecordingMotionEventDelegate();
- mGestureHandler = new ContentViewGestureHandler(
- getInstrumentation().getTargetContext(), mockDelegate, mMockZoomManager);
mGestureHandler.updateShouldDisableDoubleTap(true);
MotionEvent event = motionEvent(MotionEvent.ACTION_DOWN, downTime1, downTime1);
@@ -2152,10 +1380,10 @@ public class ContentViewGestureHandlerTest extends InstrumentationTestCase {
// disabled.
assertTrue(mGestureHandler.onTouchEvent(event));
assertTrue("GESTURE_SCROLL_START should have been sent",
- mockDelegate.mGestureTypeList.contains(
+ mMockMotionEventDelegate.mGestureTypeList.contains(
ContentViewGestureHandler.GESTURE_SCROLL_START));
assertFalse("No GESTURE_PINCH_BEGIN should have been sent",
- mockDelegate.mGestureTypeList.contains(
+ mMockMotionEventDelegate.mGestureTypeList.contains(
ContentViewGestureHandler.GESTURE_PINCH_BEGIN));
event = MotionEvent.obtain(
@@ -2164,20 +1392,20 @@ public class ContentViewGestureHandlerTest extends InstrumentationTestCase {
assertTrue(mGestureHandler.onTouchEvent(event));
assertEquals("GESTURE_SCROLL_BY should have been sent",
ContentViewGestureHandler.GESTURE_SCROLL_BY,
- mockDelegate.mMostRecentGestureEvent.mType);
+ mMockMotionEventDelegate.mMostRecentGestureEvent.mType);
assertEquals("GESTURE_SCROLL_BY should have been sent",
event.getEventTime(),
- mockDelegate.mMostRecentGestureEvent.getTimeMs());
+ mMockMotionEventDelegate.mMostRecentGestureEvent.getTimeMs());
assertTrue("No GESTURE_PINCH_BY should have been sent",
ContentViewGestureHandler.GESTURE_PINCH_BY !=
- mockDelegate.mMostRecentGestureEvent.mType);
+ mMockMotionEventDelegate.mMostRecentGestureEvent.mType);
event = MotionEvent.obtain(
downTime2, downTime2 + 15, MotionEvent.ACTION_UP,
FAKE_COORD_X, FAKE_COORD_Y + 200, 0);
assertTrue(mGestureHandler.onTouchEvent(event));
assertFalse("No GESTURE_PINCH_END should have been sent",
- mockDelegate.mGestureTypeList.contains(
+ mMockMotionEventDelegate.mGestureTypeList.contains(
ContentViewGestureHandler.GESTURE_PINCH_END));
}
@@ -2192,13 +1420,6 @@ public class ContentViewGestureHandlerTest extends InstrumentationTestCase {
long downTime1 = SystemClock.uptimeMillis();
long downTime2 = downTime1 + 100;
- GestureRecordingMotionEventDelegate mockDelegate =
- new GestureRecordingMotionEventDelegate();
- mGestureHandler = new ContentViewGestureHandler(
- getInstrumentation().getTargetContext(), mockDelegate, mMockZoomManager);
- mLongPressDetector = new LongPressDetector(
- getInstrumentation().getTargetContext(), mGestureHandler);
-
// Start a double-tap drag gesture.
MotionEvent event = motionEvent(MotionEvent.ACTION_DOWN, downTime1, downTime1);
assertTrue(mGestureHandler.onTouchEvent(event));
@@ -2216,11 +1437,11 @@ public class ContentViewGestureHandlerTest extends InstrumentationTestCase {
FAKE_COORD_X, FAKE_COORD_Y + 100, 0);
assertTrue(mGestureHandler.onTouchEvent(event));
assertTrue("GESTURE_SCROLL_START should have been sent",
- mockDelegate.mGestureTypeList.contains(
+ mMockMotionEventDelegate.mGestureTypeList.contains(
ContentViewGestureHandler.GESTURE_SCROLL_START));
assertEquals("GESTURE_PINCH_BEGIN should have been sent",
ContentViewGestureHandler.GESTURE_PINCH_BEGIN,
- mockDelegate.mMostRecentGestureEvent.mType);
+ mMockMotionEventDelegate.mMostRecentGestureEvent.mType);
// Simulate setting a fixed page scale (or a mobile viewport);
// this should not disrupt the current double-tap gesture.
@@ -2232,25 +1453,25 @@ public class ContentViewGestureHandlerTest extends InstrumentationTestCase {
FAKE_COORD_X, FAKE_COORD_Y + 200, 0);
assertTrue(mGestureHandler.onTouchEvent(event));
assertTrue("GESTURE_SCROLL_BY should have been sent",
- mockDelegate.mGestureTypeList.contains(
+ mMockMotionEventDelegate.mGestureTypeList.contains(
ContentViewGestureHandler.GESTURE_SCROLL_BY));
assertEquals("GESTURE_PINCH_BY should have been sent",
ContentViewGestureHandler.GESTURE_PINCH_BY,
- mockDelegate.mMostRecentGestureEvent.mType);
+ mMockMotionEventDelegate.mMostRecentGestureEvent.mType);
event = MotionEvent.obtain(
downTime2, downTime2 + 15, MotionEvent.ACTION_UP,
FAKE_COORD_X, FAKE_COORD_Y + 200, 0);
assertTrue(mGestureHandler.onTouchEvent(event));
assertTrue("GESTURE_PINCH_END should have been sent",
- mockDelegate.mGestureTypeList.contains(
+ mMockMotionEventDelegate.mGestureTypeList.contains(
ContentViewGestureHandler.GESTURE_PINCH_END));
assertEquals("GESTURE_SCROLL_END should have been sent",
ContentViewGestureHandler.GESTURE_SCROLL_END,
- mockDelegate.mMostRecentGestureEvent.mType);
+ mMockMotionEventDelegate.mMostRecentGestureEvent.mType);
// The double-tap gesture has finished, but the page scale is fixed.
// The same event sequence should not generate any double tap getsures.
- mockDelegate.mGestureTypeList.clear();
+ mMockMotionEventDelegate.mGestureTypeList.clear();
downTime1 += 200;
downTime2 += 200;
@@ -2270,10 +1491,10 @@ public class ContentViewGestureHandlerTest extends InstrumentationTestCase {
FAKE_COORD_X, FAKE_COORD_Y + 100, 0);
assertTrue(mGestureHandler.onTouchEvent(event));
assertTrue("GESTURE_SCROLL_START should have been sent",
- mockDelegate.mGestureTypeList.contains(
+ mMockMotionEventDelegate.mGestureTypeList.contains(
ContentViewGestureHandler.GESTURE_SCROLL_START));
assertFalse("GESTURE_PINCH_BEGIN should not have been sent",
- mockDelegate.mGestureTypeList.contains(
+ mMockMotionEventDelegate.mGestureTypeList.contains(
ContentViewGestureHandler.GESTURE_PINCH_BEGIN));
// Double tap zoom updates should not be sent.
@@ -2283,284 +1504,115 @@ public class ContentViewGestureHandlerTest extends InstrumentationTestCase {
FAKE_COORD_X, FAKE_COORD_Y + 200, 0);
assertTrue(mGestureHandler.onTouchEvent(event));
assertTrue("GESTURE_SCROLL_BY should have been sent",
- mockDelegate.mGestureTypeList.contains(
+ mMockMotionEventDelegate.mGestureTypeList.contains(
ContentViewGestureHandler.GESTURE_SCROLL_BY));
assertFalse("GESTURE_PINCH_BY should not have been sent",
- mockDelegate.mGestureTypeList.contains(
+ mMockMotionEventDelegate.mGestureTypeList.contains(
ContentViewGestureHandler.GESTURE_PINCH_BY));
event = MotionEvent.obtain(
downTime2, downTime2 + 15, MotionEvent.ACTION_UP,
FAKE_COORD_X, FAKE_COORD_Y + 200, 0);
assertTrue(mGestureHandler.onTouchEvent(event));
assertFalse("GESTURE_PINCH_END should not have been sent",
- mockDelegate.mGestureTypeList.contains(
+ mMockMotionEventDelegate.mGestureTypeList.contains(
ContentViewGestureHandler.GESTURE_PINCH_END));
}
/**
- * Verify that a secondary pointer press with no consumer does not interfere
- * with Javascript touch handling.
- *
+ * Verify that pinch zoom sends the proper event sequence.
* @throws Exception
*/
@SmallTest
@Feature({"Gestures"})
- public void testSecondaryPointerWithNoConsumer() throws Exception {
+ public void testPinchZoom() throws Exception {
final long downTime = SystemClock.uptimeMillis();
final long eventTime = SystemClock.uptimeMillis();
+ final Context context = getInstrumentation().getTargetContext();
+ final int scaledTouchSlop = ViewConfiguration.get(context).getScaledTouchSlop();
- mGestureHandler.hasTouchEventHandlers(true);
-
- // Queue a primary pointer press, a secondary pointer press and release,
- // and a primary pointer move.
- MotionEvent event = motionEvent(MotionEvent.ACTION_DOWN, downTime, downTime);
- assertTrue(mGestureHandler.onTouchEvent(event));
- assertEquals(1, mGestureHandler.getNumberOfPendingMotionEventsForTesting());
-
- event = motionEvent(MotionEvent.ACTION_POINTER_DOWN, downTime, eventTime);
- assertTrue(mGestureHandler.onTouchEvent(event));
- assertEquals(2, mGestureHandler.getNumberOfPendingMotionEventsForTesting());
-
- event = motionEvent(MotionEvent.ACTION_POINTER_UP, downTime, eventTime + 10);
- assertTrue(mGestureHandler.onTouchEvent(event));
- assertEquals(3, mGestureHandler.getNumberOfPendingMotionEventsForTesting());
-
- event = MotionEvent.obtain(
- downTime, eventTime + 15, MotionEvent.ACTION_MOVE,
- FAKE_COORD_X * 5, FAKE_COORD_Y * 5, 0);
- assertTrue(mGestureHandler.onTouchEvent(event));
- assertEquals(4, mGestureHandler.getNumberOfPendingMotionEventsForTesting());
-
- // Simulate preventDefault from Javascript, forcing all touch events to Javascript
- // for the current sequence.
- mGestureHandler.confirmTouchEvent(
- ContentViewGestureHandler.INPUT_EVENT_ACK_STATE_CONSUMED);
- assertEquals(3, mGestureHandler.getNumberOfPendingMotionEventsForTesting());
-
- mGestureHandler.confirmTouchEvent(
- ContentViewGestureHandler.INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS);
- assertEquals("Even if the secondary pointer has no consumer, continue sending events",
- 2, mGestureHandler.getNumberOfPendingMotionEventsForTesting());
-
- mGestureHandler.confirmTouchEvent(
- ContentViewGestureHandler.INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS);
- assertEquals("Even if the secondary pointer has no consumer, continue sending events",
- 1, mGestureHandler.getNumberOfPendingMotionEventsForTesting());
-
- mGestureHandler.confirmTouchEvent(
- ContentViewGestureHandler.INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
- assertEquals(0, mGestureHandler.getNumberOfPendingMotionEventsForTesting());
-
- assertEquals("No gestures should result from the Javascript-consumed sequence",
- 0, mMockMotionEventDelegate.mTotalSentGestureCount);
- }
-
- /**
- * Verify that multiple touch sequences in the queue are handled properly when
- * the Javascript response is different for each.
- *
- * @throws Exception
- */
- @SmallTest
- @Feature({"Gestures"})
- public void testMultiplyEnqueuedTouches() throws Exception {
- final long downTime = SystemClock.uptimeMillis();
- final long eventTime = SystemClock.uptimeMillis();
+ mGestureHandler.updateMultiTouchSupport(true);
- mGestureHandler.hasTouchEventHandlers(true);
- mGestureHandler.updateDoubleTapSupport(false);
+ final int secondaryCoordX = FAKE_COORD_X + 20 * scaledTouchSlop;
+ final int secondaryCoordY = FAKE_COORD_Y + 20 * scaledTouchSlop;
- // Queue a tap sequence.
- MotionEvent event = motionEvent(MotionEvent.ACTION_DOWN, downTime, downTime);
- assertTrue(mGestureHandler.onTouchEvent(event));
- assertEquals(1, mGestureHandler.getNumberOfPendingMotionEventsForTesting());
+ PointerProperties pp0 = new PointerProperties();
+ pp0.id = 0;
+ pp0.toolType = MotionEvent.TOOL_TYPE_FINGER;
+ PointerProperties pp1 = new PointerProperties();
+ pp1.id = 1;
+ pp1.toolType = MotionEvent.TOOL_TYPE_FINGER;
- event = motionEvent(MotionEvent.ACTION_UP, downTime, eventTime + 5);
- assertTrue(mGestureHandler.onTouchEvent(event));
- assertEquals(2, mGestureHandler.getNumberOfPendingMotionEventsForTesting());
+ PointerCoords pc0 = new PointerCoords();
+ pc0.x = FAKE_COORD_X;
+ pc0.y = FAKE_COORD_Y;
+ pc0.pressure = 1;
+ pc0.size = 1;
+ PointerCoords pc1 = new PointerCoords();
+ pc1.x = secondaryCoordX;
+ pc1.y = secondaryCoordY;
+ pc1.pressure = 1;
+ pc1.size = 1;
- // Queue a scroll sequence.
- event = motionEvent(MotionEvent.ACTION_DOWN, downTime + 10, downTime + 10);
+ MotionEvent event = MotionEvent.obtain(
+ eventTime, eventTime, MotionEvent.ACTION_DOWN,
+ 1, new PointerProperties[] { pp0 }, new PointerCoords[] { pc0 },
+ 0, 0, 1.0f, 1.0f, 0, 0, InputDevice.SOURCE_CLASS_POINTER, 0);
assertTrue(mGestureHandler.onTouchEvent(event));
- assertEquals(3, mGestureHandler.getNumberOfPendingMotionEventsForTesting());
+ assertEquals(ContentViewGestureHandler.GESTURE_TAP_DOWN,
+ mMockMotionEventDelegate.mMostRecentGestureEvent.mType);
+ assertEquals("Only GESTURE_TAP_DOWN should have been sent",
+ 1, mMockMotionEventDelegate.mGestureTypeList.size());
event = MotionEvent.obtain(
- downTime + 10, eventTime + 15, MotionEvent.ACTION_MOVE,
- FAKE_COORD_X * 5, FAKE_COORD_Y * 5, 0);
- assertTrue(mGestureHandler.onTouchEvent(event));
- assertFalse(mGestureHandler.isNativeScrolling());
- assertEquals(4, mGestureHandler.getNumberOfPendingMotionEventsForTesting());
-
- event = motionEvent(MotionEvent.ACTION_UP, downTime + 10, downTime + 20);
- assertTrue(mGestureHandler.onTouchEvent(event));
- assertEquals(5, mGestureHandler.getNumberOfPendingMotionEventsForTesting());
-
- // Consume the first gesture.
- mGestureHandler.confirmTouchEvent(
- ContentViewGestureHandler.INPUT_EVENT_ACK_STATE_CONSUMED);
- assertEquals(4, mGestureHandler.getNumberOfPendingMotionEventsForTesting());
-
- mGestureHandler.confirmTouchEvent(
- ContentViewGestureHandler.INPUT_EVENT_ACK_STATE_CONSUMED);
- assertEquals(3, mGestureHandler.getNumberOfPendingMotionEventsForTesting());
-
- // Don't consume the second gesture; it should be fed to the gesture detector.
- mGestureHandler.confirmTouchEvent(
- ContentViewGestureHandler.INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
- assertEquals(2, mGestureHandler.getNumberOfPendingMotionEventsForTesting());
- assertEquals("The down touch event should have been sent to the gesture detector",
- MotionEvent.ACTION_DOWN, mMockGestureDetector.mLastEvent.getActionMasked());
- assertFalse(mGestureHandler.isNativeScrolling());
-
- mGestureHandler.confirmTouchEvent(
- ContentViewGestureHandler.INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
- assertEquals("The move touch event should have been sent to the gesture detector",
- MotionEvent.ACTION_MOVE, mMockGestureDetector.mLastEvent.getActionMasked());
- }
-
- /**
- * Verify that only complete gestures are forwarded to Javascript if we receive
- * a touch handler notification.
- * @throws Exception
- */
- @SmallTest
- @Feature({"Gestures"})
- public void testOnlyCompleteGesturesForwardedToTouchHandler() throws Exception {
- final long downTime = SystemClock.uptimeMillis();
- final long eventTime = SystemClock.uptimeMillis();
-
- mGestureHandler.hasTouchEventHandlers(false);
-
- MotionEvent event = motionEvent(MotionEvent.ACTION_DOWN, downTime, downTime);
+ eventTime, eventTime, MotionEvent.ACTION_POINTER_DOWN,
+ 2, new PointerProperties[] { pp1, pp0 }, new PointerCoords[] { pc1, pc0 },
+ 0, 0, 1.0f, 1.0f, 0, 0, InputDevice.SOURCE_CLASS_POINTER, 0);
mGestureHandler.onTouchEvent(event);
- assertEquals("Initial down events should not be sent to Javascript without a touch handler",
- 0, mGestureHandler.getNumberOfPendingMotionEventsForTesting());
- assertTrue("Should have a pending gesture", mMockGestureDetector.mLastEvent != null);
- mMockGestureDetector.mLastEvent = null;
+ assertEquals("No additional gestures should be triggered on a secondary pointer press",
+ 1, mMockMotionEventDelegate.mGestureTypeList.size());
- mGestureHandler.hasTouchEventHandlers(true);
+ pc1.x = secondaryCoordX + 5 * scaledTouchSlop;
+ pc1.y = secondaryCoordY + 5 * scaledTouchSlop;
event = MotionEvent.obtain(
- downTime, eventTime + 5, MotionEvent.ACTION_MOVE,
- FAKE_COORD_X * 5, FAKE_COORD_Y * 5, 0);
- mGestureHandler.onTouchEvent(event);
- assertEquals("A move event should only be offered to javascript if the down was offered",
- 0, mGestureHandler.getNumberOfPendingMotionEventsForTesting());
- assertTrue("Should have a pending gesture", mMockGestureDetector.mLastEvent != null);
-
- event = motionEvent(MotionEvent.ACTION_POINTER_DOWN, downTime, eventTime + 10);
- mGestureHandler.onTouchEvent(event);
- assertEquals("A pointer event should only be offered to Javascript if the down was offered",
- 0, mGestureHandler.getNumberOfPendingMotionEventsForTesting());
-
- // Ensure that redundant notifications have no effect.
- mGestureHandler.hasTouchEventHandlers(true);
-
- event = motionEvent(MotionEvent.ACTION_POINTER_UP, downTime, eventTime + 15);
- mGestureHandler.onTouchEvent(event);
- assertEquals("A pointer event should only be offered to Javascript if the down was offered",
- 0, mGestureHandler.getNumberOfPendingMotionEventsForTesting());
-
- event = motionEvent(MotionEvent.ACTION_UP, downTime, eventTime + 20);
- mGestureHandler.onTouchEvent(event);
- assertEquals("A pointer event should only be offered to Javascript if the down was offered",
- 0, mGestureHandler.getNumberOfPendingMotionEventsForTesting());
-
- event = motionEvent(MotionEvent.ACTION_DOWN, downTime + 25, downTime + 25);
- mGestureHandler.onTouchEvent(event);
- assertEquals("A down event should be offered to Javascript with a registered touch handler",
- 1, mGestureHandler.getNumberOfPendingMotionEventsForTesting());
- }
-
- /**
- * Verify that no timeout-based gestures are triggered after a touch event
- * is consumed. In particular, LONG_PRESS and SHOW_PRESS should not fire
- * if TouchStart went unconsumed, but subsequent TouchMoves are consumed.
- *
- * @throws Exception
- */
- @SmallTest
- @Feature({"Gestures"})
- public void testNoTimeoutGestureAfterTouchConsumed() throws Exception {
- getInstrumentation().runOnMainSync(new Runnable() {
- @Override
- public void run() {
- setUp();
-
- final long downTime = SystemClock.uptimeMillis();
- final long eventTime = SystemClock.uptimeMillis();
-
- mGestureHandler.hasTouchEventHandlers(true);
-
- MotionEvent event = motionEvent(MotionEvent.ACTION_DOWN, downTime, eventTime);
- assertTrue(mGestureHandler.onTouchEvent(event));
- mGestureHandler.confirmTouchEvent(
- ContentViewGestureHandler.INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
- assertTrue("Should have a pending LONG_PRESS",
- mLongPressDetector.hasPendingMessage());
-
- event = MotionEvent.obtain(
- downTime, eventTime + 10, MotionEvent.ACTION_MOVE,
- FAKE_COORD_X, FAKE_COORD_Y + 200, 0);
- assertTrue(mGestureHandler.onTouchEvent(event));
- mGestureHandler.confirmTouchEvent(
- ContentViewGestureHandler.INPUT_EVENT_ACK_STATE_CONSUMED);
- assertFalse("Should not have a pending LONG_PRESS",
- mLongPressDetector.hasPendingMessage());
- }
- });
- assertFalse(mMockListener.mShowPressCalled.await(
- ScalableTimeout.ScaleTimeout(ViewConfiguration.getTapTimeout() + 10),
- TimeUnit.MILLISECONDS));
- assertFalse(mMockListener.mLongPressCalled.await(
- ScalableTimeout.ScaleTimeout(ViewConfiguration.getLongPressTimeout() + 10),
- TimeUnit.MILLISECONDS));
- }
-
- /**
- * Verify that a TAP_DOWN will be followed by a TAP_CANCEL if the first
- * touch is unconsumed, but the subsequent touch is consumed.
- *
- * @throws Exception
- */
- @SmallTest
- @Feature({"Gestures"})
- public void testTapCancelledAfterTouchConsumed() throws Exception {
- final long downTime = SystemClock.uptimeMillis();
- final long eventTime = SystemClock.uptimeMillis();
-
- GestureRecordingMotionEventDelegate mockDelegate =
- new GestureRecordingMotionEventDelegate();
- mGestureHandler = new ContentViewGestureHandler(
- getInstrumentation().getTargetContext(), mockDelegate, mMockZoomManager);
- mGestureHandler.hasTouchEventHandlers(true);
-
- MotionEvent event = motionEvent(MotionEvent.ACTION_DOWN, downTime, downTime);
+ eventTime, eventTime + 10, MotionEvent.ACTION_MOVE,
+ 2, new PointerProperties[] { pp1, pp0 }, new PointerCoords[] { pc1, pc0 },
+ 0, 0, 1.0f, 1.0f, 0, 0, InputDevice.SOURCE_CLASS_POINTER, 0);
assertTrue(mGestureHandler.onTouchEvent(event));
- mGestureHandler.confirmTouchEvent(
- ContentViewGestureHandler.INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
- assertEquals("A TAP_DOWN gesture should have been sent",
- ContentViewGestureHandler.GESTURE_TAP_DOWN,
- mockDelegate.mMostRecentGestureEvent.mType);
+ assertEquals("Only GESTURE_TAP_DOWN, " +
+ "GESTURE_TAP_CANCEL, " +
+ "GESTURE_SCROLL_BEGIN, " +
+ "GESTURE_PINCH_BEGIN, " +
+ "GESTURE_SCROLL_BY, and " +
+ "GESTURE_PINCH_BY should have been sent",
+ 6, mMockMotionEventDelegate.mGestureTypeList.size());
+ assertTrue(mMockMotionEventDelegate.mGestureTypeList.contains(
+ ContentViewGestureHandler.GESTURE_PINCH_BEGIN));
+ assertTrue(mMockMotionEventDelegate.mGestureTypeList.contains(
+ ContentViewGestureHandler.GESTURE_SCROLL_START));
+ assertTrue(mMockMotionEventDelegate.mGestureTypeList.contains(
+ ContentViewGestureHandler.GESTURE_PINCH_BY));
+ assertTrue(mMockMotionEventDelegate.mGestureTypeList.contains(
+ ContentViewGestureHandler.GESTURE_SCROLL_BY));
event = MotionEvent.obtain(
- downTime, eventTime + 10, MotionEvent.ACTION_MOVE,
- FAKE_COORD_X, FAKE_COORD_Y + 200, 0);
+ eventTime, eventTime + 10, MotionEvent.ACTION_POINTER_UP,
+ 2, new PointerProperties[] { pp1, pp0 }, new PointerCoords[] { pc1, pc0 },
+ 0, 0, 1.0f, 1.0f, 0, 0, InputDevice.SOURCE_CLASS_POINTER, 0);
assertTrue(mGestureHandler.onTouchEvent(event));
- mGestureHandler.confirmTouchEvent(
- ContentViewGestureHandler.INPUT_EVENT_ACK_STATE_CONSUMED);
- assertEquals("A TAP_CANCEL gesture should have been sent",
- ContentViewGestureHandler.GESTURE_TAP_CANCEL,
- mockDelegate.mMostRecentGestureEvent.mType);
+ assertEquals(ContentViewGestureHandler.GESTURE_PINCH_END,
+ mMockMotionEventDelegate.mMostRecentGestureEvent.mType);
+ assertEquals("Only GESTURE_PINCH_END should have been sent",
+ 7, mMockMotionEventDelegate.mGestureTypeList.size());
event = MotionEvent.obtain(
- downTime, eventTime + 15, MotionEvent.ACTION_MOVE,
- FAKE_COORD_X, FAKE_COORD_Y + 400, 0);
- assertTrue(mGestureHandler.onTouchEvent(event));
- mGestureHandler.confirmTouchEvent(
- ContentViewGestureHandler.INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
- assertEquals("No further gestures should be sent",
- ContentViewGestureHandler.GESTURE_TAP_CANCEL,
- mockDelegate.mMostRecentGestureEvent.mType);
+ eventTime, eventTime, MotionEvent.ACTION_UP,
+ 1, new PointerProperties[] { pp0 }, new PointerCoords[] { pc0 },
+ 0, 0, 1.0f, 1.0f, 0, 0, InputDevice.SOURCE_CLASS_POINTER, 0);
+ mGestureHandler.onTouchEvent(event);
+ assertEquals(ContentViewGestureHandler.GESTURE_SCROLL_END,
+ mMockMotionEventDelegate.mMostRecentGestureEvent.mType);
+ assertEquals("Only GESTURE_SCROLL_END should have been sent",
+ 8, mMockMotionEventDelegate.mGestureTypeList.size());
}
}

Powered by Google App Engine
This is Rietveld 408576698