|
|
/**
|
|
|
* Copyright (c) 2014-present, Facebook, Inc.
|
|
|
* All rights reserved.
|
|
|
* This source code is licensed under the BSD-style license found in the
|
|
|
* LICENSE file in the root directory of this source tree. An additional grant
|
|
|
* of patent rights can be found in the PATENTS file in the same directory.
|
|
|
*/
|
|
|
|
|
|
package com.facebook.react.tests;
|
|
|
|
|
|
import java.util.List;
|
|
|
|
|
|
import android.view.MotionEvent;
|
|
|
|
|
|
import com.facebook.react.testing.ReactInstanceSpecForTest;
|
|
|
import com.facebook.react.testing.ReactAppInstrumentationTestCase;
|
|
|
import com.facebook.react.testing.StringRecordingModule;
|
|
|
|
|
|
/**
|
|
|
* Test case for verifying that multitouch events are directed to the React's view touch handlers
|
|
|
* properly
|
|
|
*/
|
|
|
public class CatalystMultitouchHandlingTestCase extends ReactAppInstrumentationTestCase {
|
|
|
|
|
|
private final StringRecordingModule mRecordingModule = new StringRecordingModule();
|
|
|
|
|
|
@Override
|
|
|
protected String getReactApplicationKeyUnderTest() {
|
|
|
return "MultitouchHandlingTestAppModule";
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
protected ReactInstanceSpecForTest createReactInstanceSpecForTest() {
|
|
|
return new ReactInstanceSpecForTest()
|
|
|
.addNativeModule(mRecordingModule);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* In this test case we send pre-recorded stream of pinch out gesture and verify that we have
|
|
|
* recorded important touch events in JS module
|
|
|
*/
|
|
|
public void testMultitouchEvents() throws InterruptedException {
|
|
|
generateRecordedPinchTouchEvents();
|
|
|
waitForBridgeAndUIIdle();
|
|
|
|
|
|
// Expect to receive at least 5 events (DOWN for each pointer, UP for each pointer and at least
|
|
|
// one MOVE event with both pointers down)
|
|
|
List<String> calls = mRecordingModule.getCalls();
|
|
|
|
|
|
int moveWithBothPointersEventIndex = -1;
|
|
|
int startEventIndex = -1;
|
|
|
int startExtraPointerEventIndex = -1;
|
|
|
int endEventIndex = -1;
|
|
|
int endExtraPointerEventIndex = -1;
|
|
|
|
|
|
for (int i = 0; i < calls.size(); i++) {
|
|
|
String call = calls.get(i);
|
|
|
if (call.equals("start;ExtraPointer")) {
|
|
|
assertEquals(-1, startExtraPointerEventIndex);
|
|
|
startExtraPointerEventIndex = i;
|
|
|
} else if (call.equals("end;ExtraPointer")) {
|
|
|
assertEquals(-1, endExtraPointerEventIndex);
|
|
|
endExtraPointerEventIndex = i;
|
|
|
} else if (call.equals("start;1")) {
|
|
|
assertEquals(-1, startEventIndex);
|
|
|
startEventIndex = i;
|
|
|
} else if (call.equals("end;0")) {
|
|
|
assertEquals(-1, endEventIndex);
|
|
|
endEventIndex = i;
|
|
|
} else if (call.equals("move;2")) {
|
|
|
// this will happen more than once, let's just capture the last occurrence
|
|
|
moveWithBothPointersEventIndex = i;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
assertEquals(0, startEventIndex);
|
|
|
assertTrue(-1 != startExtraPointerEventIndex);
|
|
|
assertTrue(-1 != moveWithBothPointersEventIndex);
|
|
|
assertTrue(-1 != endExtraPointerEventIndex);
|
|
|
assertTrue(startExtraPointerEventIndex < moveWithBothPointersEventIndex);
|
|
|
assertTrue(endExtraPointerEventIndex > moveWithBothPointersEventIndex);
|
|
|
assertEquals(calls.size() - 1, endEventIndex);
|
|
|
}
|
|
|
|
|
|
private MotionEvent.PointerProperties createPointerProps(int id, int toolType) {
|
|
|
MotionEvent.PointerProperties pointerProps = new MotionEvent.PointerProperties();
|
|
|
pointerProps.id = id;
|
|
|
pointerProps.toolType = toolType;
|
|
|
return pointerProps;
|
|
|
}
|
|
|
|
|
|
private MotionEvent.PointerCoords createPointerCoords(float x, float y) {
|
|
|
MotionEvent.PointerCoords pointerCoords = new MotionEvent.PointerCoords();
|
|
|
pointerCoords.x = x;
|
|
|
pointerCoords.y = y;
|
|
|
return pointerCoords;
|
|
|
}
|
|
|
|
|
|
private void dispatchEvent(
|
|
|
final int action,
|
|
|
final long start,
|
|
|
final long when,
|
|
|
final int pointerCount,
|
|
|
final MotionEvent.PointerProperties[] pointerProps,
|
|
|
final MotionEvent.PointerCoords[] pointerCoords) {
|
|
|
getRootView().post(
|
|
|
new Runnable() {
|
|
|
@Override
|
|
|
public void run() {
|
|
|
MotionEvent event =
|
|
|
MotionEvent.obtain(start, when, action, pointerCount, pointerProps, pointerCoords, 0, 0, 1.0f, 1.0f, 0, 0, 0, 0);
|
|
|
getRootView().dispatchTouchEvent(event);
|
|
|
event.recycle();
|
|
|
}
|
|
|
});
|
|
|
getInstrumentation().waitForIdleSync();
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* This method "replay" multi-touch gesture recorded with modified TouchesHelper class that
|
|
|
* generated this piece of code (see https://phabricator.fb.com/P19756940).
|
|
|
* This is not intended to be copied/reused and once we need to have more multitouch gestures
|
|
|
* in instrumentation tests we should either:
|
|
|
* - implement nice generator similar to {@link SingleTouchGestureGenerator}
|
|
|
* - implement gesture recorded that will record touch data using arbitrary format and then read
|
|
|
* this recorded touch sequence during tests instead of generating code like this
|
|
|
*/
|
|
|
private void generateRecordedPinchTouchEvents() {
|
|
|
// START OF GENERATED CODE
|
|
|
{
|
|
|
MotionEvent.PointerProperties[] pointerProps = new MotionEvent.PointerProperties[1];
|
|
|
MotionEvent.PointerCoords[] pointerCoords = new MotionEvent.PointerCoords[1];
|
|
|
pointerProps[0] = createPointerProps(0, 1);
|
|
|
pointerCoords[0] = createPointerCoords(268.0f, 347.0f);
|
|
|
dispatchEvent(MotionEvent.ACTION_DOWN, 446560605, 446560605, 1, pointerProps, pointerCoords);
|
|
|
}
|
|
|
|
|
|
{
|
|
|
MotionEvent.PointerProperties[] pointerProps = new MotionEvent.PointerProperties[1];
|
|
|
MotionEvent.PointerCoords[] pointerCoords = new MotionEvent.PointerCoords[1];
|
|
|
pointerProps[0] = createPointerProps(0, 1);
|
|
|
pointerCoords[0] = createPointerCoords(267.0f, 346.0f);
|
|
|
dispatchEvent(MotionEvent.ACTION_MOVE, 446560605, 446560630, 1, pointerProps, pointerCoords);
|
|
|
}
|
|
|
|
|
|
{
|
|
|
MotionEvent.PointerProperties[] pointerProps = new MotionEvent.PointerProperties[2];
|
|
|
MotionEvent.PointerCoords[] pointerCoords = new MotionEvent.PointerCoords[2];
|
|
|
pointerProps[0] = createPointerProps(0, 1);
|
|
|
pointerCoords[0] = createPointerCoords(267.0f, 346.0f);
|
|
|
pointerProps[1] = createPointerProps(1, 1);
|
|
|
pointerCoords[1] = createPointerCoords(225.0f, 542.0f);
|
|
|
dispatchEvent(MotionEvent.ACTION_POINTER_DOWN | (1 << MotionEvent.ACTION_POINTER_INDEX_SHIFT), 446560605, 446560630, 2, pointerProps, pointerCoords);
|
|
|
}
|
|
|
|
|
|
{
|
|
|
MotionEvent.PointerProperties[] pointerProps = new MotionEvent.PointerProperties[2];
|
|
|
MotionEvent.PointerCoords[] pointerCoords = new MotionEvent.PointerCoords[2];
|
|
|
pointerProps[0] = createPointerProps(0, 1);
|
|
|
pointerCoords[0] = createPointerCoords(266.0f, 345.0f);
|
|
|
pointerProps[1] = createPointerProps(1, 1);
|
|
|
pointerCoords[1] = createPointerCoords(225.0f, 542.0f);
|
|
|
dispatchEvent(MotionEvent.ACTION_MOVE, 446560605, 446560647, 2, pointerProps, pointerCoords);
|
|
|
}
|
|
|
|
|
|
{
|
|
|
MotionEvent.PointerProperties[] pointerProps = new MotionEvent.PointerProperties[2];
|
|
|
MotionEvent.PointerCoords[] pointerCoords = new MotionEvent.PointerCoords[2];
|
|
|
pointerProps[0] = createPointerProps(0, 1);
|
|
|
pointerCoords[0] = createPointerCoords(265.0f, 344.0f);
|
|
|
pointerProps[1] = createPointerProps(1, 1);
|
|
|
pointerCoords[1] = createPointerCoords(224.0f, 541.0f);
|
|
|
dispatchEvent(MotionEvent.ACTION_MOVE, 446560605, 446560664, 2, pointerProps, pointerCoords);
|
|
|
}
|
|
|
|
|
|
{
|
|
|
MotionEvent.PointerProperties[] pointerProps = new MotionEvent.PointerProperties[2];
|
|
|
MotionEvent.PointerCoords[] pointerCoords = new MotionEvent.PointerCoords[2];
|
|
|
pointerProps[0] = createPointerProps(0, 1);
|
|
|
pointerCoords[0] = createPointerCoords(264.0f, 342.0f);
|
|
|
pointerProps[1] = createPointerProps(1, 1);
|
|
|
pointerCoords[1] = createPointerCoords(223.0f, 540.0f);
|
|
|
dispatchEvent(MotionEvent.ACTION_MOVE, 446560605, 446560681, 2, pointerProps, pointerCoords);
|
|
|
}
|
|
|
|
|
|
{
|
|
|
MotionEvent.PointerProperties[] pointerProps = new MotionEvent.PointerProperties[2];
|
|
|
MotionEvent.PointerCoords[] pointerCoords = new MotionEvent.PointerCoords[2];
|
|
|
pointerProps[0] = createPointerProps(0, 1);
|
|
|
pointerCoords[0] = createPointerCoords(263.0f, 340.0f);
|
|
|
pointerProps[1] = createPointerProps(1, 1);
|
|
|
pointerCoords[1] = createPointerCoords(222.0f, 539.0f);
|
|
|
dispatchEvent(MotionEvent.ACTION_MOVE, 446560605, 446560698, 2, pointerProps, pointerCoords);
|
|
|
}
|
|
|
|
|
|
{
|
|
|
MotionEvent.PointerProperties[] pointerProps = new MotionEvent.PointerProperties[2];
|
|
|
MotionEvent.PointerCoords[] pointerCoords = new MotionEvent.PointerCoords[2];
|
|
|
pointerProps[0] = createPointerProps(0, 1);
|
|
|
pointerCoords[0] = createPointerCoords(262.0f, 337.0f);
|
|
|
pointerProps[1] = createPointerProps(1, 1);
|
|
|
pointerCoords[1] = createPointerCoords(221.0f, 538.0f);
|
|
|
dispatchEvent(MotionEvent.ACTION_MOVE, 446560605, 446560714, 2, pointerProps, pointerCoords);
|
|
|
}
|
|
|
|
|
|
{
|
|
|
MotionEvent.PointerProperties[] pointerProps = new MotionEvent.PointerProperties[2];
|
|
|
MotionEvent.PointerCoords[] pointerCoords = new MotionEvent.PointerCoords[2];
|
|
|
pointerProps[0] = createPointerProps(0, 1);
|
|
|
pointerCoords[0] = createPointerCoords(262.0f, 333.0f);
|
|
|
pointerProps[1] = createPointerProps(1, 1);
|
|
|
pointerCoords[1] = createPointerCoords(220.0f, 537.0f);
|
|
|
dispatchEvent(MotionEvent.ACTION_MOVE, 446560605, 446560731, 2, pointerProps, pointerCoords);
|
|
|
}
|
|
|
|
|
|
{
|
|
|
MotionEvent.PointerProperties[] pointerProps = new MotionEvent.PointerProperties[2];
|
|
|
MotionEvent.PointerCoords[] pointerCoords = new MotionEvent.PointerCoords[2];
|
|
|
pointerProps[0] = createPointerProps(0, 1);
|
|
|
pointerCoords[0] = createPointerCoords(261.0f, 328.0f);
|
|
|
pointerProps[1] = createPointerProps(1, 1);
|
|
|
pointerCoords[1] = createPointerCoords(219.0f, 536.0f);
|
|
|
dispatchEvent(MotionEvent.ACTION_MOVE, 446560605, 446560748, 2, pointerProps, pointerCoords);
|
|
|
}
|
|
|
|
|
|
{
|
|
|
MotionEvent.PointerProperties[] pointerProps = new MotionEvent.PointerProperties[2];
|
|
|
MotionEvent.PointerCoords[] pointerCoords = new MotionEvent.PointerCoords[2];
|
|
|
pointerProps[0] = createPointerProps(0, 1);
|
|
|
pointerCoords[0] = createPointerCoords(260.0f, 321.0f);
|
|
|
pointerProps[1] = createPointerProps(1, 1);
|
|
|
pointerCoords[1] = createPointerCoords(218.0f, 536.0f);
|
|
|
dispatchEvent(MotionEvent.ACTION_MOVE, 446560605, 446560765, 2, pointerProps, pointerCoords);
|
|
|
}
|
|
|
|
|
|
{
|
|
|
MotionEvent.PointerProperties[] pointerProps = new MotionEvent.PointerProperties[2];
|
|
|
MotionEvent.PointerCoords[] pointerCoords = new MotionEvent.PointerCoords[2];
|
|
|
pointerProps[0] = createPointerProps(0, 1);
|
|
|
pointerCoords[0] = createPointerCoords(260.0f, 313.0f);
|
|
|
pointerProps[1] = createPointerProps(1, 1);
|
|
|
pointerCoords[1] = createPointerCoords(216.0f, 536.0f);
|
|
|
dispatchEvent(MotionEvent.ACTION_MOVE, 446560605, 446560781, 2, pointerProps, pointerCoords);
|
|
|
}
|
|
|
|
|
|
{
|
|
|
MotionEvent.PointerProperties[] pointerProps = new MotionEvent.PointerProperties[2];
|
|
|
MotionEvent.PointerCoords[] pointerCoords = new MotionEvent.PointerCoords[2];
|
|
|
pointerProps[0] = createPointerProps(0, 1);
|
|
|
pointerCoords[0] = createPointerCoords(260.0f, 304.0f);
|
|
|
pointerProps[1] = createPointerProps(1, 1);
|
|
|
pointerCoords[1] = createPointerCoords(214.0f, 537.0f);
|
|
|
dispatchEvent(MotionEvent.ACTION_MOVE, 446560605, 446560798, 2, pointerProps, pointerCoords);
|
|
|
}
|
|
|
|
|
|
{
|
|
|
MotionEvent.PointerProperties[] pointerProps = new MotionEvent.PointerProperties[2];
|
|
|
MotionEvent.PointerCoords[] pointerCoords = new MotionEvent.PointerCoords[2];
|
|
|
pointerProps[0] = createPointerProps(0, 1);
|
|
|
pointerCoords[0] = createPointerCoords(260.0f, 295.0f);
|
|
|
pointerProps[1] = createPointerProps(1, 1);
|
|
|
pointerCoords[1] = createPointerCoords(211.0f, 539.0f);
|
|
|
dispatchEvent(MotionEvent.ACTION_MOVE, 446560605, 446560815, 2, pointerProps, pointerCoords);
|
|
|
}
|
|
|
|
|
|
{
|
|
|
MotionEvent.PointerProperties[] pointerProps = new MotionEvent.PointerProperties[2];
|
|
|
MotionEvent.PointerCoords[] pointerCoords = new MotionEvent.PointerCoords[2];
|
|
|
pointerProps[0] = createPointerProps(0, 1);
|
|
|
pointerCoords[0] = createPointerCoords(261.0f, 285.0f);
|
|
|
pointerProps[1] = createPointerProps(1, 1);
|
|
|
pointerCoords[1] = createPointerCoords(208.0f, 542.0f);
|
|
|
dispatchEvent(MotionEvent.ACTION_MOVE, 446560605, 446560832, 2, pointerProps, pointerCoords);
|
|
|
}
|
|
|
|
|
|
{
|
|
|
MotionEvent.PointerProperties[] pointerProps = new MotionEvent.PointerProperties[2];
|
|
|
MotionEvent.PointerCoords[] pointerCoords = new MotionEvent.PointerCoords[2];
|
|
|
pointerProps[0] = createPointerProps(0, 1);
|
|
|
pointerCoords[0] = createPointerCoords(264.0f, 274.0f);
|
|
|
pointerProps[1] = createPointerProps(1, 1);
|
|
|
pointerCoords[1] = createPointerCoords(203.0f, 547.0f);
|
|
|
dispatchEvent(MotionEvent.ACTION_MOVE, 446560605, 446560849, 2, pointerProps, pointerCoords);
|
|
|
}
|
|
|
|
|
|
{
|
|
|
MotionEvent.PointerProperties[] pointerProps = new MotionEvent.PointerProperties[2];
|
|
|
MotionEvent.PointerCoords[] pointerCoords = new MotionEvent.PointerCoords[2];
|
|
|
pointerProps[0] = createPointerProps(0, 1);
|
|
|
pointerCoords[0] = createPointerCoords(266.0f, 264.0f);
|
|
|
pointerProps[1] = createPointerProps(1, 1);
|
|
|
pointerCoords[1] = createPointerCoords(199.0f, 551.0f);
|
|
|
dispatchEvent(MotionEvent.ACTION_MOVE, 446560605, 446560865, 2, pointerProps, pointerCoords);
|
|
|
}
|
|
|
|
|
|
{
|
|
|
MotionEvent.PointerProperties[] pointerProps = new MotionEvent.PointerProperties[2];
|
|
|
MotionEvent.PointerCoords[] pointerCoords = new MotionEvent.PointerCoords[2];
|
|
|
pointerProps[0] = createPointerProps(0, 1);
|
|
|
pointerCoords[0] = createPointerCoords(269.0f, 254.0f);
|
|
|
pointerProps[1] = createPointerProps(1, 1);
|
|
|
pointerCoords[1] = createPointerCoords(194.0f, 556.0f);
|
|
|
dispatchEvent(MotionEvent.ACTION_MOVE, 446560605, 446560882, 2, pointerProps, pointerCoords);
|
|
|
}
|
|
|
|
|
|
{
|
|
|
MotionEvent.PointerProperties[] pointerProps = new MotionEvent.PointerProperties[2];
|
|
|
MotionEvent.PointerCoords[] pointerCoords = new MotionEvent.PointerCoords[2];
|
|
|
pointerProps[0] = createPointerProps(0, 1);
|
|
|
pointerCoords[0] = createPointerCoords(273.0f, 245.0f);
|
|
|
pointerProps[1] = createPointerProps(1, 1);
|
|
|
pointerCoords[1] = createPointerCoords(190.0f, 561.0f);
|
|
|
dispatchEvent(MotionEvent.ACTION_MOVE, 446560605, 446560899, 2, pointerProps, pointerCoords);
|
|
|
}
|
|
|
|
|
|
{
|
|
|
MotionEvent.PointerProperties[] pointerProps = new MotionEvent.PointerProperties[2];
|
|
|
MotionEvent.PointerCoords[] pointerCoords = new MotionEvent.PointerCoords[2];
|
|
|
pointerProps[0] = createPointerProps(0, 1);
|
|
|
pointerCoords[0] = createPointerCoords(276.0f, 236.0f);
|
|
|
pointerProps[1] = createPointerProps(1, 1);
|
|
|
pointerCoords[1] = createPointerCoords(186.0f, 567.0f);
|
|
|
dispatchEvent(MotionEvent.ACTION_MOVE, 446560605, 446560916, 2, pointerProps, pointerCoords);
|
|
|
}
|
|
|
|
|
|
{
|
|
|
MotionEvent.PointerProperties[] pointerProps = new MotionEvent.PointerProperties[2];
|
|
|
MotionEvent.PointerCoords[] pointerCoords = new MotionEvent.PointerCoords[2];
|
|
|
pointerProps[0] = createPointerProps(0, 1);
|
|
|
pointerCoords[0] = createPointerCoords(280.0f, 227.0f);
|
|
|
pointerProps[1] = createPointerProps(1, 1);
|
|
|
pointerCoords[1] = createPointerCoords(183.0f, 573.0f);
|
|
|
dispatchEvent(MotionEvent.ACTION_MOVE, 446560605, 446560933, 2, pointerProps, pointerCoords);
|
|
|
}
|
|
|
|
|
|
{
|
|
|
MotionEvent.PointerProperties[] pointerProps = new MotionEvent.PointerProperties[2];
|
|
|
MotionEvent.PointerCoords[] pointerCoords = new MotionEvent.PointerCoords[2];
|
|
|
pointerProps[0] = createPointerProps(0, 1);
|
|
|
pointerCoords[0] = createPointerCoords(283.0f, 219.0f);
|
|
|
pointerProps[1] = createPointerProps(1, 1);
|
|
|
pointerCoords[1] = createPointerCoords(181.0f, 579.0f);
|
|
|
dispatchEvent(MotionEvent.ACTION_MOVE, 446560605, 446560949, 2, pointerProps, pointerCoords);
|
|
|
}
|
|
|
|
|
|
{
|
|
|
MotionEvent.PointerProperties[] pointerProps = new MotionEvent.PointerProperties[2];
|
|
|
MotionEvent.PointerCoords[] pointerCoords = new MotionEvent.PointerCoords[2];
|
|
|
pointerProps[0] = createPointerProps(0, 1);
|
|
|
pointerCoords[0] = createPointerCoords(287.0f, 211.0f);
|
|
|
pointerProps[1] = createPointerProps(1, 1);
|
|
|
pointerCoords[1] = createPointerCoords(179.0f, 584.0f);
|
|
|
dispatchEvent(MotionEvent.ACTION_MOVE, 446560605, 446560966, 2, pointerProps, pointerCoords);
|
|
|
}
|
|
|
|
|
|
{
|
|
|
MotionEvent.PointerProperties[] pointerProps = new MotionEvent.PointerProperties[2];
|
|
|
MotionEvent.PointerCoords[] pointerCoords = new MotionEvent.PointerCoords[2];
|
|
|
pointerProps[0] = createPointerProps(0, 1);
|
|
|
pointerCoords[0] = createPointerCoords(291.0f, 202.0f);
|
|
|
pointerProps[1] = createPointerProps(1, 1);
|
|
|
pointerCoords[1] = createPointerCoords(177.0f, 589.0f);
|
|
|
dispatchEvent(MotionEvent.ACTION_MOVE, 446560605, 446560983, 2, pointerProps, pointerCoords);
|
|
|
}
|
|
|
|
|
|
{
|
|
|
MotionEvent.PointerProperties[] pointerProps = new MotionEvent.PointerProperties[2];
|
|
|
MotionEvent.PointerCoords[] pointerCoords = new MotionEvent.PointerCoords[2];
|
|
|
pointerProps[0] = createPointerProps(0, 1);
|
|
|
pointerCoords[0] = createPointerCoords(296.0f, 193.0f);
|
|
|
pointerProps[1] = createPointerProps(1, 1);
|
|
|
pointerCoords[1] = createPointerCoords(175.0f, 593.0f);
|
|
|
dispatchEvent(MotionEvent.ACTION_MOVE, 446560605, 446561000, 2, pointerProps, pointerCoords);
|
|
|
}
|
|
|
|
|
|
{
|
|
|
MotionEvent.PointerProperties[] pointerProps = new MotionEvent.PointerProperties[2];
|
|
|
MotionEvent.PointerCoords[] pointerCoords = new MotionEvent.PointerCoords[2];
|
|
|
pointerProps[0] = createPointerProps(0, 1);
|
|
|
pointerCoords[0] = createPointerCoords(301.0f, 184.0f);
|
|
|
pointerProps[1] = createPointerProps(1, 1);
|
|
|
pointerCoords[1] = createPointerCoords(174.0f, 598.0f);
|
|
|
dispatchEvent(MotionEvent.ACTION_MOVE, 446560605, 446561016, 2, pointerProps, pointerCoords);
|
|
|
}
|
|
|
|
|
|
{
|
|
|
MotionEvent.PointerProperties[] pointerProps = new MotionEvent.PointerProperties[2];
|
|
|
MotionEvent.PointerCoords[] pointerCoords = new MotionEvent.PointerCoords[2];
|
|
|
pointerProps[0] = createPointerProps(0, 1);
|
|
|
pointerCoords[0] = createPointerCoords(307.0f, 176.0f);
|
|
|
pointerProps[1] = createPointerProps(1, 1);
|
|
|
pointerCoords[1] = createPointerCoords(173.0f, 603.0f);
|
|
|
dispatchEvent(MotionEvent.ACTION_MOVE, 446560605, 446561033, 2, pointerProps, pointerCoords);
|
|
|
}
|
|
|
|
|
|
{
|
|
|
MotionEvent.PointerProperties[] pointerProps = new MotionEvent.PointerProperties[2];
|
|
|
MotionEvent.PointerCoords[] pointerCoords = new MotionEvent.PointerCoords[2];
|
|
|
pointerProps[0] = createPointerProps(0, 1);
|
|
|
pointerCoords[0] = createPointerCoords(313.0f, 168.0f);
|
|
|
pointerProps[1] = createPointerProps(1, 1);
|
|
|
pointerCoords[1] = createPointerCoords(172.0f, 608.0f);
|
|
|
dispatchEvent(MotionEvent.ACTION_MOVE, 446560605, 446561050, 2, pointerProps, pointerCoords);
|
|
|
}
|
|
|
|
|
|
{
|
|
|
MotionEvent.PointerProperties[] pointerProps = new MotionEvent.PointerProperties[2];
|
|
|
MotionEvent.PointerCoords[] pointerCoords = new MotionEvent.PointerCoords[2];
|
|
|
pointerProps[0] = createPointerProps(0, 1);
|
|
|
pointerCoords[0] = createPointerCoords(317.0f, 160.0f);
|
|
|
pointerProps[1] = createPointerProps(1, 1);
|
|
|
pointerCoords[1] = createPointerCoords(171.0f, 613.0f);
|
|
|
dispatchEvent(MotionEvent.ACTION_MOVE, 446560605, 446561067, 2, pointerProps, pointerCoords);
|
|
|
}
|
|
|
|
|
|
{
|
|
|
MotionEvent.PointerProperties[] pointerProps = new MotionEvent.PointerProperties[2];
|
|
|
MotionEvent.PointerCoords[] pointerCoords = new MotionEvent.PointerCoords[2];
|
|
|
pointerProps[0] = createPointerProps(0, 1);
|
|
|
pointerCoords[0] = createPointerCoords(320.0f, 154.0f);
|
|
|
pointerProps[1] = createPointerProps(1, 1);
|
|
|
pointerCoords[1] = createPointerCoords(170.0f, 619.0f);
|
|
|
dispatchEvent(MotionEvent.ACTION_MOVE, 446560605, 446561084, 2, pointerProps, pointerCoords);
|
|
|
}
|
|
|
|
|
|
{
|
|
|
MotionEvent.PointerProperties[] pointerProps = new MotionEvent.PointerProperties[2];
|
|
|
MotionEvent.PointerCoords[] pointerCoords = new MotionEvent.PointerCoords[2];
|
|
|
pointerProps[0] = createPointerProps(0, 1);
|
|
|
pointerCoords[0] = createPointerCoords(323.0f, 149.0f);
|
|
|
pointerProps[1] = createPointerProps(1, 1);
|
|
|
pointerCoords[1] = createPointerCoords(169.0f, 624.0f);
|
|
|
dispatchEvent(MotionEvent.ACTION_MOVE, 446560605, 446561100, 2, pointerProps, pointerCoords);
|
|
|
}
|
|
|
|
|
|
{
|
|
|
MotionEvent.PointerProperties[] pointerProps = new MotionEvent.PointerProperties[2];
|
|
|
MotionEvent.PointerCoords[] pointerCoords = new MotionEvent.PointerCoords[2];
|
|
|
pointerProps[0] = createPointerProps(0, 1);
|
|
|
pointerCoords[0] = createPointerCoords(325.0f, 145.0f);
|
|
|
pointerProps[1] = createPointerProps(1, 1);
|
|
|
pointerCoords[1] = createPointerCoords(168.0f, 628.0f);
|
|
|
dispatchEvent(MotionEvent.ACTION_MOVE, 446560605, 446561117, 2, pointerProps, pointerCoords);
|
|
|
}
|
|
|
|
|
|
{
|
|
|
MotionEvent.PointerProperties[] pointerProps = new MotionEvent.PointerProperties[2];
|
|
|
MotionEvent.PointerCoords[] pointerCoords = new MotionEvent.PointerCoords[2];
|
|
|
pointerProps[0] = createPointerProps(0, 1);
|
|
|
pointerCoords[0] = createPointerCoords(328.0f, 141.0f);
|
|
|
pointerProps[1] = createPointerProps(1, 1);
|
|
|
pointerCoords[1] = createPointerCoords(167.0f, 632.0f);
|
|
|
dispatchEvent(MotionEvent.ACTION_MOVE, 446560605, 446561134, 2, pointerProps, pointerCoords);
|
|
|
}
|
|
|
|
|
|
{
|
|
|
MotionEvent.PointerProperties[] pointerProps = new MotionEvent.PointerProperties[2];
|
|
|
MotionEvent.PointerCoords[] pointerCoords = new MotionEvent.PointerCoords[2];
|
|
|
pointerProps[0] = createPointerProps(0, 1);
|
|
|
pointerCoords[0] = createPointerCoords(331.0f, 137.0f);
|
|
|
pointerProps[1] = createPointerProps(1, 1);
|
|
|
pointerCoords[1] = createPointerCoords(166.0f, 636.0f);
|
|
|
dispatchEvent(MotionEvent.ACTION_MOVE, 446560605, 446561151, 2, pointerProps, pointerCoords);
|
|
|
}
|
|
|
|
|
|
{
|
|
|
MotionEvent.PointerProperties[] pointerProps = new MotionEvent.PointerProperties[2];
|
|
|
MotionEvent.PointerCoords[] pointerCoords = new MotionEvent.PointerCoords[2];
|
|
|
pointerProps[0] = createPointerProps(0, 1);
|
|
|
pointerCoords[0] = createPointerCoords(334.0f, 134.0f);
|
|
|
pointerProps[1] = createPointerProps(1, 1);
|
|
|
pointerCoords[1] = createPointerCoords(165.0f, 639.0f);
|
|
|
dispatchEvent(MotionEvent.ACTION_MOVE, 446560605, 446561167, 2, pointerProps, pointerCoords);
|
|
|
}
|
|
|
|
|
|
{
|
|
|
MotionEvent.PointerProperties[] pointerProps = new MotionEvent.PointerProperties[2];
|
|
|
MotionEvent.PointerCoords[] pointerCoords = new MotionEvent.PointerCoords[2];
|
|
|
pointerProps[0] = createPointerProps(0, 1);
|
|
|
pointerCoords[0] = createPointerCoords(337.0f, 131.0f);
|
|
|
pointerProps[1] = createPointerProps(1, 1);
|
|
|
pointerCoords[1] = createPointerCoords(164.0f, 643.0f);
|
|
|
dispatchEvent(MotionEvent.ACTION_MOVE, 446560605, 446561184, 2, pointerProps, pointerCoords);
|
|
|
}
|
|
|
|
|
|
{
|
|
|
MotionEvent.PointerProperties[] pointerProps = new MotionEvent.PointerProperties[2];
|
|
|
MotionEvent.PointerCoords[] pointerCoords = new MotionEvent.PointerCoords[2];
|
|
|
pointerProps[0] = createPointerProps(0, 1);
|
|
|
pointerCoords[0] = createPointerCoords(338.0f, 128.0f);
|
|
|
pointerProps[1] = createPointerProps(1, 1);
|
|
|
pointerCoords[1] = createPointerCoords(164.0f, 646.0f);
|
|
|
dispatchEvent(MotionEvent.ACTION_MOVE, 446560605, 446561201, 2, pointerProps, pointerCoords);
|
|
|
}
|
|
|
|
|
|
{
|
|
|
MotionEvent.PointerProperties[] pointerProps = new MotionEvent.PointerProperties[2];
|
|
|
MotionEvent.PointerCoords[] pointerCoords = new MotionEvent.PointerCoords[2];
|
|
|
pointerProps[0] = createPointerProps(0, 1);
|
|
|
pointerCoords[0] = createPointerCoords(340.0f, 126.0f);
|
|
|
pointerProps[1] = createPointerProps(1, 1);
|
|
|
pointerCoords[1] = createPointerCoords(164.0f, 649.0f);
|
|
|
dispatchEvent(MotionEvent.ACTION_MOVE, 446560605, 446561218, 2, pointerProps, pointerCoords);
|
|
|
}
|
|
|
|
|
|
{
|
|
|
MotionEvent.PointerProperties[] pointerProps = new MotionEvent.PointerProperties[2];
|
|
|
MotionEvent.PointerCoords[] pointerCoords = new MotionEvent.PointerCoords[2];
|
|
|
pointerProps[0] = createPointerProps(0, 1);
|
|
|
pointerCoords[0] = createPointerCoords(341.0f, 124.0f);
|
|
|
pointerProps[1] = createPointerProps(1, 1);
|
|
|
pointerCoords[1] = createPointerCoords(163.0f, 652.0f);
|
|
|
dispatchEvent(MotionEvent.ACTION_MOVE, 446560605, 446561234, 2, pointerProps, pointerCoords);
|
|
|
}
|
|
|
|
|
|
{
|
|
|
MotionEvent.PointerProperties[] pointerProps = new MotionEvent.PointerProperties[2];
|
|
|
MotionEvent.PointerCoords[] pointerCoords = new MotionEvent.PointerCoords[2];
|
|
|
pointerProps[0] = createPointerProps(0, 1);
|
|
|
pointerCoords[0] = createPointerCoords(342.0f, 122.0f);
|
|
|
pointerProps[1] = createPointerProps(1, 1);
|
|
|
pointerCoords[1] = createPointerCoords(163.0f, 655.0f);
|
|
|
dispatchEvent(MotionEvent.ACTION_MOVE, 446560605, 446561251, 2, pointerProps, pointerCoords);
|
|
|
}
|
|
|
|
|
|
{
|
|
|
MotionEvent.PointerProperties[] pointerProps = new MotionEvent.PointerProperties[2];
|
|
|
MotionEvent.PointerCoords[] pointerCoords = new MotionEvent.PointerCoords[2];
|
|
|
pointerProps[0] = createPointerProps(0, 1);
|
|
|
pointerCoords[0] = createPointerCoords(343.0f, 120.0f);
|
|
|
pointerProps[1] = createPointerProps(1, 1);
|
|
|
pointerCoords[1] = createPointerCoords(162.0f, 659.0f);
|
|
|
dispatchEvent(MotionEvent.ACTION_MOVE, 446560605, 446561268, 2, pointerProps, pointerCoords);
|
|
|
}
|
|
|
|
|
|
{
|
|
|
MotionEvent.PointerProperties[] pointerProps = new MotionEvent.PointerProperties[2];
|
|
|
MotionEvent.PointerCoords[] pointerCoords = new MotionEvent.PointerCoords[2];
|
|
|
pointerProps[0] = createPointerProps(0, 1);
|
|
|
pointerCoords[0] = createPointerCoords(344.0f, 118.0f);
|
|
|
pointerProps[1] = createPointerProps(1, 1);
|
|
|
pointerCoords[1] = createPointerCoords(161.0f, 664.0f);
|
|
|
dispatchEvent(MotionEvent.ACTION_MOVE, 446560605, 446561285, 2, pointerProps, pointerCoords);
|
|
|
}
|
|
|
|
|
|
{
|
|
|
MotionEvent.PointerProperties[] pointerProps = new MotionEvent.PointerProperties[2];
|
|
|
MotionEvent.PointerCoords[] pointerCoords = new MotionEvent.PointerCoords[2];
|
|
|
pointerProps[0] = createPointerProps(0, 1);
|
|
|
pointerCoords[0] = createPointerCoords(345.0f, 116.0f);
|
|
|
pointerProps[1] = createPointerProps(1, 1);
|
|
|
pointerCoords[1] = createPointerCoords(160.0f, 667.0f);
|
|
|
dispatchEvent(MotionEvent.ACTION_MOVE, 446560605, 446561302, 2, pointerProps, pointerCoords);
|
|
|
}
|
|
|
|
|
|
{
|
|
|
MotionEvent.PointerProperties[] pointerProps = new MotionEvent.PointerProperties[2];
|
|
|
MotionEvent.PointerCoords[] pointerCoords = new MotionEvent.PointerCoords[2];
|
|
|
pointerProps[0] = createPointerProps(0, 1);
|
|
|
pointerCoords[0] = createPointerCoords(346.0f, 115.0f);
|
|
|
pointerProps[1] = createPointerProps(1, 1);
|
|
|
pointerCoords[1] = createPointerCoords(158.0f, 670.0f);
|
|
|
dispatchEvent(MotionEvent.ACTION_MOVE, 446560605, 446561318, 2, pointerProps, pointerCoords);
|
|
|
}
|
|
|
|
|
|
{
|
|
|
MotionEvent.PointerProperties[] pointerProps = new MotionEvent.PointerProperties[2];
|
|
|
MotionEvent.PointerCoords[] pointerCoords = new MotionEvent.PointerCoords[2];
|
|
|
pointerProps[0] = createPointerProps(0, 1);
|
|
|
pointerCoords[0] = createPointerCoords(347.0f, 114.0f);
|
|
|
pointerProps[1] = createPointerProps(1, 1);
|
|
|
pointerCoords[1] = createPointerCoords(157.0f, 673.0f);
|
|
|
dispatchEvent(MotionEvent.ACTION_MOVE, 446560605, 446561335, 2, pointerProps, pointerCoords);
|
|
|
}
|
|
|
|
|
|
{
|
|
|
MotionEvent.PointerProperties[] pointerProps = new MotionEvent.PointerProperties[2];
|
|
|
MotionEvent.PointerCoords[] pointerCoords = new MotionEvent.PointerCoords[2];
|
|
|
pointerProps[0] = createPointerProps(0, 1);
|
|
|
pointerCoords[0] = createPointerCoords(348.0f, 113.0f);
|
|
|
pointerProps[1] = createPointerProps(1, 1);
|
|
|
pointerCoords[1] = createPointerCoords(156.0f, 676.0f);
|
|
|
dispatchEvent(MotionEvent.ACTION_MOVE, 446560605, 446561352, 2, pointerProps, pointerCoords);
|
|
|
}
|
|
|
|
|
|
{
|
|
|
MotionEvent.PointerProperties[] pointerProps = new MotionEvent.PointerProperties[2];
|
|
|
MotionEvent.PointerCoords[] pointerCoords = new MotionEvent.PointerCoords[2];
|
|
|
pointerProps[0] = createPointerProps(0, 1);
|
|
|
pointerCoords[0] = createPointerCoords(348.0f, 112.0f);
|
|
|
pointerProps[1] = createPointerProps(1, 1);
|
|
|
pointerCoords[1] = createPointerCoords(155.0f, 677.0f);
|
|
|
dispatchEvent(MotionEvent.ACTION_MOVE, 446560605, 446561369, 2, pointerProps, pointerCoords);
|
|
|
}
|
|
|
|
|
|
{
|
|
|
MotionEvent.PointerProperties[] pointerProps = new MotionEvent.PointerProperties[2];
|
|
|
MotionEvent.PointerCoords[] pointerCoords = new MotionEvent.PointerCoords[2];
|
|
|
pointerProps[0] = createPointerProps(0, 1);
|
|
|
pointerCoords[0] = createPointerCoords(349.0f, 111.0f);
|
|
|
pointerProps[1] = createPointerProps(1, 1);
|
|
|
pointerCoords[1] = createPointerCoords(154.0f, 678.0f);
|
|
|
dispatchEvent(MotionEvent.ACTION_MOVE, 446560605, 446561386, 2, pointerProps, pointerCoords);
|
|
|
}
|
|
|
|
|
|
{
|
|
|
MotionEvent.PointerProperties[] pointerProps = new MotionEvent.PointerProperties[2];
|
|
|
MotionEvent.PointerCoords[] pointerCoords = new MotionEvent.PointerCoords[2];
|
|
|
pointerProps[0] = createPointerProps(0, 1);
|
|
|
pointerCoords[0] = createPointerCoords(349.0f, 110.0f);
|
|
|
pointerProps[1] = createPointerProps(1, 1);
|
|
|
pointerCoords[1] = createPointerCoords(153.0f, 679.0f);
|
|
|
dispatchEvent(MotionEvent.ACTION_MOVE, 446560605, 446561402, 2, pointerProps, pointerCoords);
|
|
|
}
|
|
|
|
|
|
{
|
|
|
MotionEvent.PointerProperties[] pointerProps = new MotionEvent.PointerProperties[2];
|
|
|
MotionEvent.PointerCoords[] pointerCoords = new MotionEvent.PointerCoords[2];
|
|
|
pointerProps[0] = createPointerProps(0, 1);
|
|
|
pointerCoords[0] = createPointerCoords(349.0f, 109.0f);
|
|
|
pointerProps[1] = createPointerProps(1, 1);
|
|
|
pointerCoords[1] = createPointerCoords(152.0f, 680.0f);
|
|
|
dispatchEvent(MotionEvent.ACTION_MOVE, 446560605, 446561419, 2, pointerProps, pointerCoords);
|
|
|
}
|
|
|
|
|
|
{
|
|
|
MotionEvent.PointerProperties[] pointerProps = new MotionEvent.PointerProperties[2];
|
|
|
MotionEvent.PointerCoords[] pointerCoords = new MotionEvent.PointerCoords[2];
|
|
|
pointerProps[0] = createPointerProps(0, 1);
|
|
|
pointerCoords[0] = createPointerCoords(349.0f, 110.0f);
|
|
|
pointerProps[1] = createPointerProps(1, 1);
|
|
|
pointerCoords[1] = createPointerCoords(151.0f, 680.0f);
|
|
|
dispatchEvent(MotionEvent.ACTION_MOVE, 446560605, 446561435, 2, pointerProps, pointerCoords);
|
|
|
}
|
|
|
|
|
|
{
|
|
|
MotionEvent.PointerProperties[] pointerProps = new MotionEvent.PointerProperties[2];
|
|
|
MotionEvent.PointerCoords[] pointerCoords = new MotionEvent.PointerCoords[2];
|
|
|
pointerProps[0] = createPointerProps(0, 1);
|
|
|
pointerCoords[0] = createPointerCoords(349.0f, 110.0f);
|
|
|
pointerProps[1] = createPointerProps(1, 1);
|
|
|
pointerCoords[1] = createPointerCoords(151.0f, 680.0f);
|
|
|
dispatchEvent(MotionEvent.ACTION_POINTER_UP | (0 << MotionEvent.ACTION_POINTER_INDEX_SHIFT), 446560605, 446561443, 2, pointerProps, pointerCoords);
|
|
|
}
|
|
|
|
|
|
{
|
|
|
MotionEvent.PointerProperties[] pointerProps = new MotionEvent.PointerProperties[1];
|
|
|
MotionEvent.PointerCoords[] pointerCoords = new MotionEvent.PointerCoords[1];
|
|
|
pointerProps[0] = createPointerProps(0, 1);
|
|
|
pointerCoords[0] = createPointerCoords(151.0f, 680.0f);
|
|
|
dispatchEvent(MotionEvent.ACTION_UP, 446560605, 446561451, 1, pointerProps, pointerCoords);
|
|
|
}
|
|
|
// END OF GENERATED CODE
|
|
|
}
|
|
|
|
|
|
} |
...
|
...
|
|