I have an instrumentation that I want to use to test my application, but I can't seem to get the pinch zoom to simulate properly. Here is my current code. The gist of it is this: push down both finger 1 and finger 2, move them both closer to one another, then release them both.
private void performZoomTest(int numUpdates) {
    long downTime = SystemClock.uptimeMillis();
    long eventTime = SystemClock.uptimeMillis();    
    float x1 = 0;
    float y1 = 0;
    Display main = activity.getWindowManager().getDefaultDisplay();
    float x2 = main.getWidth();
    float y2 = main.getHeight();
    float xstep = x2 / (2 * numUpdates);
    float ystep = y2 / (2 * numUpdates);
    int id1 = 0 << MotionEvent.ACTION_POINTER_ID_SHIFT;
    int id2 = 1 << MotionEvent.ACTION_POINTER_ID_SHIFT;
    MotionEvent event = 
        MotionEvent.obtain(downTime, eventTime, 
                   MotionEvent.ACTION_DOWN + id1,
                   x1, y1, 0);
    sendPointerSync(event);
    event = 
        MotionEvent.obtain(downTime, eventTime, 
                   MotionEvent.ACTION_DOWN + id2,
                   x2, y2, 0);
    sendPointerSync(event);
    waitForIdleSync();
    for (int i = 0; i < numUpdates; i++) {
        eventTime = SystemClock.uptimeMillis();
        Log.i("",Integer.toString(i));
        x1 += xstep;
        y1 += ystep;
        x2 -= xstep;
        y2 -= ystep;
        event = 
            MotionEvent.obtain(downTime, eventTime, 
                       MotionEvent.ACTION_MOVE + id1,
                       x1, y1, 0);
        Log.i("id1", Integer.toString(MotionEvent.ACTION_MOVE + id1));
        sendPointerSync(event);
        event = 
            MotionEvent.obtain(downTime, eventTime, 
                       MotionEvent.ACTION_MOVE + id2, 
                       x2, y2, 0);
        Log.i("id1", Integer.toString(MotionEvent.ACTION_MOVE + id2));
        sendPointerSync(event);
        waitForIdleSync();
    } 
    eventTime = SystemClock.uptimeMillis();
    event = 
        MotionEvent.obtain(downTime, eventTime, 
                   MotionEvent.ACTION_UP + id1, 
                   x1, y1, 0);
    sendPointerSync(event);
    event = 
        MotionEvent.obtain(downTime, eventTime, 
                   MotionEvent.ACTION_UP + id2, 
                   x2, y2, 0);
    sendPointerSync(event);
    waitForIdleSync();
}
The result seems to be that the application treats the two events as being distinct, and doesn't register them as a single event. Is there a better way of doing this?
take a look here: https://stackoverflow.com/questions/522312/best-practices-for-unit-testing-android-apps
I think multitouch unit testing is not possible with the standard Android framework.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With