FileDocCategorySizeDatePackage
TouchUtils.javaAPI DocAndroid 1.5 API31011Wed May 06 22:42:02 BST 2009android.test

TouchUtils

public 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.

Fields Summary
Constructors Summary
Methods Summary
public static voidclickView(InstrumentationTestCase test, android.view.View v)
Simulate touching the center of a view and releasing.

param
test The test case that is being run
param
v The view that should be clicked

        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 voiddrag(ActivityInstrumentationTestCase test, float fromX, float toX, float fromY, float toY, int stepCount)
Simulate touching a specific location and dragging to a new location.

param
test The test case that is being run
param
fromX X coordinate of the initial touch, in screen coordinates
param
toX Xcoordinate of the drag destination, in screen coordinates
param
fromY X coordinate of the initial touch, in screen coordinates
param
toY Y coordinate of the drag destination, in screen coordinates
param
stepCount How many move steps to include in the drag
deprecated
{@link android.test.ActivityInstrumentationTestCase} is deprecated in favor of {@link android.test.ActivityInstrumentationTestCase2}, which provides more options for configuring the Activity under test

        drag((InstrumentationTestCase) test, fromX, toX, fromY, toY, stepCount);
    
public static voiddrag(InstrumentationTestCase test, float fromX, float toX, float fromY, float toY, int stepCount)
Simulate touching a specific location and dragging to a new location.

param
test The test case that is being run
param
fromX X coordinate of the initial touch, in screen coordinates
param
toX Xcoordinate of the drag destination, in screen coordinates
param
fromY X coordinate of the initial touch, in screen coordinates
param
toY Y coordinate of the drag destination, in screen coordinates
param
stepCount How many move steps to include in the drag

        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 voiddragQuarterScreenDown(ActivityInstrumentationTestCase test)
Simulate touching in the center of the screen and dragging one quarter of the way down

param
test The test case that is being run
deprecated
{@link android.test.ActivityInstrumentationTestCase} is deprecated in favor of {@link android.test.ActivityInstrumentationTestCase2}, which provides more options for configuring the Activity under test

        dragQuarterScreenDown(test, test.getActivity());
    
public static voiddragQuarterScreenDown(InstrumentationTestCase test, android.app.Activity activity)
Simulate touching in the center of the screen and dragging one quarter of the way down

param
test The test case that is being run
param
activity The activity that is in the foreground of the test case

        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 voiddragQuarterScreenUp(ActivityInstrumentationTestCase test)
Simulate touching in the center of the screen and dragging one quarter of the way up

param
test The test case that is being run
deprecated
{@link android.test.ActivityInstrumentationTestCase} is deprecated in favor of {@link android.test.ActivityInstrumentationTestCase2}, which provides more options for configuring the Activity under test

        dragQuarterScreenUp(test, test.getActivity());
    
public static voiddragQuarterScreenUp(InstrumentationTestCase test, android.app.Activity activity)
Simulate touching in the center of the screen and dragging one quarter of the way up

param
test The test case that is being run
param
activity The activity that is in the foreground of the test case

        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 intdragViewBy(ActivityInstrumentationTestCase test, android.view.View v, int gravity, int deltaX, int deltaY)
Simulate touching a view and dragging it by the specified amount.

param
test The test case that is being run
param
v The view that should be dragged
param
gravity Which part of the view to use for the initial down event. A combination of (TOP, CENTER_VERTICAL, BOTTOM) and (LEFT, CENTER_HORIZONTAL, RIGHT)
param
deltaX Amount to drag horizontally in pixels
param
deltaY Amount to drag vertically in pixels
return
distance in pixels covered by the drag
deprecated
{@link android.test.ActivityInstrumentationTestCase} is deprecated in favor of {@link android.test.ActivityInstrumentationTestCase2}, which provides more options for configuring the Activity under test

        return dragViewBy((InstrumentationTestCase) test, v, gravity, deltaX, deltaY);
    
public static intdragViewBy(InstrumentationTestCase test, android.view.View v, int gravity, int deltaX, int deltaY)
Simulate touching a view and dragging it by the specified amount.

param
test The test case that is being run
param
v The view that should be dragged
param
gravity Which part of the view to use for the initial down event. A combination of (TOP, CENTER_VERTICAL, BOTTOM) and (LEFT, CENTER_HORIZONTAL, RIGHT)
param
deltaX Amount to drag horizontally in pixels
param
deltaY Amount to drag vertically in pixels
return
distance in pixels covered by the drag
deprecated
{@link android.test.ActivityInstrumentationTestCase} is deprecated in favor of {@link android.test.ActivityInstrumentationTestCase2}, which provides more options for configuring the Activity under test

        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 intdragViewTo(ActivityInstrumentationTestCase test, android.view.View v, int gravity, int toX, int toY)
Simulate touching a view and dragging it to a specified location.

