From f2c1868b56bdfc8b0d6f448733848eafed2cd440 Mon Sep 17 00:00:00 2001 From: Dave Miller Date: Thu, 12 May 2016 09:39:39 -0700 Subject: [PATCH] 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 --- .../react/uimanager/events/TouchesHelper.java | 2 +- .../test/java/com/facebook/react/RootViewTest.java | 13 +++++++++++-- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/TouchesHelper.java b/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/TouchesHelper.java index d312a402026..acf6f9626ed 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/TouchesHelper.java +++ b/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/TouchesHelper.java @@ -62,7 +62,7 @@ import com.facebook.react.uimanager.PixelUtil; touch.putDouble(LOCATION_X_KEY, PixelUtil.toDIPFromPixel(locationX)); touch.putDouble(LOCATION_Y_KEY, PixelUtil.toDIPFromPixel(locationY)); 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)); touches.pushMap(touch); } diff --git a/ReactAndroid/src/test/java/com/facebook/react/RootViewTest.java b/ReactAndroid/src/test/java/com/facebook/react/RootViewTest.java index b34737780f0..2eb7f5ed87d 100644 --- a/ReactAndroid/src/test/java/com/facebook/react/RootViewTest.java +++ b/ReactAndroid/src/test/java/com/facebook/react/RootViewTest.java @@ -22,6 +22,7 @@ import com.facebook.react.bridge.ReactTestHelper; import com.facebook.react.bridge.JavaOnlyArray; import com.facebook.react.bridge.JavaOnlyMap; import com.facebook.react.bridge.WritableArray; +import com.facebook.react.common.SystemClock; import com.facebook.react.uimanager.UIManagerModule; import com.facebook.react.uimanager.DisplayMetricsHolder; 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.when; -@PrepareForTest(Arguments.class) +@PrepareForTest({Arguments.class, SystemClock.class}) @RunWith(RobolectricTestRunner.class) @PowerMockIgnore({"org.mockito.*", "org.robolectric.*", "android.*"}) public class RootViewTest { @@ -64,6 +65,7 @@ public class RootViewTest { @Before public void setUp() { + final long ts = SystemClock.nanoTime(); PowerMockito.mockStatic(Arguments.class); PowerMockito.when(Arguments.createArray()).thenAnswer(new Answer() { @Override @@ -77,6 +79,13 @@ public class RootViewTest { return new JavaOnlyMap(); } }); + PowerMockito.mockStatic(SystemClock.class); + PowerMockito.when(SystemClock.nanoTime()).thenAnswer(new Answer() { + @Override + public Object answer(InvocationOnMock invocation) throws Throwable { + return ts; + } + }); mCatalystInstanceMock = ReactTestHelper.createMockCatalystInstance(); mReactContext = new ReactApplicationContext(RuntimeEnvironment.application); @@ -107,7 +116,7 @@ public class RootViewTest { rootView.startReactApplication(instanceManager, ""); rootView.simulateAttachForTesting(); - long ts = new Date().getTime(); + long ts = SystemClock.nanoTime(); // Test ACTION_DOWN event rootView.onTouchEvent(