Update the timestamp we send in touch events to be the more accurate timestamp we use

Summary: Use the more accurate timestamp that we have computed for the touch event rather than the event timestamp that Android provides.

Reviewed By: andreicoman11

Differential Revision: D3292705

fbshipit-source-id: dad082ab74406d391481d16cdac19629751aa1eb
This commit is contained in:
Dave Miller 2016-05-12 09:39:39 -07:00 коммит произвёл Facebook Github Bot 0
Родитель 2525feb37f
Коммит f2c1868b56
2 изменённых файлов: 12 добавлений и 3 удалений

Просмотреть файл

@ -62,7 +62,7 @@ import com.facebook.react.uimanager.PixelUtil;
touch.putDouble(LOCATION_X_KEY, PixelUtil.toDIPFromPixel(locationX)); touch.putDouble(LOCATION_X_KEY, PixelUtil.toDIPFromPixel(locationX));
touch.putDouble(LOCATION_Y_KEY, PixelUtil.toDIPFromPixel(locationY)); touch.putDouble(LOCATION_Y_KEY, PixelUtil.toDIPFromPixel(locationY));
touch.putInt(TARGET_KEY, reactTarget); touch.putInt(TARGET_KEY, reactTarget);
touch.putDouble(TIMESTAMP_KEY, motionEvent.getEventTime()); touch.putDouble(TIMESTAMP_KEY, event.getTimestampMs());
touch.putDouble(POINTER_IDENTIFIER_KEY, motionEvent.getPointerId(index)); touch.putDouble(POINTER_IDENTIFIER_KEY, motionEvent.getPointerId(index));
touches.pushMap(touch); touches.pushMap(touch);
} }

Просмотреть файл

@ -22,6 +22,7 @@ import com.facebook.react.bridge.ReactTestHelper;
import com.facebook.react.bridge.JavaOnlyArray; import com.facebook.react.bridge.JavaOnlyArray;
import com.facebook.react.bridge.JavaOnlyMap; import com.facebook.react.bridge.JavaOnlyMap;
import com.facebook.react.bridge.WritableArray; import com.facebook.react.bridge.WritableArray;
import com.facebook.react.common.SystemClock;
import com.facebook.react.uimanager.UIManagerModule; import com.facebook.react.uimanager.UIManagerModule;
import com.facebook.react.uimanager.DisplayMetricsHolder; import com.facebook.react.uimanager.DisplayMetricsHolder;
import com.facebook.react.uimanager.events.Event; import com.facebook.react.uimanager.events.Event;
@ -51,7 +52,7 @@ import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.verifyNoMoreInteractions; import static org.mockito.Mockito.verifyNoMoreInteractions;
import static org.mockito.Mockito.when; import static org.mockito.Mockito.when;
@PrepareForTest(Arguments.class) @PrepareForTest({Arguments.class, SystemClock.class})
@RunWith(RobolectricTestRunner.class) @RunWith(RobolectricTestRunner.class)
@PowerMockIgnore({"org.mockito.*", "org.robolectric.*", "android.*"}) @PowerMockIgnore({"org.mockito.*", "org.robolectric.*", "android.*"})
public class RootViewTest { public class RootViewTest {
@ -64,6 +65,7 @@ public class RootViewTest {
@Before @Before
public void setUp() { public void setUp() {
final long ts = SystemClock.nanoTime();
PowerMockito.mockStatic(Arguments.class); PowerMockito.mockStatic(Arguments.class);
PowerMockito.when(Arguments.createArray()).thenAnswer(new Answer<Object>() { PowerMockito.when(Arguments.createArray()).thenAnswer(new Answer<Object>() {
@Override @Override
@ -77,6 +79,13 @@ public class RootViewTest {
return new JavaOnlyMap(); return new JavaOnlyMap();
} }
}); });
PowerMockito.mockStatic(SystemClock.class);
PowerMockito.when(SystemClock.nanoTime()).thenAnswer(new Answer<Object>() {
@Override
public Object answer(InvocationOnMock invocation) throws Throwable {
return ts;
}
});
mCatalystInstanceMock = ReactTestHelper.createMockCatalystInstance(); mCatalystInstanceMock = ReactTestHelper.createMockCatalystInstance();
mReactContext = new ReactApplicationContext(RuntimeEnvironment.application); mReactContext = new ReactApplicationContext(RuntimeEnvironment.application);
@ -107,7 +116,7 @@ public class RootViewTest {
rootView.startReactApplication(instanceManager, ""); rootView.startReactApplication(instanceManager, "");
rootView.simulateAttachForTesting(); rootView.simulateAttachForTesting();
long ts = new Date().getTime(); long ts = SystemClock.nanoTime();
// Test ACTION_DOWN event // Test ACTION_DOWN event
rootView.onTouchEvent( rootView.onTouchEvent(