param
test The test case that is being run
param
v The view that should be dragged
param
gravity Which part of the view to use for the initial down event. A combination of (TOP, CENTER_VERTICAL, BOTTOM) and (LEFT, CENTER_HORIZONTAL, RIGHT)
param
toX Final location of the view after dragging
param
toY Final location of the view after dragging
return
distance in pixels covered by the drag
deprecated
{@link android.test.ActivityInstrumentationTestCase} is deprecated in favor of {@link android.test.ActivityInstrumentationTestCase2}, which provides more options for configuring the Activity under test

        return dragViewTo((InstrumentationTestCase) test, v, gravity, toX, toY);
    
public static intdragViewTo(InstrumentationTestCase test, android.view.View v, int gravity, int toX, int toY)
Simulate touching a view and dragging it to a specified location.

param
test The test case that is being run
param
v The view that should be dragged
param
gravity Which part of the view to use for the initial down event. A combination of (TOP, CENTER_VERTICAL, BOTTOM) and (LEFT, CENTER_HORIZONTAL, RIGHT)
param
toX Final location of the view after dragging
param
toY Final location of the view after dragging
return
distance in pixels covered by the drag

        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 voiddragViewToBottom(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.

param
test The test case that is being run
param
activity The activity that is in the foreground of the test case
param
v The view that should be dragged

        dragViewToBottom(test, activity, v, 4);
    
public static voiddragViewToBottom(ActivityInstrumentationTestCase test, android.view.View v, int stepCount)
Simulate touching the center of a view and dragging to the bottom of the screen.

param
test The test case that is being run
param
v The view that should be dragged
param
stepCount How many move steps to include in the drag
deprecated
{@link android.test.ActivityInstrumentationTestCase} is deprecated in favor of {@link android.test.ActivityInstrumentationTestCase2}, which provides more options for configuring the Activity under test

        dragViewToBottom(test, test.getActivity(), v, stepCount);
    
public static voiddragViewToBottom(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.

param
test The test case that is being run
param
activity The activity that is in the foreground of the test case
param
v The view that should be dragged
param
stepCount How many move steps to include in the drag

        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 voiddragViewToBottom(ActivityInstrumentationTestCase test, android.view.View v)
Simulate touching the center of a view and dragging to the bottom of the screen.

param
test The test case that is being run
param
v The view that should be dragged
deprecated
{@link android.test.ActivityInstrumentationTestCase} is deprecated in favor of {@link android.test.ActivityInstrumentationTestCase2}, which provides more options for configuring the Activity under test

        dragViewToBottom(test, test.getActivity(), v, 4);
    
public static voiddragViewToTop(ActivityInstrumentationTestCase test, android.view.View v)
Simulate touching the center of a view and dragging to the top of the screen.

param
test The test case that is being run
param
v The view that should be dragged
deprecated
{@link android.test.ActivityInstrumentationTestCase} is deprecated in favor of {@link android.test.ActivityInstrumentationTestCase2}, which provides more options for configuring the Activity under test

        dragViewToTop((InstrumentationTestCase) test, v, 4);
    
public static voiddragViewToTop(ActivityInstrumentationTestCase test, android.view.View v, int stepCount)
Simulate touching the center of a view and dragging to the top of the screen.

param
test The test case that is being run
param
v The view that should be dragged
param
stepCount How many move steps to include in the drag
deprecated
{@link android.test.ActivityInstrumentationTestCase} is deprecated in favor of {@link android.test.ActivityInstrumentationTestCase2}, which provides more options for configuring the Activity under test

        dragViewToTop((InstrumentationTestCase) test, v, stepCount);
    
public static voiddragViewToTop(InstrumentationTestCase test, android.view.View v)
Simulate touching the center of a view and dragging to the top of the screen.

param
test The test case that is being run
param
v The view that should be dragged

        dragViewToTop(test, v, 4);
    
public static voiddragViewToTop(InstrumentationTestCase test, android.view.View v, int stepCount)
Simulate touching the center of a view and dragging to the top of the screen.

param
test The test case that is being run
param
v The view that should be dragged
param
stepCount How many move steps to include in the drag

        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 intdragViewToX(ActivityInstrumentationTestCase test, android.view.View v, int gravity, int toX)
Simulate touching a view and dragging it to a specified location. Only moves horizontally.

param
test The test case that is being run
param
v The view that should be dragged
param
gravity Which part of the view to use for the initial down event. A combination of (TOP, CENTER_VERTICAL, BOTTOM) and (LEFT, CENTER_HORIZONTAL, RIGHT)
param
toX Final location of the view after dragging
return
distance in pixels covered by the drag
deprecated
{@link android.test.ActivityInstrumentationTestCase} is deprecated in favor of {@link android.test.ActivityInstrumentationTestCase2}, which provides more options for configuring the Activity under test

        return dragViewToX((InstrumentationTestCase) test, v, gravity, toX);
    
public static intdragViewToX(InstrumentationTestCase test, android.view.View v, int gravity, int toX)
Simulate touching a view and dragging it to a specified location. Only moves horizontally.

param
test The test case that is being run
param
v The view that should be dragged
param
gravity Which part of the view to use for the initial down event. A combination of (TOP, CENTER_VERTICAL, BOTTOM) and (LEFT, CENTER_HORIZONTAL, RIGHT)
param
toX Final location of the view after dragging
return
distance in pixels covered by the drag

        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 intdragViewToY(ActivityInstrumentationTestCase test, android.view.View v, int gravity, int toY)
Simulate touching a view and dragging it to a specified location. Only moves vertically.

param
test The test case that is being run
param
v The view that should be dragged
param
gravity Which part of the view to use for the initial down event. A combination of (TOP, CENTER_VERTICAL, BOTTOM) and (LEFT, CENTER_HORIZONTAL, RIGHT)
param
toY Final location of the view after dragging
return
distance in pixels covered by the drag
deprecated
{@link android.test.ActivityInstrumentationTestCase} is deprecated in favor of {@link android.test.ActivityInstrumentationTestCase2}, which provides more options for configuring the Activity under test

        return dragViewToY((InstrumentationTestCase) test, v, gravity, toY);
    
public static intdragViewToY(InstrumentationTestCase test, android.view.View v, int gravity, int toY)
Simulate touching a view and dragging it to a specified location. Only moves vertically.

param
test The test case that is being run
param
v The view that should be dragged
param
gravity Which part of the view to use for the initial down event. A combination of (TOP, CENTER_VERTICAL, BOTTOM) and (LEFT, CENTER_HORIZONTAL, RIGHT)
param
toY Final location of the view after dragging
return
distance in pixels covered by the drag

        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 voidgetStartLocation(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.

param
v View to find
param
gravity A combination of (TOP, CENTER_VERTICAL, BOTTOM) and (LEFT, CENTER_HORIZONTAL, RIGHT)
param
xy Result

        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 voidlongClickView(ActivityInstrumentationTestCase test, android.view.View v)
Simulate touching the center of a view, holding until it is a long press, and then releasing.

param
test The test case that is being run
param
v The view that should be clicked
deprecated
{@link android.test.ActivityInstrumentationTestCase} is deprecated in favor of {@link android.test.ActivityInstrumentationTestCase2}, which provides more options for configuring the Activity under test

        longClickView((InstrumentationTestCase) test, v);
    
public static voidlongClickView(InstrumentationTestCase test, android.view.View v)
Simulate touching the center of a view, holding until it is a long press, and then releasing.

param
test The test case that is being run
param
v The view that should be clicked

        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 voidscrollToBottom(ActivityInstrumentationTestCase test, android.view.ViewGroup v)
Scroll a ViewGroup to the bottom by repeatedly calling {@link #dragQuarterScreenUp(InstrumentationTestCase, Activity)}

param
test The test case that is being run
param
v The ViewGroup that should be dragged
deprecated
{@link android.test.ActivityInstrumentationTestCase} is deprecated in favor of {@link android.test.ActivityInstrumentationTestCase2}, which provides more options for configuring the Activity under test

        scrollToBottom(test, test.getActivity(), v);
    
public static voidscrollToBottom(InstrumentationTestCase test, android.app.Activity activity, android.view.ViewGroup v)
Scroll a ViewGroup to the bottom by repeatedly calling {@link #dragQuarterScreenUp(InstrumentationTestCase, Activity)}

param
test The test case that is being run
param
activity The activity that is in the foreground of the test case
param
v The ViewGroup that should be dragged

        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 voidscrollToTop(ActivityInstrumentationTestCase test, android.view.ViewGroup v)
Scroll a ViewGroup to the top by repeatedly calling {@link #dragQuarterScreenDown(InstrumentationTestCase, Activity)}

param
test The test case that is being run
param
v The ViewGroup that should be dragged
deprecated
{@link android.test.ActivityInstrumentationTestCase} is deprecated in favor of {@link android.test.ActivityInstrumentationTestCase2}, which provides more options for configuring the Activity under test

        scrollToTop(test, test.getActivity(), v);
    
public static voidscrollToTop(InstrumentationTestCase test, android.app.Activity activity, android.view.ViewGroup v)
Scroll a ViewGroup to the top by repeatedly calling {@link #dragQuarterScreenDown(InstrumentationTestCase, Activity)}

param
test The test case that is being run
param
activity The activity that is in the foreground of the test case
param
v The ViewGroup that should be dragged

        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 voidtapView(InstrumentationTestCase test, android.view.View v)
Simulate touching the center of a view and releasing quickly (before the tap timeout).

param
test The test case that is being run
param
v The view that should be clicked

        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 voidtouchAndCancelView(InstrumentationTestCase test, android.view.View v)
Simulate touching the center of a view and cancelling (so no onClick should fire, etc).

param
test The test case that is being run
param
v The view that should be clicked

        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();