TouchUtilspublic class TouchUtils extends Object Reusable methods for generating touch events. These methods can be used with
InstrumentationTestCase or ActivityInstrumentationTestCase2 to simulate user interaction with
the application through a touch screen. |
Methods Summary |
---|
public static void | clickView(InstrumentationTestCase test, android.view.View v)Simulate touching the center of a view and releasing.
int[] xy = new int[2];
v.getLocationOnScreen(xy);
final int viewWidth = v.getWidth();
final int viewHeight = v.getHeight();
final float x = xy[0] + (viewWidth / 2.0f);
float y = xy[1] + (viewHeight / 2.0f);
Instrumentation inst = test.getInstrumentation();
long downTime = SystemClock.uptimeMillis();
long eventTime = SystemClock.uptimeMillis();
MotionEvent event = MotionEvent.obtain(downTime, eventTime,
MotionEvent.ACTION_DOWN, x, y, 0);
inst.sendPointerSync(event);
inst.waitForIdleSync();
eventTime = SystemClock.uptimeMillis();
final int touchSlop = ViewConfiguration.get(v.getContext()).getScaledTouchSlop();
event = MotionEvent.obtain(downTime, eventTime, MotionEvent.ACTION_MOVE,
x + (touchSlop / 2.0f), y + (touchSlop / 2.0f), 0);
inst.sendPointerSync(event);
inst.waitForIdleSync();
eventTime = SystemClock.uptimeMillis();
event = MotionEvent.obtain(downTime, eventTime, MotionEvent.ACTION_UP, x, y, 0);
inst.sendPointerSync(event);
inst.waitForIdleSync();
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
| public static void | drag(ActivityInstrumentationTestCase test, float fromX, float toX, float fromY, float toY, int stepCount)Simulate touching a specific location and dragging to a new location.
drag((InstrumentationTestCase) test, fromX, toX, fromY, toY, stepCount);
| public static void | drag(InstrumentationTestCase test, float fromX, float toX, float fromY, float toY, int stepCount)Simulate touching a specific location and dragging to a new location.
Instrumentation inst = test.getInstrumentation();
long downTime = SystemClock.uptimeMillis();
long eventTime = SystemClock.uptimeMillis();
float y = fromY;
float x = fromX;
float yStep = (toY - fromY) / stepCount;
float xStep = (toX - fromX) / stepCount;
MotionEvent event = MotionEvent.obtain(downTime, eventTime,
MotionEvent.ACTION_DOWN, fromX, y, 0);
inst.sendPointerSync(event);
inst.waitForIdleSync();
for (int i = 0; i < stepCount; ++i) {
y += yStep;
x += xStep;
eventTime = SystemClock.uptimeMillis();
event = MotionEvent.obtain(downTime, eventTime, MotionEvent.ACTION_MOVE, x, y, 0);
inst.sendPointerSync(event);
inst.waitForIdleSync();
}
eventTime = SystemClock.uptimeMillis();
event = MotionEvent.obtain(downTime, eventTime, MotionEvent.ACTION_UP, fromX, y, 0);
inst.sendPointerSync(event);
inst.waitForIdleSync();
| public static void | dragQuarterScreenDown(ActivityInstrumentationTestCase test)Simulate touching in the center of the screen and dragging one quarter of the way down
dragQuarterScreenDown(test, test.getActivity());
| public static void | dragQuarterScreenDown(InstrumentationTestCase test, android.app.Activity activity)Simulate touching in the center of the screen and dragging one quarter of the way down
Display display = activity.getWindowManager().getDefaultDisplay();
int screenHeight = display.getHeight();
int screenWidth = display.getWidth();
final float x = screenWidth / 2.0f;
final float fromY = screenHeight * 0.5f;
final float toY = screenHeight * 0.75f;
drag(test, x, x, fromY, toY, 4);
| public static void | dragQuarterScreenUp(ActivityInstrumentationTestCase test)Simulate touching in the center of the screen and dragging one quarter of the way up
dragQuarterScreenUp(test, test.getActivity());
| public static void | dragQuarterScreenUp(InstrumentationTestCase test, android.app.Activity activity)Simulate touching in the center of the screen and dragging one quarter of the way up
Display display = activity.getWindowManager().getDefaultDisplay();
int screenHeight = display.getHeight();
int screenWidth = display.getWidth();
final float x = screenWidth / 2.0f;
final float fromY = screenHeight * 0.5f;
final float toY = screenHeight * 0.25f;
drag(test, x, x, fromY, toY, 4);
| public static int | dragViewBy(ActivityInstrumentationTestCase test, android.view.View v, int gravity, int deltaX, int deltaY)Simulate touching a view and dragging it by the specified amount.
return dragViewBy((InstrumentationTestCase) test, v, gravity, deltaX, deltaY);
| public static int | dragViewBy(InstrumentationTestCase test, android.view.View v, int gravity, int deltaX, int deltaY)Simulate touching a view and dragging it by the specified amount.
int[] xy = new int[2];
getStartLocation(v, gravity, xy);
final int fromX = xy[0];
final int fromY = xy[1];
int distance = (int) Math.sqrt(deltaX * deltaX + deltaY * deltaY);
drag(test, fromX, fromX + deltaX, fromY, fromY + deltaY, distance);
return distance;
| public static int | dragViewTo(ActivityInstrumentationTestCase test, android.view.View v, int gravity, int toX, int toY)Simulate touching a view and dragging it to a specified location.
return dragViewTo((InstrumentationTestCase) test, v, gravity, toX, toY);
| public static int | dragViewTo(InstrumentationTestCase test, android.view.View v, int gravity, int toX, int toY)Simulate touching a view and dragging it to a specified location.
int[] xy = new int[2];
getStartLocation(v, gravity, xy);
final int fromX = xy[0];
final int fromY = xy[1];
int deltaX = fromX - toX;
int deltaY = fromY - toY;
int distance = (int)Math.sqrt(deltaX * deltaX + deltaY * deltaY);
drag(test, fromX, toX, fromY, toY, distance);
return distance;
| public static void | dragViewToBottom(InstrumentationTestCase test, android.app.Activity activity, android.view.View v)Simulate touching the center of a view and dragging to the bottom of the screen.
dragViewToBottom(test, activity, v, 4);
| public static void | dragViewToBottom(ActivityInstrumentationTestCase test, android.view.View v, int stepCount)Simulate touching the center of a view and dragging to the bottom of the screen.
dragViewToBottom(test, test.getActivity(), v, stepCount);
| public static void | dragViewToBottom(InstrumentationTestCase test, android.app.Activity activity, android.view.View v, int stepCount)Simulate touching the center of a view and dragging to the bottom of the screen.
int screenHeight = activity.getWindowManager().getDefaultDisplay().getHeight();
int[] xy = new int[2];
v.getLocationOnScreen(xy);
final int viewWidth = v.getWidth();
final int viewHeight = v.getHeight();
final float x = xy[0] + (viewWidth / 2.0f);
float fromY = xy[1] + (viewHeight / 2.0f);
float toY = screenHeight - 1;
drag(test, x, x, fromY, toY, stepCount);
| public static void | dragViewToBottom(ActivityInstrumentationTestCase test, android.view.View v)Simulate touching the center of a view and dragging to the bottom of the screen.
dragViewToBottom(test, test.getActivity(), v, 4);
| public static void | dragViewToTop(ActivityInstrumentationTestCase test, android.view.View v)Simulate touching the center of a view and dragging to the top of the screen.
dragViewToTop((InstrumentationTestCase) test, v, 4);
| public static void | dragViewToTop(ActivityInstrumentationTestCase test, android.view.View v, int stepCount)Simulate touching the center of a view and dragging to the top of the screen.
dragViewToTop((InstrumentationTestCase) test, v, stepCount);
| public static void | dragViewToTop(InstrumentationTestCase test, android.view.View v)Simulate touching the center of a view and dragging to the top of the screen.
dragViewToTop(test, v, 4);
| public static void | dragViewToTop(InstrumentationTestCase test, android.view.View v, int stepCount)Simulate touching the center of a view and dragging to the top of the screen.
int[] xy = new int[2];
v.getLocationOnScreen(xy);
final int viewWidth = v.getWidth();
final int viewHeight = v.getHeight();
final float x = xy[0] + (viewWidth / 2.0f);
float fromY = xy[1] + (viewHeight / 2.0f);
float toY = 0;
drag(test, x, x, fromY, toY, stepCount);
| public static int | dragViewToX(ActivityInstrumentationTestCase test, android.view.View v, int gravity, int toX)Simulate touching a view and dragging it to a specified location. Only moves horizontally.
return dragViewToX((InstrumentationTestCase) test, v, gravity, toX);
| public static int | dragViewToX(InstrumentationTestCase test, android.view.View v, int gravity, int toX)Simulate touching a view and dragging it to a specified location. Only moves horizontally.
int[] xy = new int[2];
getStartLocation(v, gravity, xy);
final int fromX = xy[0];
final int fromY = xy[1];
int deltaX = fromX - toX;
drag(test, fromX, toX, fromY, fromY, deltaX);
return deltaX;
| public static int | dragViewToY(ActivityInstrumentationTestCase test, android.view.View v, int gravity, int toY)Simulate touching a view and dragging it to a specified location. Only moves vertically.
return dragViewToY((InstrumentationTestCase) test, v, gravity, toY);
| public static int | dragViewToY(InstrumentationTestCase test, android.view.View v, int gravity, int toY)Simulate touching a view and dragging it to a specified location. Only moves vertically.
int[] xy = new int[2];
getStartLocation(v, gravity, xy);
final int fromX = xy[0];
final int fromY = xy[1];
int deltaY = fromY - toY;
drag(test, fromX, fromX, fromY, toY, deltaY);
return deltaY;
| private static void | getStartLocation(android.view.View v, int gravity, int[] xy)Get the location of a view. Use the gravity param to specify which part of the view to
return.
v.getLocationOnScreen(xy);
final int viewWidth = v.getWidth();
final int viewHeight = v.getHeight();
switch (gravity & Gravity.VERTICAL_GRAVITY_MASK) {
case Gravity.TOP:
break;
case Gravity.CENTER_VERTICAL:
xy[1] += viewHeight / 2;
break;
case Gravity.BOTTOM:
xy[1] += viewHeight - 1;
break;
default:
// Same as top -- do nothing
}
switch (gravity & Gravity.HORIZONTAL_GRAVITY_MASK) {
case Gravity.LEFT:
break;
case Gravity.CENTER_HORIZONTAL:
xy[0] += viewWidth / 2;
break;
case Gravity.RIGHT:
xy[0] += viewWidth - 1;
break;
default:
// Same as left -- do nothing
}
| public static void | longClickView(ActivityInstrumentationTestCase test, android.view.View v)Simulate touching the center of a view, holding until it is a long press, and then releasing.
longClickView((InstrumentationTestCase) test, v);
| public static void | longClickView(InstrumentationTestCase test, android.view.View v)Simulate touching the center of a view, holding until it is a long press, and then releasing.
int[] xy = new int[2];
v.getLocationOnScreen(xy);
final int viewWidth = v.getWidth();
final int viewHeight = v.getHeight();
final float x = xy[0] + (viewWidth / 2.0f);
float y = xy[1] + (viewHeight / 2.0f);
Instrumentation inst = test.getInstrumentation();
long downTime = SystemClock.uptimeMillis();
long eventTime = SystemClock.uptimeMillis();
MotionEvent event = MotionEvent.obtain(downTime, eventTime,
MotionEvent.ACTION_DOWN, x, y, 0);
inst.sendPointerSync(event);
inst.waitForIdleSync();
eventTime = SystemClock.uptimeMillis();
final int touchSlop = ViewConfiguration.get(v.getContext()).getScaledTouchSlop();
event = MotionEvent.obtain(downTime, eventTime, MotionEvent.ACTION_MOVE,
x + touchSlop / 2, y + touchSlop / 2, 0);
inst.sendPointerSync(event);
inst.waitForIdleSync();
try {
Thread.sleep((long)(ViewConfiguration.getLongPressTimeout() * 1.5f));
} catch (InterruptedException e) {
e.printStackTrace();
}
eventTime = SystemClock.uptimeMillis();
event = MotionEvent.obtain(downTime, eventTime, MotionEvent.ACTION_UP, x, y, 0);
inst.sendPointerSync(event);
inst.waitForIdleSync();
| public static void | scrollToBottom(ActivityInstrumentationTestCase test, android.view.ViewGroup v)Scroll a ViewGroup to the bottom by repeatedly calling
{@link #dragQuarterScreenUp(InstrumentationTestCase, Activity)}
scrollToBottom(test, test.getActivity(), v);
| public static void | scrollToBottom(InstrumentationTestCase test, android.app.Activity activity, android.view.ViewGroup v)Scroll a ViewGroup to the bottom by repeatedly calling
{@link #dragQuarterScreenUp(InstrumentationTestCase, Activity)}
View firstChild;
int firstId = Integer.MIN_VALUE;
int firstTop = Integer.MIN_VALUE;
int prevId;
int prevTop;
do {
prevId = firstId;
prevTop = firstTop;
TouchUtils.dragQuarterScreenUp(test, activity);
firstChild = v.getChildAt(0);
firstId = firstChild.getId();
firstTop = firstChild.getTop();
} while ((prevId != firstId) || (prevTop != firstTop));
| public static void | scrollToTop(ActivityInstrumentationTestCase test, android.view.ViewGroup v)Scroll a ViewGroup to the top by repeatedly calling
{@link #dragQuarterScreenDown(InstrumentationTestCase, Activity)}
scrollToTop(test, test.getActivity(), v);
| public static void | scrollToTop(InstrumentationTestCase test, android.app.Activity activity, android.view.ViewGroup v)Scroll a ViewGroup to the top by repeatedly calling
{@link #dragQuarterScreenDown(InstrumentationTestCase, Activity)}
View firstChild;
int firstId = Integer.MIN_VALUE;
int firstTop = Integer.MIN_VALUE;
int prevId;
int prevTop;
do {
prevId = firstId;
prevTop = firstTop;
TouchUtils.dragQuarterScreenDown(test, activity);
firstChild = v.getChildAt(0);
firstId = firstChild.getId();
firstTop = firstChild.getTop();
} while ((prevId != firstId) || (prevTop != firstTop));
| public static void | tapView(InstrumentationTestCase test, android.view.View v)Simulate touching the center of a view and releasing quickly (before the tap timeout).
int[] xy = new int[2];
v.getLocationOnScreen(xy);
final int viewWidth = v.getWidth();
final int viewHeight = v.getHeight();
final float x = xy[0] + (viewWidth / 2.0f);
float y = xy[1] + (viewHeight / 2.0f);
Instrumentation inst = test.getInstrumentation();
long downTime = SystemClock.uptimeMillis();
long eventTime = SystemClock.uptimeMillis();
MotionEvent event = MotionEvent.obtain(downTime, eventTime,
MotionEvent.ACTION_DOWN, x, y, 0);
inst.sendPointerSync(event);
inst.waitForIdleSync();
eventTime = SystemClock.uptimeMillis();
final int touchSlop = ViewConfiguration.get(v.getContext()).getScaledTouchSlop();
event = MotionEvent.obtain(downTime, eventTime, MotionEvent.ACTION_MOVE,
x + (touchSlop / 2.0f), y + (touchSlop / 2.0f), 0);
inst.sendPointerSync(event);
inst.waitForIdleSync();
eventTime = SystemClock.uptimeMillis();
event = MotionEvent.obtain(downTime, eventTime, MotionEvent.ACTION_UP, x, y, 0);
inst.sendPointerSync(event);
inst.waitForIdleSync();
| public static void | touchAndCancelView(InstrumentationTestCase test, android.view.View v)Simulate touching the center of a view and cancelling (so no onClick should
fire, etc).
int[] xy = new int[2];
v.getLocationOnScreen(xy);
final int viewWidth = v.getWidth();
final int viewHeight = v.getHeight();
final float x = xy[0] + (viewWidth / 2.0f);
float y = xy[1] + (viewHeight / 2.0f);
Instrumentation inst = test.getInstrumentation();
long downTime = SystemClock.uptimeMillis();
long eventTime = SystemClock.uptimeMillis();
MotionEvent event = MotionEvent.obtain(downTime, eventTime,
MotionEvent.ACTION_DOWN, x, y, 0);
inst.sendPointerSync(event);
inst.waitForIdleSync();
eventTime = SystemClock.uptimeMillis();
final int touchSlop = ViewConfiguration.get(v.getContext()).getScaledTouchSlop();
event = MotionEvent.obtain(downTime, eventTime, MotionEvent.ACTION_CANCEL,
x + (touchSlop / 2.0f), y + (touchSlop / 2.0f), 0);
inst.sendPointerSync(event);
inst.waitForIdleSync();
|
|