From 4f5c2b48fe9e0e9d2f5024838ee16006f35ba326 Mon Sep 17 00:00:00 2001 From: Mike Lambert Date: Thu, 7 Jul 2016 05:50:58 -0700 Subject: [PATCH] Fix timestamps on android touch events to use milliseconds, to be consistent with iOS Summary: So `PanReponder.onPanResponderRelease/onPanResponderTerminate` receive a `gestureState` object containing a `onPanResponderTerminate.vx/vy` property. On Android and iOS, they appear to be orders of magnitude different, which appear to be due to the different scale of timestamps that are used when generating touch events. This pull request fixes the timestamps to be milliseconds on both platforms (since I assume iOS is the more authoritative one, and is the one that `react-native-viewpager`'s vx thresholds written written to compare against.) As far as I can tell, the RN code doesn't use the `vx/vy` properties, so they should be okay. And looks like the RN code only cares about relative values of `startTimestamp/currentTimestamp/previousTimestamp` though, so should be fine too. it's quite possible there will be downstream android breakage with this change, particularly for those who are already compensating for the RN discrepancy. Closes https://github.com/facebook/react-native/pull/8199 Differential Revision: D3528215 Pulled By: dmmiller fbshipit-source-id: cbd25bb7e7bb87fa77b661a057643a6ea97bc3f1 --- .../facebook/react/tests/TextInputTestCase.java | 12 ++++++------ .../com/facebook/react/common/SystemClock.java | 4 ++++ .../com/facebook/react/modules/core/Timing.java | 2 +- .../react/uimanager/JSTouchDispatcher.java | 12 ++++++------ .../facebook/react/uimanager/OnLayoutEvent.java | 2 +- .../views/drawer/ReactDrawerLayoutManager.java | 8 ++++---- .../facebook/react/views/image/ReactImageView.java | 10 +++++----- .../react/views/modal/ReactModalHostManager.java | 4 ++-- .../react/views/picker/ReactPickerManager.java | 2 +- .../recyclerview/RecyclerViewBackedScrollView.java | 4 ++-- .../react/views/scroll/ReactScrollViewHelper.java | 2 +- .../react/views/slider/ReactSliderManager.java | 4 ++-- .../swiperefresh/SwipeRefreshLayoutManager.java | 2 +- .../react/views/switchview/ReactSwitchManager.java | 2 +- .../views/textinput/ReactTextInputManager.java | 14 +++++++------- .../react/views/toolbar/ReactToolbarManager.java | 4 ++-- .../react/views/viewpager/ReactViewPager.java | 6 +++--- .../react/views/webview/ReactWebViewManager.java | 8 ++++---- .../test/java/com/facebook/react/RootViewTest.java | 6 +++--- .../react/modules/timing/TimingModuleTest.java | 2 +- 20 files changed, 57 insertions(+), 53 deletions(-) diff --git a/ReactAndroid/src/androidTest/java/com/facebook/react/tests/TextInputTestCase.java b/ReactAndroid/src/androidTest/java/com/facebook/react/tests/TextInputTestCase.java index 9558a5d912af60..44c2321b2aadf3 100644 --- a/ReactAndroid/src/androidTest/java/com/facebook/react/tests/TextInputTestCase.java +++ b/ReactAndroid/src/androidTest/java/com/facebook/react/tests/TextInputTestCase.java @@ -116,7 +116,7 @@ public void testMetionsInputColors() throws Throwable { eventDispatcher.dispatchEvent( new ReactTextChangedEvent( reactEditText.getId(), - SystemClock.nanoTime(), + SystemClock.elapsedRealtime(), newText.toString(), (int) PixelUtil.toDIPFromPixel(contentWidth), (int) PixelUtil.toDIPFromPixel(contentHeight), @@ -125,7 +125,7 @@ public void testMetionsInputColors() throws Throwable { eventDispatcher.dispatchEvent( new ReactTextInputEvent( reactEditText.getId(), - SystemClock.nanoTime(), + SystemClock.elapsedRealtime(), newText.toString(), "", start, @@ -150,7 +150,7 @@ public void testMetionsInputColors() throws Throwable { eventDispatcher.dispatchEvent( new ReactTextChangedEvent( reactEditText.getId(), - SystemClock.nanoTime(), + SystemClock.elapsedRealtime(), newText.toString(), (int) PixelUtil.toDIPFromPixel(contentWidth), (int) PixelUtil.toDIPFromPixel(contentHeight), @@ -159,7 +159,7 @@ public void testMetionsInputColors() throws Throwable { eventDispatcher.dispatchEvent( new ReactTextInputEvent( reactEditText.getId(), - SystemClock.nanoTime(), + SystemClock.elapsedRealtime(), moreText, "", start, @@ -184,7 +184,7 @@ public void testMetionsInputColors() throws Throwable { eventDispatcher.dispatchEvent( new ReactTextChangedEvent( reactEditText.getId(), - SystemClock.nanoTime(), + SystemClock.elapsedRealtime(), newText.toString(), (int) PixelUtil.toDIPFromPixel(contentWidth), (int) PixelUtil.toDIPFromPixel(contentHeight), @@ -193,7 +193,7 @@ public void testMetionsInputColors() throws Throwable { eventDispatcher.dispatchEvent( new ReactTextInputEvent( reactEditText.getId(), - SystemClock.nanoTime(), + SystemClock.elapsedRealtime(), moreText, "", start, diff --git a/ReactAndroid/src/main/java/com/facebook/react/common/SystemClock.java b/ReactAndroid/src/main/java/com/facebook/react/common/SystemClock.java index 29c31b416c5f75..1af4b55368bfb9 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/common/SystemClock.java +++ b/ReactAndroid/src/main/java/com/facebook/react/common/SystemClock.java @@ -22,4 +22,8 @@ public static long currentTimeMillis() { public static long nanoTime() { return System.nanoTime(); } + + public static long elapsedRealtime() { + return android.os.SystemClock.elapsedRealtime(); + } } diff --git a/ReactAndroid/src/main/java/com/facebook/react/modules/core/Timing.java b/ReactAndroid/src/main/java/com/facebook/react/modules/core/Timing.java index d0ee51cfcd191f..394d025fa87006 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/modules/core/Timing.java +++ b/ReactAndroid/src/main/java/com/facebook/react/modules/core/Timing.java @@ -244,7 +244,7 @@ public void createTimer( return; } - long initialTargetTime = SystemClock.nanoTime() / 1000000 + adjustedDuration; + long initialTargetTime = SystemClock.elapsedRealtime() + adjustedDuration; Timer timer = new Timer(executorToken, callbackID, initialTargetTime, duration, repeat); synchronized (mTimerGuard) { mTimers.add(timer); diff --git a/ReactAndroid/src/main/java/com/facebook/react/uimanager/JSTouchDispatcher.java b/ReactAndroid/src/main/java/com/facebook/react/uimanager/JSTouchDispatcher.java index bbe5fc99530861..a31179baaca7d5 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/uimanager/JSTouchDispatcher.java +++ b/ReactAndroid/src/main/java/com/facebook/react/uimanager/JSTouchDispatcher.java @@ -82,7 +82,7 @@ public void handleTouchEvent(MotionEvent ev, EventDispatcher eventDispatcher) { eventDispatcher.dispatchEvent( TouchEvent.obtain( mTargetTag, - SystemClock.nanoTime(), + SystemClock.elapsedRealtime(), TouchEventType.START, ev, mTargetCoordinates[0], @@ -105,7 +105,7 @@ public void handleTouchEvent(MotionEvent ev, EventDispatcher eventDispatcher) { eventDispatcher.dispatchEvent( TouchEvent.obtain( mTargetTag, - SystemClock.nanoTime(), + SystemClock.elapsedRealtime(), TouchEventType.END, ev, mTargetCoordinates[0], @@ -117,7 +117,7 @@ public void handleTouchEvent(MotionEvent ev, EventDispatcher eventDispatcher) { eventDispatcher.dispatchEvent( TouchEvent.obtain( mTargetTag, - SystemClock.nanoTime(), + SystemClock.elapsedRealtime(), TouchEventType.MOVE, ev, mTargetCoordinates[0], @@ -128,7 +128,7 @@ public void handleTouchEvent(MotionEvent ev, EventDispatcher eventDispatcher) { eventDispatcher.dispatchEvent( TouchEvent.obtain( mTargetTag, - SystemClock.nanoTime(), + SystemClock.elapsedRealtime(), TouchEventType.START, ev, mTargetCoordinates[0], @@ -139,7 +139,7 @@ public void handleTouchEvent(MotionEvent ev, EventDispatcher eventDispatcher) { eventDispatcher.dispatchEvent( TouchEvent.obtain( mTargetTag, - SystemClock.nanoTime(), + SystemClock.elapsedRealtime(), TouchEventType.END, ev, mTargetCoordinates[0], @@ -180,7 +180,7 @@ private void dispatchCancelEvent(MotionEvent androidEvent, EventDispatcher event Assertions.assertNotNull(eventDispatcher).dispatchEvent( TouchEvent.obtain( mTargetTag, - SystemClock.nanoTime(), + SystemClock.elapsedRealtime(), TouchEventType.CANCEL, androidEvent, mTargetCoordinates[0], diff --git a/ReactAndroid/src/main/java/com/facebook/react/uimanager/OnLayoutEvent.java b/ReactAndroid/src/main/java/com/facebook/react/uimanager/OnLayoutEvent.java index c2b5c8a6e9d8b9..19bf172aec52b4 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/uimanager/OnLayoutEvent.java +++ b/ReactAndroid/src/main/java/com/facebook/react/uimanager/OnLayoutEvent.java @@ -45,7 +45,7 @@ private OnLayoutEvent() { } protected void init(int viewTag, int x, int y, int width, int height) { - super.init(viewTag, SystemClock.nanoTime()); + super.init(viewTag, SystemClock.elapsedRealtime()); mX = x; mY = y; mWidth = width; diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/drawer/ReactDrawerLayoutManager.java b/ReactAndroid/src/main/java/com/facebook/react/views/drawer/ReactDrawerLayoutManager.java index 0595d0fd07627c..8c78b2c346efba 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/drawer/ReactDrawerLayoutManager.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/drawer/ReactDrawerLayoutManager.java @@ -188,25 +188,25 @@ public DrawerEventEmitter(DrawerLayout drawerLayout, EventDispatcher eventDispat @Override public void onDrawerSlide(View view, float v) { mEventDispatcher.dispatchEvent( - new DrawerSlideEvent(mDrawerLayout.getId(), SystemClock.nanoTime(), v)); + new DrawerSlideEvent(mDrawerLayout.getId(), SystemClock.elapsedRealtime(), v)); } @Override public void onDrawerOpened(View view) { mEventDispatcher.dispatchEvent( - new DrawerOpenedEvent(mDrawerLayout.getId(), SystemClock.nanoTime())); + new DrawerOpenedEvent(mDrawerLayout.getId(), SystemClock.elapsedRealtime())); } @Override public void onDrawerClosed(View view) { mEventDispatcher.dispatchEvent( - new DrawerClosedEvent(mDrawerLayout.getId(), SystemClock.nanoTime())); + new DrawerClosedEvent(mDrawerLayout.getId(), SystemClock.elapsedRealtime())); } @Override public void onDrawerStateChanged(int i) { mEventDispatcher.dispatchEvent( - new DrawerStateChangedEvent(mDrawerLayout.getId(), SystemClock.nanoTime(), i)); + new DrawerStateChangedEvent(mDrawerLayout.getId(), SystemClock.elapsedRealtime(), i)); } } } diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/image/ReactImageView.java b/ReactAndroid/src/main/java/com/facebook/react/views/image/ReactImageView.java index a864b140c81379..42e262e2ef3bc6 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/image/ReactImageView.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/image/ReactImageView.java @@ -192,7 +192,7 @@ public void setShouldNotifyLoadEvents(boolean shouldNotify) { @Override public void onSubmit(String id, Object callerContext) { mEventDispatcher.dispatchEvent( - new ImageLoadEvent(getId(), SystemClock.nanoTime(), ImageLoadEvent.ON_LOAD_START)); + new ImageLoadEvent(getId(), SystemClock.elapsedRealtime(), ImageLoadEvent.ON_LOAD_START)); } @Override @@ -202,18 +202,18 @@ public void onFinalImageSet( @Nullable Animatable animatable) { if (imageInfo != null) { mEventDispatcher.dispatchEvent( - new ImageLoadEvent(getId(), SystemClock.nanoTime(), ImageLoadEvent.ON_LOAD)); + new ImageLoadEvent(getId(), SystemClock.elapsedRealtime(), ImageLoadEvent.ON_LOAD)); mEventDispatcher.dispatchEvent( - new ImageLoadEvent(getId(), SystemClock.nanoTime(), ImageLoadEvent.ON_LOAD_END)); + new ImageLoadEvent(getId(), SystemClock.elapsedRealtime(), ImageLoadEvent.ON_LOAD_END)); } } @Override public void onFailure(String id, Throwable throwable) { mEventDispatcher.dispatchEvent( - new ImageLoadEvent(getId(), SystemClock.nanoTime(), ImageLoadEvent.ON_ERROR)); + new ImageLoadEvent(getId(), SystemClock.elapsedRealtime(), ImageLoadEvent.ON_ERROR)); mEventDispatcher.dispatchEvent( - new ImageLoadEvent(getId(), SystemClock.nanoTime(), ImageLoadEvent.ON_LOAD_END)); + new ImageLoadEvent(getId(), SystemClock.elapsedRealtime(), ImageLoadEvent.ON_LOAD_END)); } }; } diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/modal/ReactModalHostManager.java b/ReactAndroid/src/main/java/com/facebook/react/views/modal/ReactModalHostManager.java index 2fb42c594f6b27..c7b2635966e99d 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/modal/ReactModalHostManager.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/modal/ReactModalHostManager.java @@ -85,14 +85,14 @@ protected void addEventEmitters( new ReactModalHostView.OnRequestCloseListener() { @Override public void onRequestClose(DialogInterface dialog) { - dispatcher.dispatchEvent(new RequestCloseEvent(view.getId(), SystemClock.nanoTime())); + dispatcher.dispatchEvent(new RequestCloseEvent(view.getId(), SystemClock.elapsedRealtime())); } }); view.setOnShowListener( new DialogInterface.OnShowListener() { @Override public void onShow(DialogInterface dialog) { - dispatcher.dispatchEvent(new ShowEvent(view.getId(), SystemClock.nanoTime())); + dispatcher.dispatchEvent(new ShowEvent(view.getId(), SystemClock.elapsedRealtime())); } }); } diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/picker/ReactPickerManager.java b/ReactAndroid/src/main/java/com/facebook/react/views/picker/ReactPickerManager.java index 11ea4c839fc974..e0a348d529e728 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/picker/ReactPickerManager.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/picker/ReactPickerManager.java @@ -157,7 +157,7 @@ public PickerEventEmitter(ReactPicker reactPicker, EventDispatcher eventDispatch @Override public void onItemSelected(int position) { mEventDispatcher.dispatchEvent( new PickerItemSelectEvent( - mReactPicker.getId(), SystemClock.nanoTime(), position)); + mReactPicker.getId(), SystemClock.elapsedRealtime(), position)); } } } diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/recyclerview/RecyclerViewBackedScrollView.java b/ReactAndroid/src/main/java/com/facebook/react/views/recyclerview/RecyclerViewBackedScrollView.java index df3f2c57542ab3..657a227f1d3dae 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/recyclerview/RecyclerViewBackedScrollView.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/recyclerview/RecyclerViewBackedScrollView.java @@ -344,7 +344,7 @@ protected void onScrollChanged(int l, int t, int oldl, int oldt) { ((ReactContext) getContext()).getNativeModule(UIManagerModule.class).getEventDispatcher() .dispatchEvent(ScrollEvent.obtain( getId(), - SystemClock.nanoTime(), + SystemClock.elapsedRealtime(), ScrollEventType.SCROLL, 0, /* offsetX = 0, horizontal scrolling only */ calculateAbsoluteOffset(), @@ -359,7 +359,7 @@ private void onTotalChildrenHeightChange(int newTotalChildrenHeight) { ((ReactContext) getContext()).getNativeModule(UIManagerModule.class).getEventDispatcher() .dispatchEvent(new ContentSizeChangeEvent( getId(), - SystemClock.nanoTime(), + SystemClock.elapsedRealtime(), getWidth(), newTotalChildrenHeight)); } diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactScrollViewHelper.java b/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactScrollViewHelper.java index fd46f677b7954b..5443bc33fc21a8 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactScrollViewHelper.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactScrollViewHelper.java @@ -57,7 +57,7 @@ private static void emitScrollEvent(ViewGroup scrollView, ScrollEventType scroll reactContext.getNativeModule(UIManagerModule.class).getEventDispatcher().dispatchEvent( ScrollEvent.obtain( scrollView.getId(), - SystemClock.nanoTime(), + SystemClock.elapsedRealtime(), scrollEventType, scrollView.getScrollX(), scrollView.getScrollY(), diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/slider/ReactSliderManager.java b/ReactAndroid/src/main/java/com/facebook/react/views/slider/ReactSliderManager.java index ec3f66d8073c02..a38bf2496e0512 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/slider/ReactSliderManager.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/slider/ReactSliderManager.java @@ -81,7 +81,7 @@ public void onProgressChanged(SeekBar seekbar, int progress, boolean fromUser) { reactContext.getNativeModule(UIManagerModule.class).getEventDispatcher().dispatchEvent( new ReactSliderEvent( seekbar.getId(), - SystemClock.nanoTime(), + SystemClock.elapsedRealtime(), ((ReactSlider)seekbar).toRealProgress(progress), fromUser)); } @@ -96,7 +96,7 @@ public void onStopTrackingTouch(SeekBar seekbar) { reactContext.getNativeModule(UIManagerModule.class).getEventDispatcher().dispatchEvent( new ReactSlidingCompleteEvent( seekbar.getId(), - SystemClock.nanoTime(), + SystemClock.elapsedRealtime(), ((ReactSlider)seekbar).toRealProgress(seekbar.getProgress()))); } }; diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/swiperefresh/SwipeRefreshLayoutManager.java b/ReactAndroid/src/main/java/com/facebook/react/views/swiperefresh/SwipeRefreshLayoutManager.java index 1ae2bacf5a36b9..1ff9d0edb3d0b4 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/swiperefresh/SwipeRefreshLayoutManager.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/swiperefresh/SwipeRefreshLayoutManager.java @@ -89,7 +89,7 @@ protected void addEventEmitters( @Override public void onRefresh() { reactContext.getNativeModule(UIManagerModule.class).getEventDispatcher() - .dispatchEvent(new RefreshEvent(view.getId(), SystemClock.nanoTime())); + .dispatchEvent(new RefreshEvent(view.getId(), SystemClock.elapsedRealtime())); } }); } diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/switchview/ReactSwitchManager.java b/ReactAndroid/src/main/java/com/facebook/react/views/switchview/ReactSwitchManager.java index 1db17fc222d11c..c3945d3f2f7f3e 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/switchview/ReactSwitchManager.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/switchview/ReactSwitchManager.java @@ -78,7 +78,7 @@ public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { reactContext.getNativeModule(UIManagerModule.class).getEventDispatcher().dispatchEvent( new ReactSwitchEvent( buttonView.getId(), - SystemClock.nanoTime(), + SystemClock.elapsedRealtime(), isChecked)); } }; diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputManager.java b/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputManager.java index ebb82644490040..3ca02b999be06e 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputManager.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputManager.java @@ -567,7 +567,7 @@ public void onTextChanged(CharSequence s, int start, int before, int count) { mEventDispatcher.dispatchEvent( new ReactTextChangedEvent( mEditText.getId(), - SystemClock.nanoTime(), + SystemClock.elapsedRealtime(), s.toString(), (int) PixelUtil.toDIPFromPixel(contentWidth), (int) PixelUtil.toDIPFromPixel(contentHeight), @@ -576,7 +576,7 @@ public void onTextChanged(CharSequence s, int start, int before, int count) { mEventDispatcher.dispatchEvent( new ReactTextInputEvent( mEditText.getId(), - SystemClock.nanoTime(), + SystemClock.elapsedRealtime(), newText, oldText, start, @@ -602,17 +602,17 @@ public void onFocusChange(View v, boolean hasFocus) { eventDispatcher.dispatchEvent( new ReactTextInputFocusEvent( editText.getId(), - SystemClock.nanoTime())); + SystemClock.elapsedRealtime())); } else { eventDispatcher.dispatchEvent( new ReactTextInputBlurEvent( editText.getId(), - SystemClock.nanoTime())); + SystemClock.elapsedRealtime())); eventDispatcher.dispatchEvent( new ReactTextInputEndEditingEvent( editText.getId(), - SystemClock.nanoTime(), + SystemClock.elapsedRealtime(), editText.getText().toString())); } } @@ -630,7 +630,7 @@ public boolean onEditorAction(TextView v, int actionId, KeyEvent keyEvent) { eventDispatcher.dispatchEvent( new ReactTextInputSubmitEditingEvent( editText.getId(), - SystemClock.nanoTime(), + SystemClock.elapsedRealtime(), editText.getText().toString())); } if (actionId == EditorInfo.IME_ACTION_NEXT || @@ -667,7 +667,7 @@ public void onSelectionChanged(int start, int end) { mEventDispatcher.dispatchEvent( new ReactTextInputSelectionEvent( mReactEditText.getId(), - SystemClock.nanoTime(), + SystemClock.elapsedRealtime(), start, end ) diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/toolbar/ReactToolbarManager.java b/ReactAndroid/src/main/java/com/facebook/react/views/toolbar/ReactToolbarManager.java index 9f162f9f0b4145..eb8981870cce57 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/toolbar/ReactToolbarManager.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/toolbar/ReactToolbarManager.java @@ -131,7 +131,7 @@ protected void addEventEmitters(final ThemedReactContext reactContext, final Rea @Override public void onClick(View v) { mEventDispatcher.dispatchEvent( - new ToolbarClickEvent(view.getId(), SystemClock.nanoTime(), -1)); + new ToolbarClickEvent(view.getId(), SystemClock.elapsedRealtime(), -1)); } }); @@ -142,7 +142,7 @@ public boolean onMenuItemClick(MenuItem menuItem) { mEventDispatcher.dispatchEvent( new ToolbarClickEvent( view.getId(), - SystemClock.nanoTime(), + SystemClock.elapsedRealtime(), menuItem.getOrder())); return true; } diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/viewpager/ReactViewPager.java b/ReactAndroid/src/main/java/com/facebook/react/views/viewpager/ReactViewPager.java index 8b86beb76f6721..8ffb06faee6171 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/viewpager/ReactViewPager.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/viewpager/ReactViewPager.java @@ -91,14 +91,14 @@ private class PageChangeListener implements OnPageChangeListener { @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { mEventDispatcher.dispatchEvent( - new PageScrollEvent(getId(), SystemClock.nanoTime(), position, positionOffset)); + new PageScrollEvent(getId(), SystemClock.elapsedRealtime(), position, positionOffset)); } @Override public void onPageSelected(int position) { if (!mIsCurrentItemFromJs) { mEventDispatcher.dispatchEvent( - new PageSelectedEvent(getId(), SystemClock.nanoTime(), position)); + new PageSelectedEvent(getId(), SystemClock.elapsedRealtime(), position)); } } @@ -119,7 +119,7 @@ public void onPageScrollStateChanged(int state) { throw new IllegalStateException("Unsupported pageScrollState"); } mEventDispatcher.dispatchEvent( - new PageScrollStateChangedEvent(getId(), SystemClock.nanoTime(), pageScrollState)); + new PageScrollStateChangedEvent(getId(), SystemClock.elapsedRealtime(), pageScrollState)); } } diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/webview/ReactWebViewManager.java b/ReactAndroid/src/main/java/com/facebook/react/views/webview/ReactWebViewManager.java index 11350d16e24639..6e88217e4d6a2a 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/webview/ReactWebViewManager.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/webview/ReactWebViewManager.java @@ -107,7 +107,7 @@ public void onPageStarted(WebView webView, String url, Bitmap favicon) { webView, new TopLoadingStartEvent( webView.getId(), - SystemClock.nanoTime(), + SystemClock.elapsedRealtime(), createWebViewEvent(webView, url))); } @@ -130,7 +130,7 @@ public void onReceivedError( dispatchEvent( webView, - new TopLoadingErrorEvent(webView.getId(), SystemClock.nanoTime(), eventData)); + new TopLoadingErrorEvent(webView.getId(), SystemClock.elapsedRealtime(), eventData)); } @Override @@ -141,7 +141,7 @@ public void doUpdateVisitedHistory(WebView webView, String url, boolean isReload webView, new TopLoadingStartEvent( webView.getId(), - SystemClock.nanoTime(), + SystemClock.elapsedRealtime(), createWebViewEvent(webView, url))); } @@ -150,7 +150,7 @@ private void emitFinishEvent(WebView webView, String url) { webView, new TopLoadingFinishEvent( webView.getId(), - SystemClock.nanoTime(), + SystemClock.elapsedRealtime(), createWebViewEvent(webView, url))); } diff --git a/ReactAndroid/src/test/java/com/facebook/react/RootViewTest.java b/ReactAndroid/src/test/java/com/facebook/react/RootViewTest.java index 2eb7f5ed87d8ae..72074ebbef37b9 100644 --- a/ReactAndroid/src/test/java/com/facebook/react/RootViewTest.java +++ b/ReactAndroid/src/test/java/com/facebook/react/RootViewTest.java @@ -65,7 +65,7 @@ public class RootViewTest { @Before public void setUp() { - final long ts = SystemClock.nanoTime(); + final long ts = SystemClock.elapsedRealtime(); PowerMockito.mockStatic(Arguments.class); PowerMockito.when(Arguments.createArray()).thenAnswer(new Answer() { @Override @@ -80,7 +80,7 @@ public Object answer(InvocationOnMock invocation) throws Throwable { } }); PowerMockito.mockStatic(SystemClock.class); - PowerMockito.when(SystemClock.nanoTime()).thenAnswer(new Answer() { + PowerMockito.when(SystemClock.elapsedRealtime()).thenAnswer(new Answer() { @Override public Object answer(InvocationOnMock invocation) throws Throwable { return ts; @@ -116,7 +116,7 @@ public void testTouchEmitter() { rootView.startReactApplication(instanceManager, ""); rootView.simulateAttachForTesting(); - long ts = SystemClock.nanoTime(); + long ts = SystemClock.elapsedRealtime(); // Test ACTION_DOWN event rootView.onTouchEvent( diff --git a/ReactAndroid/src/test/java/com/facebook/react/modules/timing/TimingModuleTest.java b/ReactAndroid/src/test/java/com/facebook/react/modules/timing/TimingModuleTest.java index 7eebda7f1ac62b..7391974e47f6cc 100644 --- a/ReactAndroid/src/test/java/com/facebook/react/modules/timing/TimingModuleTest.java +++ b/ReactAndroid/src/test/java/com/facebook/react/modules/timing/TimingModuleTest.java @@ -74,7 +74,7 @@ public Object answer(InvocationOnMock invocation) throws Throwable { PowerMockito.mockStatic(SystemClock.class); when(SystemClock.currentTimeMillis()).thenReturn(mCurrentTimeNs / 1000000); - when(SystemClock.nanoTime()).thenReturn(mCurrentTimeNs); + when(SystemClock.elapsedRealtime()).thenReturn(mCurrentTimeNs / 1000000); mChoreographerMock = mock(ReactChoreographer.class); PowerMockito.mockStatic(ReactChoreographer.class);