Loading core/java/android/widget/EditorTouchState.java +7 −0 Original line number Original line Diff line number Diff line Loading @@ -173,6 +173,13 @@ public class EditorTouchState { mIsDragCloseToVertical = (4 * deltaXSquared) <= distanceSquared; mIsDragCloseToVertical = (4 * deltaXSquared) <= distanceSquared; } } } } } else if (action == MotionEvent.ACTION_CANCEL) { mLastDownMillis = 0; mLastUpMillis = 0; mMultiTapStatus = MultiTapStatus.NONE; mMultiTapInSameArea = false; mMovedEnoughForDrag = false; mIsDragCloseToVertical = false; } } } } Loading core/tests/coretests/src/android/widget/EditorTouchStateTest.java +171 −30 Original line number Original line Diff line number Diff line Loading @@ -47,25 +47,33 @@ public class EditorTouchStateTest { mConfig = new ViewConfiguration(); mConfig = new ViewConfiguration(); } } @Test public void testIsDistanceWithin() throws Exception { assertTrue(EditorTouchState.isDistanceWithin(0, 0, 0, 0, 8)); assertTrue(EditorTouchState.isDistanceWithin(3, 9, 5, 11, 8)); assertTrue(EditorTouchState.isDistanceWithin(5, 11, 3, 9, 8)); assertFalse(EditorTouchState.isDistanceWithin(5, 10, 5, 20, 8)); } @Test @Test public void testUpdate_singleTap() throws Exception { public void testUpdate_singleTap() throws Exception { // Simulate an ACTION_DOWN event. // Simulate an ACTION_DOWN event. long event1Time = 1000; long event1Time = 1000; MotionEvent event1 = downEvent(event1Time, event1Time, 20f, 30f); MotionEvent event1 = downEvent(event1Time, event1Time, 20f, 30f); mTouchState.update(event1, mConfig); mTouchState.update(event1, mConfig); assertSingleTap(mTouchState, 20f, 30f, 0, 0, false); assertSingleTap(mTouchState, 20f, 30f, 0, 0); // Simulate an ACTION_UP event. // Simulate an ACTION_UP event. long event2Time = 1001; long event2Time = 1001; MotionEvent event2 = upEvent(event1Time, event2Time, 20f, 30f); MotionEvent event2 = upEvent(event1Time, event2Time, 20f, 30f); mTouchState.update(event2, mConfig); mTouchState.update(event2, mConfig); assertSingleTap(mTouchState, 20f, 30f, 20f, 30f, false); assertSingleTap(mTouchState, 20f, 30f, 20f, 30f); // Generate an ACTION_DOWN event whose time is after the double-tap timeout. // Generate an ACTION_DOWN event whose time is after the double-tap timeout. long event3Time = event2Time + ViewConfiguration.getDoubleTapTimeout() + 1; long event3Time = event2Time + ViewConfiguration.getDoubleTapTimeout() + 1; MotionEvent event3 = downEvent(event3Time, event3Time, 22f, 33f); MotionEvent event3 = downEvent(event3Time, event3Time, 22f, 33f); mTouchState.update(event3, mConfig); mTouchState.update(event3, mConfig); assertSingleTap(mTouchState, 22f, 33f, 20f, 30f, false); assertSingleTap(mTouchState, 22f, 33f, 20f, 30f); } } @Test @Test Loading @@ -74,13 +82,13 @@ public class EditorTouchStateTest { long event1Time = 1000; long event1Time = 1000; MotionEvent event1 = downEvent(event1Time, event1Time, 20f, 30f); MotionEvent event1 = downEvent(event1Time, event1Time, 20f, 30f); mTouchState.update(event1, mConfig); mTouchState.update(event1, mConfig); assertSingleTap(mTouchState, 20f, 30f, 0, 0, false); assertSingleTap(mTouchState, 20f, 30f, 0, 0); // Simulate an ACTION_UP event. // Simulate an ACTION_UP event. long event2Time = 1001; long event2Time = 1001; MotionEvent event2 = upEvent(event1Time, event2Time, 20f, 30f); MotionEvent event2 = upEvent(event1Time, event2Time, 20f, 30f); mTouchState.update(event2, mConfig); mTouchState.update(event2, mConfig); assertSingleTap(mTouchState, 20f, 30f, 20f, 30f, false); assertSingleTap(mTouchState, 20f, 30f, 20f, 30f); // Generate an ACTION_DOWN event whose time is within the double-tap timeout. // Generate an ACTION_DOWN event whose time is within the double-tap timeout. long event3Time = 1002; long event3Time = 1002; Loading @@ -96,13 +104,13 @@ public class EditorTouchStateTest { long event1Time = 1000; long event1Time = 1000; MotionEvent event1 = downEvent(event1Time, event1Time, 20f, 30f); MotionEvent event1 = downEvent(event1Time, event1Time, 20f, 30f); mTouchState.update(event1, mConfig); mTouchState.update(event1, mConfig); assertSingleTap(mTouchState, 20f, 30f, 0, 0, false); assertSingleTap(mTouchState, 20f, 30f, 0, 0); // Simulate an ACTION_UP event. // Simulate an ACTION_UP event. long event2Time = 1001; long event2Time = 1001; MotionEvent event2 = upEvent(event1Time, event2Time, 20f, 30f); MotionEvent event2 = upEvent(event1Time, event2Time, 20f, 30f); mTouchState.update(event2, mConfig); mTouchState.update(event2, mConfig); assertSingleTap(mTouchState, 20f, 30f, 20f, 30f, false); assertSingleTap(mTouchState, 20f, 30f, 20f, 30f); // Generate an ACTION_DOWN event whose time is within the double-tap timeout. // Generate an ACTION_DOWN event whose time is within the double-tap timeout. long event3Time = 1002; long event3Time = 1002; Loading @@ -125,13 +133,13 @@ public class EditorTouchStateTest { long event1Time = 1000; long event1Time = 1000; MotionEvent event1 = downEvent(event1Time, event1Time, 20f, 30f); MotionEvent event1 = downEvent(event1Time, event1Time, 20f, 30f); mTouchState.update(event1, mConfig); mTouchState.update(event1, mConfig); assertSingleTap(mTouchState, 20f, 30f, 0, 0, false); assertSingleTap(mTouchState, 20f, 30f, 0, 0); // Simulate an ACTION_UP event with a delay that's longer than the double-tap timeout. // Simulate an ACTION_UP event with a delay that's longer than the double-tap timeout. long event2Time = 1000 + ViewConfiguration.getDoubleTapTimeout() + 1; long event2Time = 1000 + ViewConfiguration.getDoubleTapTimeout() + 1; MotionEvent event2 = upEvent(event1Time, event2Time, 20f, 30f); MotionEvent event2 = upEvent(event1Time, event2Time, 20f, 30f); mTouchState.update(event2, mConfig); mTouchState.update(event2, mConfig); assertSingleTap(mTouchState, 20f, 30f, 20f, 30f, false); assertSingleTap(mTouchState, 20f, 30f, 20f, 30f); // Generate an ACTION_DOWN event whose time is within the double-tap timeout when // Generate an ACTION_DOWN event whose time is within the double-tap timeout when // calculated from the last ACTION_UP event time. Even though the time between the last up // calculated from the last ACTION_UP event time. Even though the time between the last up Loading @@ -140,7 +148,7 @@ public class EditorTouchStateTest { long event3Time = event2Time + 1; long event3Time = event2Time + 1; MotionEvent event3 = downEvent(event3Time, event3Time, 22f, 33f); MotionEvent event3 = downEvent(event3Time, event3Time, 22f, 33f); mTouchState.update(event3, mConfig); mTouchState.update(event3, mConfig); assertSingleTap(mTouchState, 22f, 33f, 20f, 30f, false); assertSingleTap(mTouchState, 22f, 33f, 20f, 30f); } } @Test @Test Loading @@ -149,19 +157,19 @@ public class EditorTouchStateTest { long event1Time = 1000; long event1Time = 1000; MotionEvent event1 = downEvent(event1Time, event1Time, 20f, 30f); MotionEvent event1 = downEvent(event1Time, event1Time, 20f, 30f); mTouchState.update(event1, mConfig); mTouchState.update(event1, mConfig); assertSingleTap(mTouchState, 20f, 30f, 0, 0, false); assertSingleTap(mTouchState, 20f, 30f, 0, 0); // Simulate an ACTION_MOVE event. // Simulate an ACTION_MOVE event. long event2Time = 1001; long event2Time = 1001; MotionEvent event2 = moveEvent(event1Time, event2Time, 200f, 31f); MotionEvent event2 = moveEvent(event1Time, event2Time, 200f, 31f); mTouchState.update(event2, mConfig); mTouchState.update(event2, mConfig); assertSingleTap(mTouchState, 20f, 30f, 0, 0, true); assertDrag(mTouchState, 20f, 30f, 0, 0, false); // Simulate an ACTION_UP event with a delay that's longer than the double-tap timeout. // Simulate an ACTION_UP event with a delay that's longer than the double-tap timeout. long event3Time = 5000; long event3Time = 5000; MotionEvent event3 = upEvent(event1Time, event3Time, 200f, 31f); MotionEvent event3 = upEvent(event1Time, event3Time, 200f, 31f); mTouchState.update(event3, mConfig); mTouchState.update(event3, mConfig); assertSingleTap(mTouchState, 20f, 30f, 200f, 31f, false); assertSingleTap(mTouchState, 20f, 30f, 200f, 31f); // Generate an ACTION_DOWN event whose time is within the double-tap timeout when // Generate an ACTION_DOWN event whose time is within the double-tap timeout when // calculated from the last ACTION_UP event time. Even though the time between the last up // calculated from the last ACTION_UP event time. Even though the time between the last up Loading @@ -170,7 +178,7 @@ public class EditorTouchStateTest { long event4Time = event3Time + 1; long event4Time = event3Time + 1; MotionEvent event4 = downEvent(event4Time, event4Time, 200f, 31f); MotionEvent event4 = downEvent(event4Time, event4Time, 200f, 31f); mTouchState.update(event4, mConfig); mTouchState.update(event4, mConfig); assertSingleTap(mTouchState, 200f, 31f, 200f, 31f, false); assertSingleTap(mTouchState, 200f, 31f, 200f, 31f); } } @Test @Test Loading @@ -180,14 +188,14 @@ public class EditorTouchStateTest { MotionEvent event1 = downEvent(event1Time, event1Time, 20f, 30f); MotionEvent event1 = downEvent(event1Time, event1Time, 20f, 30f); event1.setSource(InputDevice.SOURCE_MOUSE); event1.setSource(InputDevice.SOURCE_MOUSE); mTouchState.update(event1, mConfig); mTouchState.update(event1, mConfig); assertSingleTap(mTouchState, 20f, 30f, 0, 0, false); assertSingleTap(mTouchState, 20f, 30f, 0, 0); // Simulate an ACTION_UP event. // Simulate an ACTION_UP event. long event2Time = 1001; long event2Time = 1001; MotionEvent event2 = upEvent(event1Time, event2Time, 20f, 30f); MotionEvent event2 = upEvent(event1Time, event2Time, 20f, 30f); event2.setSource(InputDevice.SOURCE_MOUSE); event2.setSource(InputDevice.SOURCE_MOUSE); mTouchState.update(event2, mConfig); mTouchState.update(event2, mConfig); assertSingleTap(mTouchState, 20f, 30f, 20f, 30f, false); assertSingleTap(mTouchState, 20f, 30f, 20f, 30f); // Generate a second ACTION_DOWN event whose time is within the double-tap timeout. // Generate a second ACTION_DOWN event whose time is within the double-tap timeout. long event3Time = 1002; long event3Time = 1002; Loading Loading @@ -220,13 +228,13 @@ public class EditorTouchStateTest { long event1Time = 1000; long event1Time = 1000; MotionEvent event1 = downEvent(event1Time, event1Time, 20f, 30f); MotionEvent event1 = downEvent(event1Time, event1Time, 20f, 30f); mTouchState.update(event1, mConfig); mTouchState.update(event1, mConfig); assertSingleTap(mTouchState, 20f, 30f, 0, 0, false); assertSingleTap(mTouchState, 20f, 30f, 0, 0); // Simulate an ACTION_UP event. // Simulate an ACTION_UP event. long event2Time = 1001; long event2Time = 1001; MotionEvent event2 = upEvent(event1Time, event2Time, 20f, 30f); MotionEvent event2 = upEvent(event1Time, event2Time, 20f, 30f); mTouchState.update(event2, mConfig); mTouchState.update(event2, mConfig); assertSingleTap(mTouchState, 20f, 30f, 20f, 30f, false); assertSingleTap(mTouchState, 20f, 30f, 20f, 30f); // Generate a second ACTION_DOWN event whose time is within the double-tap timeout. // Generate a second ACTION_DOWN event whose time is within the double-tap timeout. long event3Time = 1002; long event3Time = 1002; Loading @@ -246,7 +254,7 @@ public class EditorTouchStateTest { long event5Time = 1004; long event5Time = 1004; MotionEvent event5 = downEvent(event5Time, event5Time, 22f, 32f); MotionEvent event5 = downEvent(event5Time, event5Time, 22f, 32f); mTouchState.update(event5, mConfig); mTouchState.update(event5, mConfig); assertSingleTap(mTouchState, 22f, 32f, 21f, 31f, false); assertSingleTap(mTouchState, 22f, 32f, 21f, 31f); } } @Test @Test Loading @@ -255,13 +263,13 @@ public class EditorTouchStateTest { long event1Time = 1000; long event1Time = 1000; MotionEvent event1 = downEvent(event1Time, event1Time, 20f, 30f); MotionEvent event1 = downEvent(event1Time, event1Time, 20f, 30f); mTouchState.update(event1, mConfig); mTouchState.update(event1, mConfig); assertSingleTap(mTouchState, 20f, 30f, 0, 0, false); assertSingleTap(mTouchState, 20f, 30f, 0, 0); // Simulate an ACTION_MOVE event whose location is not far enough to start a drag. // Simulate an ACTION_MOVE event whose location is not far enough to start a drag. long event2Time = 1001; long event2Time = 1001; MotionEvent event2 = moveEvent(event1Time, event2Time, 21f, 30f); MotionEvent event2 = moveEvent(event1Time, event2Time, 21f, 30f); mTouchState.update(event2, mConfig); mTouchState.update(event2, mConfig); assertSingleTap(mTouchState, 20f, 30f, 0, 0, false); assertSingleTap(mTouchState, 20f, 30f, 0, 0); // Simulate another ACTION_MOVE event whose location is far enough to start a drag. // Simulate another ACTION_MOVE event whose location is far enough to start a drag. int touchSlop = mConfig.getScaledTouchSlop(); int touchSlop = mConfig.getScaledTouchSlop(); Loading @@ -270,21 +278,135 @@ public class EditorTouchStateTest { long event3Time = 1002; long event3Time = 1002; MotionEvent event3 = moveEvent(event3Time, event3Time, newX, newY); MotionEvent event3 = moveEvent(event3Time, event3Time, newX, newY); mTouchState.update(event3, mConfig); mTouchState.update(event3, mConfig); assertSingleTap(mTouchState, 20f, 30f, 0, 0, true); assertDrag(mTouchState, 20f, 30f, 0, 0, false); // Simulate an ACTION_UP event. // Simulate an ACTION_UP event. long event4Time = 1003; long event4Time = 1003; MotionEvent event4 = upEvent(event3Time, event4Time, 200f, 300f); MotionEvent event4 = upEvent(event3Time, event4Time, 200f, 300f); mTouchState.update(event4, mConfig); mTouchState.update(event4, mConfig); assertSingleTap(mTouchState, 20f, 30f, 200f, 300f, false); assertSingleTap(mTouchState, 20f, 30f, 200f, 300f); } } @Test @Test public void testIsDistanceWithin() throws Exception { public void testUpdate_drag_startsCloseToVerticalThenHorizontal() throws Exception { assertTrue(EditorTouchState.isDistanceWithin(0, 0, 0, 0, 8)); // Simulate an ACTION_DOWN event. assertTrue(EditorTouchState.isDistanceWithin(3, 9, 5, 11, 8)); long event1Time = 1001; assertTrue(EditorTouchState.isDistanceWithin(5, 11, 3, 9, 8)); MotionEvent event1 = downEvent(event1Time, event1Time, 0f, 0f); assertFalse(EditorTouchState.isDistanceWithin(5, 10, 5, 20, 8)); mTouchState.update(event1, mConfig); assertSingleTap(mTouchState, 0f, 0f, 0, 0); // Simulate an ACTION_MOVE event that is < 30 deg from vertical. long event2Time = 1002; MotionEvent event2 = moveEvent(event1Time, event2Time, 100f, 174f); mTouchState.update(event2, mConfig); assertDrag(mTouchState, 0f, 0f, 0, 0, true); // Simulate another ACTION_MOVE event that is horizontal from the original down event. // The value of `isDragCloseToVertical` should NOT change since it should only reflect the // initial direction of movement. long event3Time = 1003; MotionEvent event3 = moveEvent(event1Time, event3Time, 200f, 0f); mTouchState.update(event3, mConfig); assertDrag(mTouchState, 0f, 0f, 0, 0, true); // Simulate an ACTION_UP event. long event4Time = 1004; MotionEvent event4 = upEvent(event1Time, event4Time, 200f, 0f); mTouchState.update(event4, mConfig); assertSingleTap(mTouchState, 0f, 0f, 200f, 0f); } @Test public void testUpdate_drag_startsHorizontalThenVertical() throws Exception { // Simulate an ACTION_DOWN event. long event1Time = 1001; MotionEvent event1 = downEvent(event1Time, event1Time, 0f, 0f); mTouchState.update(event1, mConfig); assertSingleTap(mTouchState, 0f, 0f, 0, 0); // Simulate an ACTION_MOVE event that is > 30 deg from vertical. long event2Time = 1002; MotionEvent event2 = moveEvent(event1Time, event2Time, 100f, 173f); mTouchState.update(event2, mConfig); assertDrag(mTouchState, 0f, 0f, 0, 0, false); // Simulate another ACTION_MOVE event that is vertical from the original down event. // The value of `isDragCloseToVertical` should NOT change since it should only reflect the // initial direction of movement. long event3Time = 1003; MotionEvent event3 = moveEvent(event1Time, event3Time, 0f, 200f); mTouchState.update(event3, mConfig); assertDrag(mTouchState, 0f, 0f, 0, 0, false); // Simulate an ACTION_UP event. long event4Time = 1004; MotionEvent event4 = upEvent(event1Time, event4Time, 0f, 200f); mTouchState.update(event4, mConfig); assertSingleTap(mTouchState, 0f, 0f, 0f, 200f); } @Test public void testUpdate_cancelAfterDown() throws Exception { // Simulate an ACTION_DOWN event. long event1Time = 1001; MotionEvent event1 = downEvent(event1Time, event1Time, 20f, 30f); mTouchState.update(event1, mConfig); assertSingleTap(mTouchState, 20f, 30f, 0, 0); // Simulate an ACTION_CANCEL event. long event2Time = 1002; MotionEvent event2 = cancelEvent(event1Time, event2Time, 20f, 30f); mTouchState.update(event2, mConfig); assertSingleTap(mTouchState, 20f, 30f, 0, 0); } @Test public void testUpdate_cancelAfterDrag() throws Exception { // Simulate an ACTION_DOWN event. long event1Time = 1001; MotionEvent event1 = downEvent(event1Time, event1Time, 20f, 30f); mTouchState.update(event1, mConfig); assertSingleTap(mTouchState, 20f, 30f, 0, 0); // Simulate another ACTION_MOVE event whose location is far enough to start a drag. long event2Time = 1002; MotionEvent event2 = moveEvent(event2Time, event2Time, 200f, 30f); mTouchState.update(event2, mConfig); assertDrag(mTouchState, 20f, 30f, 0, 0, false); // Simulate an ACTION_CANCEL event. long event3Time = 1003; MotionEvent event3 = cancelEvent(event1Time, event3Time, 200f, 30f); mTouchState.update(event3, mConfig); assertSingleTap(mTouchState, 20f, 30f, 0, 0); } @Test public void testUpdate_cancelAfterMultitap() throws Exception { // Simulate an ACTION_DOWN event. long event1Time = 1001; MotionEvent event1 = downEvent(event1Time, event1Time, 20f, 30f); mTouchState.update(event1, mConfig); assertSingleTap(mTouchState, 20f, 30f, 0, 0); // Simulate an ACTION_UP event. long event2Time = 1002; MotionEvent event2 = upEvent(event1Time, event2Time, 20f, 30f); mTouchState.update(event2, mConfig); assertSingleTap(mTouchState, 20f, 30f, 20f, 30f); // Generate an ACTION_DOWN event whose time is within the double-tap timeout. long event3Time = 1003; MotionEvent event3 = downEvent(event3Time, event3Time, 22f, 33f); mTouchState.update(event3, mConfig); assertMultiTap(mTouchState, 22f, 33f, 20f, 30f, MultiTapStatus.DOUBLE_TAP, true); // Simulate an ACTION_CANCEL event. long event4Time = 1004; MotionEvent event4 = cancelEvent(event3Time, event4Time, 20f, 30f); mTouchState.update(event4, mConfig); assertSingleTap(mTouchState, 22f, 33f, 20f, 30f); } } private static MotionEvent downEvent(long downTime, long eventTime, float x, float y) { private static MotionEvent downEvent(long downTime, long eventTime, float x, float y) { Loading @@ -299,8 +421,25 @@ public class EditorTouchStateTest { return MotionEvent.obtain(downTime, eventTime, MotionEvent.ACTION_MOVE, x, y, 0); return MotionEvent.obtain(downTime, eventTime, MotionEvent.ACTION_MOVE, x, y, 0); } } private static MotionEvent cancelEvent(long downTime, long eventTime, float x, float y) { return MotionEvent.obtain(downTime, eventTime, MotionEvent.ACTION_CANCEL, x, y, 0); } private static void assertSingleTap(EditorTouchState touchState, float lastDownX, private static void assertSingleTap(EditorTouchState touchState, float lastDownX, float lastDownY, float lastUpX, float lastUpY, boolean isMovedEnoughForDrag) { float lastDownY, float lastUpX, float lastUpY) { assertThat(touchState.getLastDownX(), is(lastDownX)); assertThat(touchState.getLastDownY(), is(lastDownY)); assertThat(touchState.getLastUpX(), is(lastUpX)); assertThat(touchState.getLastUpY(), is(lastUpY)); assertThat(touchState.isDoubleTap(), is(false)); assertThat(touchState.isTripleClick(), is(false)); assertThat(touchState.isMultiTap(), is(false)); assertThat(touchState.isMultiTapInSameArea(), is(false)); assertThat(touchState.isMovedEnoughForDrag(), is(false)); } private static void assertDrag(EditorTouchState touchState, float lastDownX, float lastDownY, float lastUpX, float lastUpY, boolean isDragCloseToVertical) { assertThat(touchState.getLastDownX(), is(lastDownX)); assertThat(touchState.getLastDownX(), is(lastDownX)); assertThat(touchState.getLastDownY(), is(lastDownY)); assertThat(touchState.getLastDownY(), is(lastDownY)); assertThat(touchState.getLastUpX(), is(lastUpX)); assertThat(touchState.getLastUpX(), is(lastUpX)); Loading @@ -309,7 +448,8 @@ public class EditorTouchStateTest { assertThat(touchState.isTripleClick(), is(false)); assertThat(touchState.isTripleClick(), is(false)); assertThat(touchState.isMultiTap(), is(false)); assertThat(touchState.isMultiTap(), is(false)); assertThat(touchState.isMultiTapInSameArea(), is(false)); assertThat(touchState.isMultiTapInSameArea(), is(false)); assertThat(touchState.isMovedEnoughForDrag(), is(isMovedEnoughForDrag)); assertThat(touchState.isMovedEnoughForDrag(), is(true)); assertThat(touchState.isDragCloseToVertical(), is(isDragCloseToVertical)); } } private static void assertMultiTap(EditorTouchState touchState, private static void assertMultiTap(EditorTouchState touchState, Loading @@ -325,5 +465,6 @@ public class EditorTouchStateTest { || multiTapStatus == MultiTapStatus.TRIPLE_CLICK)); || multiTapStatus == MultiTapStatus.TRIPLE_CLICK)); assertThat(touchState.isMultiTapInSameArea(), is(isMultiTapInSameArea)); assertThat(touchState.isMultiTapInSameArea(), is(isMultiTapInSameArea)); assertThat(touchState.isMovedEnoughForDrag(), is(false)); assertThat(touchState.isMovedEnoughForDrag(), is(false)); assertThat(touchState.isDragCloseToVertical(), is(false)); } } } } core/tests/coretests/src/android/widget/TextViewActivityMouseTest.java +0 −2 Original line number Original line Diff line number Diff line Loading @@ -47,7 +47,6 @@ import android.view.textclassifier.TextClassificationManager; import android.view.textclassifier.TextClassifier; import android.view.textclassifier.TextClassifier; import androidx.test.filters.MediumTest; import androidx.test.filters.MediumTest; import androidx.test.filters.Suppress; import androidx.test.rule.ActivityTestRule; import androidx.test.rule.ActivityTestRule; import androidx.test.runner.AndroidJUnit4; import androidx.test.runner.AndroidJUnit4; Loading Loading @@ -193,7 +192,6 @@ public class TextViewActivityMouseTest { } } @Test @Test @Suppress // Consistently failing. b/29591177 public void testDragAndDrop_longClick() { public void testDragAndDrop_longClick() { final String text = "abc def ghi."; final String text = "abc def ghi."; onView(withId(R.id.textview)).perform(mouseClick()); onView(withId(R.id.textview)).perform(mouseClick()); Loading Loading
core/java/android/widget/EditorTouchState.java +7 −0 Original line number Original line Diff line number Diff line Loading @@ -173,6 +173,13 @@ public class EditorTouchState { mIsDragCloseToVertical = (4 * deltaXSquared) <= distanceSquared; mIsDragCloseToVertical = (4 * deltaXSquared) <= distanceSquared; } } } } } else if (action == MotionEvent.ACTION_CANCEL) { mLastDownMillis = 0; mLastUpMillis = 0; mMultiTapStatus = MultiTapStatus.NONE; mMultiTapInSameArea = false; mMovedEnoughForDrag = false; mIsDragCloseToVertical = false; } } } } Loading
core/tests/coretests/src/android/widget/EditorTouchStateTest.java +171 −30 Original line number Original line Diff line number Diff line Loading @@ -47,25 +47,33 @@ public class EditorTouchStateTest { mConfig = new ViewConfiguration(); mConfig = new ViewConfiguration(); } } @Test public void testIsDistanceWithin() throws Exception { assertTrue(EditorTouchState.isDistanceWithin(0, 0, 0, 0, 8)); assertTrue(EditorTouchState.isDistanceWithin(3, 9, 5, 11, 8)); assertTrue(EditorTouchState.isDistanceWithin(5, 11, 3, 9, 8)); assertFalse(EditorTouchState.isDistanceWithin(5, 10, 5, 20, 8)); } @Test @Test public void testUpdate_singleTap() throws Exception { public void testUpdate_singleTap() throws Exception { // Simulate an ACTION_DOWN event. // Simulate an ACTION_DOWN event. long event1Time = 1000; long event1Time = 1000; MotionEvent event1 = downEvent(event1Time, event1Time, 20f, 30f); MotionEvent event1 = downEvent(event1Time, event1Time, 20f, 30f); mTouchState.update(event1, mConfig); mTouchState.update(event1, mConfig); assertSingleTap(mTouchState, 20f, 30f, 0, 0, false); assertSingleTap(mTouchState, 20f, 30f, 0, 0); // Simulate an ACTION_UP event. // Simulate an ACTION_UP event. long event2Time = 1001; long event2Time = 1001; MotionEvent event2 = upEvent(event1Time, event2Time, 20f, 30f); MotionEvent event2 = upEvent(event1Time, event2Time, 20f, 30f); mTouchState.update(event2, mConfig); mTouchState.update(event2, mConfig); assertSingleTap(mTouchState, 20f, 30f, 20f, 30f, false); assertSingleTap(mTouchState, 20f, 30f, 20f, 30f); // Generate an ACTION_DOWN event whose time is after the double-tap timeout. // Generate an ACTION_DOWN event whose time is after the double-tap timeout. long event3Time = event2Time + ViewConfiguration.getDoubleTapTimeout() + 1; long event3Time = event2Time + ViewConfiguration.getDoubleTapTimeout() + 1; MotionEvent event3 = downEvent(event3Time, event3Time, 22f, 33f); MotionEvent event3 = downEvent(event3Time, event3Time, 22f, 33f); mTouchState.update(event3, mConfig); mTouchState.update(event3, mConfig); assertSingleTap(mTouchState, 22f, 33f, 20f, 30f, false); assertSingleTap(mTouchState, 22f, 33f, 20f, 30f); } } @Test @Test Loading @@ -74,13 +82,13 @@ public class EditorTouchStateTest { long event1Time = 1000; long event1Time = 1000; MotionEvent event1 = downEvent(event1Time, event1Time, 20f, 30f); MotionEvent event1 = downEvent(event1Time, event1Time, 20f, 30f); mTouchState.update(event1, mConfig); mTouchState.update(event1, mConfig); assertSingleTap(mTouchState, 20f, 30f, 0, 0, false); assertSingleTap(mTouchState, 20f, 30f, 0, 0); // Simulate an ACTION_UP event. // Simulate an ACTION_UP event. long event2Time = 1001; long event2Time = 1001; MotionEvent event2 = upEvent(event1Time, event2Time, 20f, 30f); MotionEvent event2 = upEvent(event1Time, event2Time, 20f, 30f); mTouchState.update(event2, mConfig); mTouchState.update(event2, mConfig); assertSingleTap(mTouchState, 20f, 30f, 20f, 30f, false); assertSingleTap(mTouchState, 20f, 30f, 20f, 30f); // Generate an ACTION_DOWN event whose time is within the double-tap timeout. // Generate an ACTION_DOWN event whose time is within the double-tap timeout. long event3Time = 1002; long event3Time = 1002; Loading @@ -96,13 +104,13 @@ public class EditorTouchStateTest { long event1Time = 1000; long event1Time = 1000; MotionEvent event1 = downEvent(event1Time, event1Time, 20f, 30f); MotionEvent event1 = downEvent(event1Time, event1Time, 20f, 30f); mTouchState.update(event1, mConfig); mTouchState.update(event1, mConfig); assertSingleTap(mTouchState, 20f, 30f, 0, 0, false); assertSingleTap(mTouchState, 20f, 30f, 0, 0); // Simulate an ACTION_UP event. // Simulate an ACTION_UP event. long event2Time = 1001; long event2Time = 1001; MotionEvent event2 = upEvent(event1Time, event2Time, 20f, 30f); MotionEvent event2 = upEvent(event1Time, event2Time, 20f, 30f); mTouchState.update(event2, mConfig); mTouchState.update(event2, mConfig); assertSingleTap(mTouchState, 20f, 30f, 20f, 30f, false); assertSingleTap(mTouchState, 20f, 30f, 20f, 30f); // Generate an ACTION_DOWN event whose time is within the double-tap timeout. // Generate an ACTION_DOWN event whose time is within the double-tap timeout. long event3Time = 1002; long event3Time = 1002; Loading @@ -125,13 +133,13 @@ public class EditorTouchStateTest { long event1Time = 1000; long event1Time = 1000; MotionEvent event1 = downEvent(event1Time, event1Time, 20f, 30f); MotionEvent event1 = downEvent(event1Time, event1Time, 20f, 30f); mTouchState.update(event1, mConfig); mTouchState.update(event1, mConfig); assertSingleTap(mTouchState, 20f, 30f, 0, 0, false); assertSingleTap(mTouchState, 20f, 30f, 0, 0); // Simulate an ACTION_UP event with a delay that's longer than the double-tap timeout. // Simulate an ACTION_UP event with a delay that's longer than the double-tap timeout. long event2Time = 1000 + ViewConfiguration.getDoubleTapTimeout() + 1; long event2Time = 1000 + ViewConfiguration.getDoubleTapTimeout() + 1; MotionEvent event2 = upEvent(event1Time, event2Time, 20f, 30f); MotionEvent event2 = upEvent(event1Time, event2Time, 20f, 30f); mTouchState.update(event2, mConfig); mTouchState.update(event2, mConfig); assertSingleTap(mTouchState, 20f, 30f, 20f, 30f, false); assertSingleTap(mTouchState, 20f, 30f, 20f, 30f); // Generate an ACTION_DOWN event whose time is within the double-tap timeout when // Generate an ACTION_DOWN event whose time is within the double-tap timeout when // calculated from the last ACTION_UP event time. Even though the time between the last up // calculated from the last ACTION_UP event time. Even though the time between the last up Loading @@ -140,7 +148,7 @@ public class EditorTouchStateTest { long event3Time = event2Time + 1; long event3Time = event2Time + 1; MotionEvent event3 = downEvent(event3Time, event3Time, 22f, 33f); MotionEvent event3 = downEvent(event3Time, event3Time, 22f, 33f); mTouchState.update(event3, mConfig); mTouchState.update(event3, mConfig); assertSingleTap(mTouchState, 22f, 33f, 20f, 30f, false); assertSingleTap(mTouchState, 22f, 33f, 20f, 30f); } } @Test @Test Loading @@ -149,19 +157,19 @@ public class EditorTouchStateTest { long event1Time = 1000; long event1Time = 1000; MotionEvent event1 = downEvent(event1Time, event1Time, 20f, 30f); MotionEvent event1 = downEvent(event1Time, event1Time, 20f, 30f); mTouchState.update(event1, mConfig); mTouchState.update(event1, mConfig); assertSingleTap(mTouchState, 20f, 30f, 0, 0, false); assertSingleTap(mTouchState, 20f, 30f, 0, 0); // Simulate an ACTION_MOVE event. // Simulate an ACTION_MOVE event. long event2Time = 1001; long event2Time = 1001; MotionEvent event2 = moveEvent(event1Time, event2Time, 200f, 31f); MotionEvent event2 = moveEvent(event1Time, event2Time, 200f, 31f); mTouchState.update(event2, mConfig); mTouchState.update(event2, mConfig); assertSingleTap(mTouchState, 20f, 30f, 0, 0, true); assertDrag(mTouchState, 20f, 30f, 0, 0, false); // Simulate an ACTION_UP event with a delay that's longer than the double-tap timeout. // Simulate an ACTION_UP event with a delay that's longer than the double-tap timeout. long event3Time = 5000; long event3Time = 5000; MotionEvent event3 = upEvent(event1Time, event3Time, 200f, 31f); MotionEvent event3 = upEvent(event1Time, event3Time, 200f, 31f); mTouchState.update(event3, mConfig); mTouchState.update(event3, mConfig); assertSingleTap(mTouchState, 20f, 30f, 200f, 31f, false); assertSingleTap(mTouchState, 20f, 30f, 200f, 31f); // Generate an ACTION_DOWN event whose time is within the double-tap timeout when // Generate an ACTION_DOWN event whose time is within the double-tap timeout when // calculated from the last ACTION_UP event time. Even though the time between the last up // calculated from the last ACTION_UP event time. Even though the time between the last up Loading @@ -170,7 +178,7 @@ public class EditorTouchStateTest { long event4Time = event3Time + 1; long event4Time = event3Time + 1; MotionEvent event4 = downEvent(event4Time, event4Time, 200f, 31f); MotionEvent event4 = downEvent(event4Time, event4Time, 200f, 31f); mTouchState.update(event4, mConfig); mTouchState.update(event4, mConfig); assertSingleTap(mTouchState, 200f, 31f, 200f, 31f, false); assertSingleTap(mTouchState, 200f, 31f, 200f, 31f); } } @Test @Test Loading @@ -180,14 +188,14 @@ public class EditorTouchStateTest { MotionEvent event1 = downEvent(event1Time, event1Time, 20f, 30f); MotionEvent event1 = downEvent(event1Time, event1Time, 20f, 30f); event1.setSource(InputDevice.SOURCE_MOUSE); event1.setSource(InputDevice.SOURCE_MOUSE); mTouchState.update(event1, mConfig); mTouchState.update(event1, mConfig); assertSingleTap(mTouchState, 20f, 30f, 0, 0, false); assertSingleTap(mTouchState, 20f, 30f, 0, 0); // Simulate an ACTION_UP event. // Simulate an ACTION_UP event. long event2Time = 1001; long event2Time = 1001; MotionEvent event2 = upEvent(event1Time, event2Time, 20f, 30f); MotionEvent event2 = upEvent(event1Time, event2Time, 20f, 30f); event2.setSource(InputDevice.SOURCE_MOUSE); event2.setSource(InputDevice.SOURCE_MOUSE); mTouchState.update(event2, mConfig); mTouchState.update(event2, mConfig); assertSingleTap(mTouchState, 20f, 30f, 20f, 30f, false); assertSingleTap(mTouchState, 20f, 30f, 20f, 30f); // Generate a second ACTION_DOWN event whose time is within the double-tap timeout. // Generate a second ACTION_DOWN event whose time is within the double-tap timeout. long event3Time = 1002; long event3Time = 1002; Loading Loading @@ -220,13 +228,13 @@ public class EditorTouchStateTest { long event1Time = 1000; long event1Time = 1000; MotionEvent event1 = downEvent(event1Time, event1Time, 20f, 30f); MotionEvent event1 = downEvent(event1Time, event1Time, 20f, 30f); mTouchState.update(event1, mConfig); mTouchState.update(event1, mConfig); assertSingleTap(mTouchState, 20f, 30f, 0, 0, false); assertSingleTap(mTouchState, 20f, 30f, 0, 0); // Simulate an ACTION_UP event. // Simulate an ACTION_UP event. long event2Time = 1001; long event2Time = 1001; MotionEvent event2 = upEvent(event1Time, event2Time, 20f, 30f); MotionEvent event2 = upEvent(event1Time, event2Time, 20f, 30f); mTouchState.update(event2, mConfig); mTouchState.update(event2, mConfig); assertSingleTap(mTouchState, 20f, 30f, 20f, 30f, false); assertSingleTap(mTouchState, 20f, 30f, 20f, 30f); // Generate a second ACTION_DOWN event whose time is within the double-tap timeout. // Generate a second ACTION_DOWN event whose time is within the double-tap timeout. long event3Time = 1002; long event3Time = 1002; Loading @@ -246,7 +254,7 @@ public class EditorTouchStateTest { long event5Time = 1004; long event5Time = 1004; MotionEvent event5 = downEvent(event5Time, event5Time, 22f, 32f); MotionEvent event5 = downEvent(event5Time, event5Time, 22f, 32f); mTouchState.update(event5, mConfig); mTouchState.update(event5, mConfig); assertSingleTap(mTouchState, 22f, 32f, 21f, 31f, false); assertSingleTap(mTouchState, 22f, 32f, 21f, 31f); } } @Test @Test Loading @@ -255,13 +263,13 @@ public class EditorTouchStateTest { long event1Time = 1000; long event1Time = 1000; MotionEvent event1 = downEvent(event1Time, event1Time, 20f, 30f); MotionEvent event1 = downEvent(event1Time, event1Time, 20f, 30f); mTouchState.update(event1, mConfig); mTouchState.update(event1, mConfig); assertSingleTap(mTouchState, 20f, 30f, 0, 0, false); assertSingleTap(mTouchState, 20f, 30f, 0, 0); // Simulate an ACTION_MOVE event whose location is not far enough to start a drag. // Simulate an ACTION_MOVE event whose location is not far enough to start a drag. long event2Time = 1001; long event2Time = 1001; MotionEvent event2 = moveEvent(event1Time, event2Time, 21f, 30f); MotionEvent event2 = moveEvent(event1Time, event2Time, 21f, 30f); mTouchState.update(event2, mConfig); mTouchState.update(event2, mConfig); assertSingleTap(mTouchState, 20f, 30f, 0, 0, false); assertSingleTap(mTouchState, 20f, 30f, 0, 0); // Simulate another ACTION_MOVE event whose location is far enough to start a drag. // Simulate another ACTION_MOVE event whose location is far enough to start a drag. int touchSlop = mConfig.getScaledTouchSlop(); int touchSlop = mConfig.getScaledTouchSlop(); Loading @@ -270,21 +278,135 @@ public class EditorTouchStateTest { long event3Time = 1002; long event3Time = 1002; MotionEvent event3 = moveEvent(event3Time, event3Time, newX, newY); MotionEvent event3 = moveEvent(event3Time, event3Time, newX, newY); mTouchState.update(event3, mConfig); mTouchState.update(event3, mConfig); assertSingleTap(mTouchState, 20f, 30f, 0, 0, true); assertDrag(mTouchState, 20f, 30f, 0, 0, false); // Simulate an ACTION_UP event. // Simulate an ACTION_UP event. long event4Time = 1003; long event4Time = 1003; MotionEvent event4 = upEvent(event3Time, event4Time, 200f, 300f); MotionEvent event4 = upEvent(event3Time, event4Time, 200f, 300f); mTouchState.update(event4, mConfig); mTouchState.update(event4, mConfig); assertSingleTap(mTouchState, 20f, 30f, 200f, 300f, false); assertSingleTap(mTouchState, 20f, 30f, 200f, 300f); } } @Test @Test public void testIsDistanceWithin() throws Exception { public void testUpdate_drag_startsCloseToVerticalThenHorizontal() throws Exception { assertTrue(EditorTouchState.isDistanceWithin(0, 0, 0, 0, 8)); // Simulate an ACTION_DOWN event. assertTrue(EditorTouchState.isDistanceWithin(3, 9, 5, 11, 8)); long event1Time = 1001; assertTrue(EditorTouchState.isDistanceWithin(5, 11, 3, 9, 8)); MotionEvent event1 = downEvent(event1Time, event1Time, 0f, 0f); assertFalse(EditorTouchState.isDistanceWithin(5, 10, 5, 20, 8)); mTouchState.update(event1, mConfig); assertSingleTap(mTouchState, 0f, 0f, 0, 0); // Simulate an ACTION_MOVE event that is < 30 deg from vertical. long event2Time = 1002; MotionEvent event2 = moveEvent(event1Time, event2Time, 100f, 174f); mTouchState.update(event2, mConfig); assertDrag(mTouchState, 0f, 0f, 0, 0, true); // Simulate another ACTION_MOVE event that is horizontal from the original down event. // The value of `isDragCloseToVertical` should NOT change since it should only reflect the // initial direction of movement. long event3Time = 1003; MotionEvent event3 = moveEvent(event1Time, event3Time, 200f, 0f); mTouchState.update(event3, mConfig); assertDrag(mTouchState, 0f, 0f, 0, 0, true); // Simulate an ACTION_UP event. long event4Time = 1004; MotionEvent event4 = upEvent(event1Time, event4Time, 200f, 0f); mTouchState.update(event4, mConfig); assertSingleTap(mTouchState, 0f, 0f, 200f, 0f); } @Test public void testUpdate_drag_startsHorizontalThenVertical() throws Exception { // Simulate an ACTION_DOWN event. long event1Time = 1001; MotionEvent event1 = downEvent(event1Time, event1Time, 0f, 0f); mTouchState.update(event1, mConfig); assertSingleTap(mTouchState, 0f, 0f, 0, 0); // Simulate an ACTION_MOVE event that is > 30 deg from vertical. long event2Time = 1002; MotionEvent event2 = moveEvent(event1Time, event2Time, 100f, 173f); mTouchState.update(event2, mConfig); assertDrag(mTouchState, 0f, 0f, 0, 0, false); // Simulate another ACTION_MOVE event that is vertical from the original down event. // The value of `isDragCloseToVertical` should NOT change since it should only reflect the // initial direction of movement. long event3Time = 1003; MotionEvent event3 = moveEvent(event1Time, event3Time, 0f, 200f); mTouchState.update(event3, mConfig); assertDrag(mTouchState, 0f, 0f, 0, 0, false); // Simulate an ACTION_UP event. long event4Time = 1004; MotionEvent event4 = upEvent(event1Time, event4Time, 0f, 200f); mTouchState.update(event4, mConfig); assertSingleTap(mTouchState, 0f, 0f, 0f, 200f); } @Test public void testUpdate_cancelAfterDown() throws Exception { // Simulate an ACTION_DOWN event. long event1Time = 1001; MotionEvent event1 = downEvent(event1Time, event1Time, 20f, 30f); mTouchState.update(event1, mConfig); assertSingleTap(mTouchState, 20f, 30f, 0, 0); // Simulate an ACTION_CANCEL event. long event2Time = 1002; MotionEvent event2 = cancelEvent(event1Time, event2Time, 20f, 30f); mTouchState.update(event2, mConfig); assertSingleTap(mTouchState, 20f, 30f, 0, 0); } @Test public void testUpdate_cancelAfterDrag() throws Exception { // Simulate an ACTION_DOWN event. long event1Time = 1001; MotionEvent event1 = downEvent(event1Time, event1Time, 20f, 30f); mTouchState.update(event1, mConfig); assertSingleTap(mTouchState, 20f, 30f, 0, 0); // Simulate another ACTION_MOVE event whose location is far enough to start a drag. long event2Time = 1002; MotionEvent event2 = moveEvent(event2Time, event2Time, 200f, 30f); mTouchState.update(event2, mConfig); assertDrag(mTouchState, 20f, 30f, 0, 0, false); // Simulate an ACTION_CANCEL event. long event3Time = 1003; MotionEvent event3 = cancelEvent(event1Time, event3Time, 200f, 30f); mTouchState.update(event3, mConfig); assertSingleTap(mTouchState, 20f, 30f, 0, 0); } @Test public void testUpdate_cancelAfterMultitap() throws Exception { // Simulate an ACTION_DOWN event. long event1Time = 1001; MotionEvent event1 = downEvent(event1Time, event1Time, 20f, 30f); mTouchState.update(event1, mConfig); assertSingleTap(mTouchState, 20f, 30f, 0, 0); // Simulate an ACTION_UP event. long event2Time = 1002; MotionEvent event2 = upEvent(event1Time, event2Time, 20f, 30f); mTouchState.update(event2, mConfig); assertSingleTap(mTouchState, 20f, 30f, 20f, 30f); // Generate an ACTION_DOWN event whose time is within the double-tap timeout. long event3Time = 1003; MotionEvent event3 = downEvent(event3Time, event3Time, 22f, 33f); mTouchState.update(event3, mConfig); assertMultiTap(mTouchState, 22f, 33f, 20f, 30f, MultiTapStatus.DOUBLE_TAP, true); // Simulate an ACTION_CANCEL event. long event4Time = 1004; MotionEvent event4 = cancelEvent(event3Time, event4Time, 20f, 30f); mTouchState.update(event4, mConfig); assertSingleTap(mTouchState, 22f, 33f, 20f, 30f); } } private static MotionEvent downEvent(long downTime, long eventTime, float x, float y) { private static MotionEvent downEvent(long downTime, long eventTime, float x, float y) { Loading @@ -299,8 +421,25 @@ public class EditorTouchStateTest { return MotionEvent.obtain(downTime, eventTime, MotionEvent.ACTION_MOVE, x, y, 0); return MotionEvent.obtain(downTime, eventTime, MotionEvent.ACTION_MOVE, x, y, 0); } } private static MotionEvent cancelEvent(long downTime, long eventTime, float x, float y) { return MotionEvent.obtain(downTime, eventTime, MotionEvent.ACTION_CANCEL, x, y, 0); } private static void assertSingleTap(EditorTouchState touchState, float lastDownX, private static void assertSingleTap(EditorTouchState touchState, float lastDownX, float lastDownY, float lastUpX, float lastUpY, boolean isMovedEnoughForDrag) { float lastDownY, float lastUpX, float lastUpY) { assertThat(touchState.getLastDownX(), is(lastDownX)); assertThat(touchState.getLastDownY(), is(lastDownY)); assertThat(touchState.getLastUpX(), is(lastUpX)); assertThat(touchState.getLastUpY(), is(lastUpY)); assertThat(touchState.isDoubleTap(), is(false)); assertThat(touchState.isTripleClick(), is(false)); assertThat(touchState.isMultiTap(), is(false)); assertThat(touchState.isMultiTapInSameArea(), is(false)); assertThat(touchState.isMovedEnoughForDrag(), is(false)); } private static void assertDrag(EditorTouchState touchState, float lastDownX, float lastDownY, float lastUpX, float lastUpY, boolean isDragCloseToVertical) { assertThat(touchState.getLastDownX(), is(lastDownX)); assertThat(touchState.getLastDownX(), is(lastDownX)); assertThat(touchState.getLastDownY(), is(lastDownY)); assertThat(touchState.getLastDownY(), is(lastDownY)); assertThat(touchState.getLastUpX(), is(lastUpX)); assertThat(touchState.getLastUpX(), is(lastUpX)); Loading @@ -309,7 +448,8 @@ public class EditorTouchStateTest { assertThat(touchState.isTripleClick(), is(false)); assertThat(touchState.isTripleClick(), is(false)); assertThat(touchState.isMultiTap(), is(false)); assertThat(touchState.isMultiTap(), is(false)); assertThat(touchState.isMultiTapInSameArea(), is(false)); assertThat(touchState.isMultiTapInSameArea(), is(false)); assertThat(touchState.isMovedEnoughForDrag(), is(isMovedEnoughForDrag)); assertThat(touchState.isMovedEnoughForDrag(), is(true)); assertThat(touchState.isDragCloseToVertical(), is(isDragCloseToVertical)); } } private static void assertMultiTap(EditorTouchState touchState, private static void assertMultiTap(EditorTouchState touchState, Loading @@ -325,5 +465,6 @@ public class EditorTouchStateTest { || multiTapStatus == MultiTapStatus.TRIPLE_CLICK)); || multiTapStatus == MultiTapStatus.TRIPLE_CLICK)); assertThat(touchState.isMultiTapInSameArea(), is(isMultiTapInSameArea)); assertThat(touchState.isMultiTapInSameArea(), is(isMultiTapInSameArea)); assertThat(touchState.isMovedEnoughForDrag(), is(false)); assertThat(touchState.isMovedEnoughForDrag(), is(false)); assertThat(touchState.isDragCloseToVertical(), is(false)); } } } }
core/tests/coretests/src/android/widget/TextViewActivityMouseTest.java +0 −2 Original line number Original line Diff line number Diff line Loading @@ -47,7 +47,6 @@ import android.view.textclassifier.TextClassificationManager; import android.view.textclassifier.TextClassifier; import android.view.textclassifier.TextClassifier; import androidx.test.filters.MediumTest; import androidx.test.filters.MediumTest; import androidx.test.filters.Suppress; import androidx.test.rule.ActivityTestRule; import androidx.test.rule.ActivityTestRule; import androidx.test.runner.AndroidJUnit4; import androidx.test.runner.AndroidJUnit4; Loading Loading @@ -193,7 +192,6 @@ public class TextViewActivityMouseTest { } } @Test @Test @Suppress // Consistently failing. b/29591177 public void testDragAndDrop_longClick() { public void testDragAndDrop_longClick() { final String text = "abc def ghi."; final String text = "abc def ghi."; onView(withId(R.id.textview)).perform(mouseClick()); onView(withId(R.id.textview)).perform(mouseClick()); Loading