From 1a69e130a72f123dd002af7d5e8c02086badc27a Mon Sep 17 00:00:00 2001 From: jsdevel Date: Wed, 21 Sep 2016 18:30:45 -0700 Subject: [PATCH 1/6] Adding full support for testID with uiautomator. * Calling view.setId() with the matching resource-id of an id found in R.class. Added TestIdUtil to facilitate this. * Updating the android sample project to include a testID example. Updating the e2e test to use it. * Changing the signature for virtually all Event Classes to require the View instead of the viewTag. This reduces the number of locations where TestIdUtil.getOriginalReactTag is called. * Minimizing the impact in non __DEV__ environments where testID should not be set by simply returning view.getId() in TestIdUtil.getOriginalReactTag. * This closes #9777. --- Libraries/Components/View/View.js | 29 ++++ .../react/tests/TextInputTestCase.java | 12 +- .../react/XReactInstanceManagerImpl.java | 3 +- .../com/facebook/react/common/TestIdUtil.java | 89 ++++++++++ .../main/java/com/facebook/react/touch/BUCK | 1 + .../react/touch/JSResponderHandler.java | 4 +- .../react/uimanager/BaseViewManager.java | 9 +- .../uimanager/NativeViewHierarchyManager.java | 35 ++-- .../react/uimanager/TouchTargetHelper.java | 10 +- .../events/ContentSizeChangeEvent.java | 16 ++ .../react/uimanager/events/Event.java | 20 +++ .../drawer/ReactDrawerLayoutManager.java | 8 +- .../drawer/events/DrawerClosedEvent.java | 16 +- .../drawer/events/DrawerOpenedEvent.java | 16 +- .../views/drawer/events/DrawerSlideEvent.java | 18 +- .../events/DrawerStateChangedEvent.java | 18 +- .../react/views/image/ImageLoadEvent.java | 60 ++++++- .../react/views/image/ReactImageView.java | 14 +- .../views/modal/ReactModalHostManager.java | 4 +- .../react/views/modal/ReactModalHostView.java | 4 +- .../react/views/modal/RequestCloseEvent.java | 12 ++ .../facebook/react/views/modal/ShowEvent.java | 12 ++ .../views/picker/ReactPickerManager.java | 2 +- .../picker/events/PickerItemSelectEvent.java | 18 +- .../RecyclerViewBackedScrollView.java | 6 +- .../views/scroll/ReactScrollViewHelper.java | 2 +- .../react/views/scroll/ScrollEvent.java | 9 +- .../react/views/slider/ReactSliderEvent.java | 20 ++- .../views/slider/ReactSliderManager.java | 4 +- .../slider/ReactSlidingCompleteEvent.java | 18 +- .../views/swiperefresh/RefreshEvent.java | 12 ++ .../SwipeRefreshLayoutManager.java | 2 +- .../views/switchview/ReactSwitchEvent.java | 18 +- .../views/switchview/ReactSwitchManager.java | 2 +- .../react/views/text/ReactTextView.java | 5 +- .../ReactContentSizeChangedEvent.java | 23 ++- .../textinput/ReactTextChangedEvent.java | 29 +++- .../textinput/ReactTextInputBlurEvent.java | 16 +- .../ReactTextInputEndEditingEvent.java | 20 ++- .../views/textinput/ReactTextInputEvent.java | 29 +++- .../textinput/ReactTextInputFocusEvent.java | 16 +- .../textinput/ReactTextInputManager.java | 16 +- .../ReactTextInputSelectionEvent.java | 23 ++- .../ReactTextInputSubmitEditingEvent.java | 20 ++- .../views/toolbar/ReactToolbarManager.java | 4 +- .../toolbar/events/ToolbarClickEvent.java | 18 +- .../views/viewpager/PageScrollEvent.java | 25 ++- .../PageScrollStateChangedEvent.java | 14 ++ .../views/viewpager/PageSelectedEvent.java | 14 ++ .../react/views/viewpager/ReactViewPager.java | 10 +- .../views/webview/ReactWebViewManager.java | 14 +- .../webview/events/TopLoadingErrorEvent.java | 18 +- .../webview/events/TopLoadingFinishEvent.java | 18 +- .../webview/events/TopLoadingStartEvent.java | 18 +- .../NativeAnimatedNodeTraversalTest.java | 28 +-- .../react/uimanager/BaseViewManagerTest.java | 162 ++++++++++++++++++ 56 files changed, 934 insertions(+), 129 deletions(-) create mode 100644 ReactAndroid/src/main/java/com/facebook/react/common/TestIdUtil.java create mode 100644 ReactAndroid/src/test/java/com/facebook/react/uimanager/BaseViewManagerTest.java diff --git a/Libraries/Components/View/View.js b/Libraries/Components/View/View.js index ccad6cefac72a9..4a72c956e1100e 100644 --- a/Libraries/Components/View/View.js +++ b/Libraries/Components/View/View.js @@ -259,6 +259,35 @@ const View = React.createClass({ * Used to locate this view in end-to-end tests. * * > This disables the 'layout-only view removal' optimization for this view! + * + * ### Android Specifics + * + * By default this value is passed to the underlying View's + * [setTag](https://developer.android.com/reference/android/view/View.html#setTag(java.lang.Object) + * method. Very few testing frameworks support looking up + * a View by tag, let alone `uiautomatorviewer` which only supports `content-description`, `resource-id`, `text`, and `XPath`. + * + * While React Native does *not* utilize XML based layouts for android Views it + * is still possible to add [android:id](https://developer.android.com/reference/android/view/View.html#attr_android:id) + * to the underlying View in order to support + * [findViewById](https://developer.android.com/reference/android/app/Activity.html#findViewById(int)). + * + * This is achieved by: + * + * 1. Defining a resource id in your android project's `res` folder (typically at + * `./android/app/src/main/res/values/ids.xml`). + * + * 2. Adding your resource ids to `ids.xml` E.G. + * + * ```xml + * + * + * + * + * + * ``` + * 3. Using the resource id as `testID` E.G. ``. + * */ testID: PropTypes.string, 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 40aa97813554a2..d3e32423664f0b 100644 --- a/ReactAndroid/src/androidTest/java/com/facebook/react/tests/TextInputTestCase.java +++ b/ReactAndroid/src/androidTest/java/com/facebook/react/tests/TextInputTestCase.java @@ -114,7 +114,7 @@ public void testMetionsInputColors() throws Throwable { eventDispatcher.dispatchEvent( new ReactTextChangedEvent( - reactEditText.getId(), + reactEditText, newText.toString(), (int) PixelUtil.toDIPFromPixel(contentWidth), (int) PixelUtil.toDIPFromPixel(contentHeight), @@ -122,7 +122,7 @@ public void testMetionsInputColors() throws Throwable { eventDispatcher.dispatchEvent( new ReactTextInputEvent( - reactEditText.getId(), + reactEditText, newText.toString(), "", start, @@ -146,7 +146,7 @@ public void testMetionsInputColors() throws Throwable { eventDispatcher.dispatchEvent( new ReactTextChangedEvent( - reactEditText.getId(), + reactEditText, newText.toString(), (int) PixelUtil.toDIPFromPixel(contentWidth), (int) PixelUtil.toDIPFromPixel(contentHeight), @@ -154,7 +154,7 @@ public void testMetionsInputColors() throws Throwable { eventDispatcher.dispatchEvent( new ReactTextInputEvent( - reactEditText.getId(), + reactEditText, moreText, "", start, @@ -178,7 +178,7 @@ public void testMetionsInputColors() throws Throwable { eventDispatcher.dispatchEvent( new ReactTextChangedEvent( - reactEditText.getId(), + reactEditText, newText.toString(), (int) PixelUtil.toDIPFromPixel(contentWidth), (int) PixelUtil.toDIPFromPixel(contentHeight), @@ -186,7 +186,7 @@ public void testMetionsInputColors() throws Throwable { eventDispatcher.dispatchEvent( new ReactTextInputEvent( - reactEditText.getId(), + reactEditText, moreText, "", start, diff --git a/ReactAndroid/src/main/java/com/facebook/react/XReactInstanceManagerImpl.java b/ReactAndroid/src/main/java/com/facebook/react/XReactInstanceManagerImpl.java index 2a396cb09f2055..272a28a90a0614 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/XReactInstanceManagerImpl.java +++ b/ReactAndroid/src/main/java/com/facebook/react/XReactInstanceManagerImpl.java @@ -88,6 +88,7 @@ import static com.facebook.react.bridge.ReactMarkerConstants.PROCESS_PACKAGES_START; import static com.facebook.react.bridge.ReactMarkerConstants.SETUP_REACT_CONTEXT_END; import static com.facebook.react.bridge.ReactMarkerConstants.SETUP_REACT_CONTEXT_START; +import static com.facebook.react.common.TestIdUtil.getOriginalReactTag; import static com.facebook.systrace.Systrace.TRACE_TAG_REACT_JAVA_BRIDGE; /** @@ -818,7 +819,7 @@ private void detachViewFromInstance( CatalystInstance catalystInstance) { UiThreadUtil.assertOnUiThread(); catalystInstance.getJSModule(AppRegistry.class) - .unmountApplicationComponentAtRootTag(rootView.getId()); + .unmountApplicationComponentAtRootTag(getOriginalReactTag(rootView)); } private void tearDownReactContext(ReactContext reactContext) { diff --git a/ReactAndroid/src/main/java/com/facebook/react/common/TestIdUtil.java b/ReactAndroid/src/main/java/com/facebook/react/common/TestIdUtil.java new file mode 100644 index 00000000000000..d783bff96ac5c5 --- /dev/null +++ b/ReactAndroid/src/main/java/com/facebook/react/common/TestIdUtil.java @@ -0,0 +1,89 @@ +package com.facebook.react.common; + +import android.view.View; + +import com.facebook.react.common.annotations.VisibleForTesting; + +import java.util.concurrent.ConcurrentHashMap; + +/** + * Utility methods for managing testIDs on views and mapping them back to React Tags. + */ +public class TestIdUtil { + private static final ConcurrentHashMap TEST_IDS = new ConcurrentHashMap<>(); + private static final ConcurrentHashMap ORIGINAL_REACT_TAGS = new ConcurrentHashMap<>(); + private static volatile boolean hasTagMappings; + + /** + * Looks for defined resource IDs in R.class by the name of testId and if a matching resource ID is + * found it is passed to the view's setId method. Before the view's Id is overridden it is stored + * in an internal association with the view's identity hash code for later retrieval + * (see {@link #getOriginalReactTag(View)}). {@link View#addOn} + * + * @param view + * @param testId + * @param + */ + public static void setTestId(T view, String testId) { + int mappedTestId; + if (!TEST_IDS.containsKey(testId)) { + mappedTestId = view.getResources().getIdentifier(testId, "id", view.getContext().getPackageName()); + TEST_IDS.put(testId, mappedTestId); + } else { + mappedTestId = TEST_IDS.get(testId); + } + + if (mappedTestId != 0 && view.getId() != mappedTestId) { + ORIGINAL_REACT_TAGS.put(System.identityHashCode(view), view.getId()); + hasTagMappings = true; + view.setId(mappedTestId); + } + } + + /** + * Returns the tag originally generated by the JS when the view was created prior to + * it being potentially overridden by {@link #setTestId(View, String)}. If no view has had it's Id + * overridden by {@link #setTestId(View, String)} then this method simply returns view.getId(). + * In non __DEV__ environments this should be as performant as calling view.getId(). + * + * @param view + * @param + * @return + */ + public static int getOriginalReactTag(T view) { + if (!hasTagMappings) { + return view.getId(); + } + Integer tag = ORIGINAL_REACT_TAGS.get(System.identityHashCode(view)); + return tag != null ? tag.intValue() : view.getId(); + } + + /** + * Removes the internal mapping of this view's identity to it's original react tag set from JS + * and restores it's Id prior to it having been overridden by setTestId. + * + * @param view + * @param + */ + public static void removeMapping(T view) { + if (!hasTagMappings) { + return; + } + int identityHashCode = System.identityHashCode(view); + Integer originalReactTag = ORIGINAL_REACT_TAGS.get(identityHashCode); + if (originalReactTag != null) { + view.setId(originalReactTag); + ORIGINAL_REACT_TAGS.remove(identityHashCode); + } + return; + } + + /** + * Used by tests to clear the static member Maps. + */ + @VisibleForTesting + public static void resetTestState() { + ORIGINAL_REACT_TAGS.clear(); + TEST_IDS.clear(); + } +} diff --git a/ReactAndroid/src/main/java/com/facebook/react/touch/BUCK b/ReactAndroid/src/main/java/com/facebook/react/touch/BUCK index 44cea8fdce54f4..fa495f2e5afa5b 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/touch/BUCK +++ b/ReactAndroid/src/main/java/com/facebook/react/touch/BUCK @@ -6,6 +6,7 @@ android_library( deps = [ react_native_dep('third-party/java/infer-annotations:infer-annotations'), react_native_dep('third-party/java/jsr-305:jsr-305'), + react_native_target('java/com/facebook/react/common:common'), ], visibility = [ 'PUBLIC' diff --git a/ReactAndroid/src/main/java/com/facebook/react/touch/JSResponderHandler.java b/ReactAndroid/src/main/java/com/facebook/react/touch/JSResponderHandler.java index 7140e2c303fea8..e9cabb46ed8b85 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/touch/JSResponderHandler.java +++ b/ReactAndroid/src/main/java/com/facebook/react/touch/JSResponderHandler.java @@ -15,6 +15,8 @@ import android.view.ViewGroup; import android.view.ViewParent; +import static com.facebook.react.common.TestIdUtil.getOriginalReactTag; + /** * This class coordinates JSResponder commands for {@link UIManagerModule}. It should be set as * OnInterceptTouchEventListener for all newly created native views that implements @@ -70,7 +72,7 @@ public boolean onInterceptTouchEvent(ViewGroup v, MotionEvent event) { // Therefore since "UP" event is the last event in a gesture, we should just let it reach the // original target that is a child view of {@param v}. // http://developer.android.com/reference/android/view/ViewGroup.html#onInterceptTouchEvent(android.view.MotionEvent) - return v.getId() == currentJSResponder; + return getOriginalReactTag(v) == currentJSResponder; } return false; } diff --git a/ReactAndroid/src/main/java/com/facebook/react/uimanager/BaseViewManager.java b/ReactAndroid/src/main/java/com/facebook/react/uimanager/BaseViewManager.java index 815bad0faddcc5..01a18831e204fa 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/uimanager/BaseViewManager.java +++ b/ReactAndroid/src/main/java/com/facebook/react/uimanager/BaseViewManager.java @@ -5,9 +5,9 @@ import android.graphics.Color; import android.os.Build; import android.view.View; -import android.view.ViewGroup; import com.facebook.react.bridge.ReadableArray; +import com.facebook.react.common.TestIdUtil; import com.facebook.react.uimanager.annotations.ReactProp; /** @@ -84,9 +84,16 @@ public void setRenderToHardwareTexture(T view, boolean useHWTexture) { @ReactProp(name = PROP_TEST_ID) public void setTestId(T view, String testId) { + TestIdUtil.setTestId(view, testId); view.setTag(testId); } + @Override + public void onDropViewInstance(T view) { + super.onDropViewInstance(view); + TestIdUtil.removeMapping(view); + } + @ReactProp(name = PROP_ACCESSIBILITY_LABEL) public void setAccessibilityLabel(T view, String accessibilityLabel) { view.setContentDescription(accessibilityLabel); diff --git a/ReactAndroid/src/main/java/com/facebook/react/uimanager/NativeViewHierarchyManager.java b/ReactAndroid/src/main/java/com/facebook/react/uimanager/NativeViewHierarchyManager.java index a5b157d0f1029f..91665c2469ea9c 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/uimanager/NativeViewHierarchyManager.java +++ b/ReactAndroid/src/main/java/com/facebook/react/uimanager/NativeViewHierarchyManager.java @@ -31,6 +31,7 @@ import com.facebook.react.bridge.ReadableMap; import com.facebook.react.bridge.SoftAssertions; import com.facebook.react.bridge.UiThreadUtil; +import com.facebook.react.common.TestIdUtil; import com.facebook.react.touch.JSResponderHandler; import com.facebook.react.uimanager.layoutanimation.LayoutAnimationController; import com.facebook.react.uimanager.layoutanimation.LayoutAnimationListener; @@ -40,6 +41,8 @@ import javax.annotation.Nullable; import javax.annotation.concurrent.NotThreadSafe; +import static com.facebook.react.common.TestIdUtil.getOriginalReactTag; + /** * Delegate of {@link UIManagerModule} that owns the native view hierarchy and mapping between * native view names used in JS and corresponding instances of {@link ViewManager}. The @@ -200,6 +203,19 @@ private void updateLayout(View viewToUpdate, int x, int y, int width, int height } } + /** + * Creates a {@link View} and adds it to a corresponding {@link ViewManager}. + * + * The tag (a.k.a. React Tag) is saved with {@link View#setId(int)}. Because testID can override + * this value (see {@link BaseViewManager#setTestId(View, String)}), it is necessary to use + * {@link TestIdUtil#getOriginalReactTag(View)} wherever the original tag is needed + * e.g. when communicating with the Shadow DOM or with JS about a particular react tag. + * + * @param themedContext + * @param tag + * @param className + * @param initialProps + */ public void createView( ThemedReactContext themedContext, int tag, @@ -218,10 +234,6 @@ public void createView( View view = viewManager.createView(themedContext, mJSResponderHandler); mTagsToViews.put(tag, view); mTagsToViewManagers.put(tag, viewManager); - - // Use android View id field to store React tag. This is possible since we don't inflate - // React views from layout xmls. Thus it is easier to just reuse that field instead of - // creating another (potentially much more expensive) mapping from view to React tag view.setId(tag); if (initialProps != null) { viewManager.updateProperties(view, initialProps); @@ -365,7 +377,7 @@ public void manageChildren( if (mLayoutAnimationEnabled && mLayoutAnimator.shouldAnimateLayout(viewToRemove) && - arrayContains(tagsToDelete, viewToRemove.getId())) { + arrayContains(tagsToDelete, getOriginalReactTag(viewToRemove))) { // The view will be removed and dropped by the 'delete' layout animation // instead, so do nothing } else { @@ -519,24 +531,25 @@ protected final void addRootViewGroup( */ protected void dropView(View view) { UiThreadUtil.assertOnUiThread(); - if (!mRootTags.get(view.getId())) { + int originalReactTag = getOriginalReactTag(view); + if (!mRootTags.get(originalReactTag)) { // For non-root views we notify viewmanager with {@link ViewManager#onDropInstance} - resolveViewManager(view.getId()).onDropViewInstance(view); + resolveViewManager(originalReactTag).onDropViewInstance(view); } - ViewManager viewManager = mTagsToViewManagers.get(view.getId()); + ViewManager viewManager = mTagsToViewManagers.get(originalReactTag); if (view instanceof ViewGroup && viewManager instanceof ViewGroupManager) { ViewGroup viewGroup = (ViewGroup) view; ViewGroupManager viewGroupManager = (ViewGroupManager) viewManager; for (int i = viewGroupManager.getChildCount(viewGroup) - 1; i >= 0; i--) { View child = viewGroupManager.getChildAt(viewGroup, i); - if (mTagsToViews.get(child.getId()) != null) { + if (mTagsToViews.get(getOriginalReactTag(child)) != null) { dropView(child); } } viewGroupManager.removeAllViews(viewGroup); } - mTagsToViews.remove(view.getId()); - mTagsToViewManagers.remove(view.getId()); + mTagsToViews.remove(originalReactTag); + mTagsToViewManagers.remove(originalReactTag); } public void removeRootView(int rootViewTag) { diff --git a/ReactAndroid/src/main/java/com/facebook/react/uimanager/TouchTargetHelper.java b/ReactAndroid/src/main/java/com/facebook/react/uimanager/TouchTargetHelper.java index 4ef74fafc941f5..8d6cfc3d786448 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/uimanager/TouchTargetHelper.java +++ b/ReactAndroid/src/main/java/com/facebook/react/uimanager/TouchTargetHelper.java @@ -22,6 +22,8 @@ import com.facebook.react.bridge.UiThreadUtil; import com.facebook.react.touch.ReactHitSlopView; +import static com.facebook.react.common.TestIdUtil.getOriginalReactTag; + /** * Class responsible for identifying which react view should handle a given {@link MotionEvent}. * It uses the event coordinates to traverse the view hierarchy and return a suitable view. @@ -87,7 +89,7 @@ public static int findTargetTagAndCoordinatesForTouch( float[] viewCoords, @Nullable int[] nativeViewTag) { UiThreadUtil.assertOnUiThread(); - int targetTag = viewGroup.getId(); + int targetTag = getOriginalReactTag(viewGroup); // Store eventCoords in array so that they are modified to be relative to the targetView found. viewCoords[0] = eventX; viewCoords[1] = eventY; @@ -96,7 +98,7 @@ public static int findTargetTagAndCoordinatesForTouch( View reactTargetView = findClosestReactAncestor(nativeTargetView); if (reactTargetView != null) { if (nativeViewTag != null) { - nativeViewTag[0] = reactTargetView.getId(); + nativeViewTag[0] = getOriginalReactTag(reactTargetView); } targetTag = getTouchTargetForView(reactTargetView, viewCoords[0], viewCoords[1]); } @@ -224,7 +226,7 @@ private static boolean isTransformedTouchPointInView( // ViewGroup). if (view instanceof ReactCompoundView) { int reactTag = ((ReactCompoundView)view).reactTagForTouch(eventCoords[0], eventCoords[1]); - if (reactTag != view.getId()) { + if (reactTag != getOriginalReactTag(view)) { // make sure we exclude the View itself because of the PointerEvents.BOX_NONE return view; } @@ -256,7 +258,7 @@ private static int getTouchTargetForView(View targetView, float eventX, float ev // {@link #findTouchTargetView()}. return ((ReactCompoundView) targetView).reactTagForTouch(eventX, eventY); } - return targetView.getId(); + return getOriginalReactTag(targetView); } } diff --git a/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/ContentSizeChangeEvent.java b/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/ContentSizeChangeEvent.java index 03cc05a25c1980..19252980cec369 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/ContentSizeChangeEvent.java +++ b/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/ContentSizeChangeEvent.java @@ -2,6 +2,8 @@ package com.facebook.react.uimanager.events; +import android.view.View; + import com.facebook.react.bridge.Arguments; import com.facebook.react.bridge.WritableMap; import com.facebook.react.uimanager.PixelUtil; @@ -16,12 +18,26 @@ public class ContentSizeChangeEvent extends Event { private final int mWidth; private final int mHeight; + /** + * See {@link Event#Event(int)}. + * + * @param viewTag + * @param width + * @param height + */ + @Deprecated public ContentSizeChangeEvent(int viewTag, int width, int height) { super(viewTag); mWidth = width; mHeight = height; } + public ContentSizeChangeEvent(View view, int width, int height) { + super(view); + mWidth = width; + mHeight = height; + } + @Override public String getEventName() { return EVENT_NAME; diff --git a/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/Event.java b/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/Event.java index 4da9ed777d3758..981a9949c91f7f 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/Event.java +++ b/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/Event.java @@ -9,8 +9,12 @@ package com.facebook.react.uimanager.events; +import android.view.View; + import com.facebook.react.common.SystemClock; +import static com.facebook.react.common.TestIdUtil.getOriginalReactTag; + /** * A UI event that can be dispatched to JS. * @@ -30,10 +34,22 @@ public abstract class Event { protected Event() { } + /** + * Usage of this constructor is discouraged as the viewTag is not gauranteed to represent the + * associated view. See {@link com.facebook.react.uimanager.BaseViewManager#setTestId(View, String)}. + * Use {@link #Event(View)} instead. + * + * @param viewTag + */ + @Deprecated protected Event(int viewTag) { init(viewTag); } + protected Event(View view) { + init(getOriginalReactTag(view)); + } + /** * This method needs to be called before event is sent to event dispatcher. */ @@ -43,6 +59,10 @@ protected void init(int viewTag) { mInitialized = true; } + protected void init(View view) { + init(getOriginalReactTag(view)); + } + /** * @return the view id for the view that generated this event */ 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 e61d1266e1f29e..6c66926462da64 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 @@ -187,25 +187,25 @@ public DrawerEventEmitter(DrawerLayout drawerLayout, EventDispatcher eventDispat @Override public void onDrawerSlide(View view, float v) { mEventDispatcher.dispatchEvent( - new DrawerSlideEvent(mDrawerLayout.getId(), v)); + new DrawerSlideEvent(mDrawerLayout, v)); } @Override public void onDrawerOpened(View view) { mEventDispatcher.dispatchEvent( - new DrawerOpenedEvent(mDrawerLayout.getId())); + new DrawerOpenedEvent(mDrawerLayout)); } @Override public void onDrawerClosed(View view) { mEventDispatcher.dispatchEvent( - new DrawerClosedEvent(mDrawerLayout.getId())); + new DrawerClosedEvent(mDrawerLayout)); } @Override public void onDrawerStateChanged(int i) { mEventDispatcher.dispatchEvent( - new DrawerStateChangedEvent(mDrawerLayout.getId(), i)); + new DrawerStateChangedEvent(mDrawerLayout, i)); } } } diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/drawer/events/DrawerClosedEvent.java b/ReactAndroid/src/main/java/com/facebook/react/views/drawer/events/DrawerClosedEvent.java index a6845037d89702..f7cc3a44bb218e 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/drawer/events/DrawerClosedEvent.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/drawer/events/DrawerClosedEvent.java @@ -9,6 +9,8 @@ package com.facebook.react.views.drawer.events; +import android.view.View; + import com.facebook.react.bridge.Arguments; import com.facebook.react.uimanager.events.Event; import com.facebook.react.uimanager.events.RCTEventEmitter; @@ -17,8 +19,18 @@ public class DrawerClosedEvent extends Event { public static final String EVENT_NAME = "topDrawerClosed"; - public DrawerClosedEvent(int viewId) { - super(viewId); + /** + * See {@link Event#Event(int)}. + * + * @param viewTag + */ + @Deprecated + public DrawerClosedEvent(int viewTag) { + super(viewTag); + } + + public DrawerClosedEvent(View view) { + super(view); } @Override diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/drawer/events/DrawerOpenedEvent.java b/ReactAndroid/src/main/java/com/facebook/react/views/drawer/events/DrawerOpenedEvent.java index b94d5937ae4510..3deb72d4bb5e05 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/drawer/events/DrawerOpenedEvent.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/drawer/events/DrawerOpenedEvent.java @@ -9,6 +9,8 @@ package com.facebook.react.views.drawer.events; +import android.view.View; + import com.facebook.react.bridge.Arguments; import com.facebook.react.uimanager.events.Event; import com.facebook.react.uimanager.events.RCTEventEmitter; @@ -17,8 +19,18 @@ public class DrawerOpenedEvent extends Event { public static final String EVENT_NAME = "topDrawerOpened"; - public DrawerOpenedEvent(int viewId) { - super(viewId); + /** + * See {@link Event#Event(int)}. + * + * @param viewTag + */ + @Deprecated + public DrawerOpenedEvent(int viewTag) { + super(viewTag); + } + + public DrawerOpenedEvent(View view) { + super(view); } @Override diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/drawer/events/DrawerSlideEvent.java b/ReactAndroid/src/main/java/com/facebook/react/views/drawer/events/DrawerSlideEvent.java index 5010ee6befa480..2b76b2db024f86 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/drawer/events/DrawerSlideEvent.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/drawer/events/DrawerSlideEvent.java @@ -9,6 +9,8 @@ package com.facebook.react.views.drawer.events; +import android.view.View; + import com.facebook.react.bridge.Arguments; import com.facebook.react.bridge.WritableMap; import com.facebook.react.uimanager.events.Event; @@ -23,8 +25,20 @@ public class DrawerSlideEvent extends Event { private final float mOffset; - public DrawerSlideEvent(int viewId, float offset) { - super(viewId); + /** + * See {@link Event#Event(int)}. + * + * @param viewTag + * @param offset + */ + @Deprecated + public DrawerSlideEvent(int viewTag, float offset) { + super(viewTag); + mOffset = offset; + } + + public DrawerSlideEvent(View view, float offset) { + super(view); mOffset = offset; } diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/drawer/events/DrawerStateChangedEvent.java b/ReactAndroid/src/main/java/com/facebook/react/views/drawer/events/DrawerStateChangedEvent.java index a4d9294875201b..8387446245330e 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/drawer/events/DrawerStateChangedEvent.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/drawer/events/DrawerStateChangedEvent.java @@ -9,6 +9,8 @@ package com.facebook.react.views.drawer.events; +import android.view.View; + import com.facebook.react.bridge.Arguments; import com.facebook.react.bridge.WritableMap; import com.facebook.react.uimanager.events.Event; @@ -20,8 +22,20 @@ public class DrawerStateChangedEvent extends Event { private final int mDrawerState; - public DrawerStateChangedEvent(int viewId, int drawerState) { - super(viewId); + /** + * See {@link Event#Event(int)}. + * + * @param viewTag + * @param drawerState + */ + @Deprecated + public DrawerStateChangedEvent(int viewTag, int drawerState) { + super(viewTag); + mDrawerState = drawerState; + } + + public DrawerStateChangedEvent(View view, int drawerState) { + super(view); mDrawerState = drawerState; } diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/image/ImageLoadEvent.java b/ReactAndroid/src/main/java/com/facebook/react/views/image/ImageLoadEvent.java index f47c34540164c7..a63e160185241e 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/image/ImageLoadEvent.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/image/ImageLoadEvent.java @@ -12,6 +12,7 @@ import javax.annotation.Nullable; import android.support.annotation.IntDef; +import android.view.View; import com.facebook.react.bridge.Arguments; import com.facebook.react.bridge.WritableMap; @@ -39,21 +40,68 @@ public class ImageLoadEvent extends Event { private final int mWidth; private final int mHeight; - public ImageLoadEvent(int viewId, @ImageEventType int eventType) { - this(viewId, eventType, null); + + /** + * See {@link Event#Event(int)}. + * + * @param viewTag + * @param eventType + */ + @Deprecated + public ImageLoadEvent(int viewTag, @ImageEventType int eventType) { + this(viewTag, eventType, null); + } + + /** + * See {@link Event#Event(int)}. + * + * @param viewTag + * @param eventType + * @param imageUri + */ + @Deprecated + public ImageLoadEvent(int viewTag, @ImageEventType int eventType, String imageUri) { + this(viewTag, eventType, imageUri, 0, 0); + } + + /** + * See {@link Event#Event(int)}. + * + * @param viewTag + * @param eventType + * @param imageUri + * @param width + * @param height + */ + @Deprecated + public ImageLoadEvent( + int viewTag, + @ImageEventType int eventType, + @Nullable String imageUri, + int width, + int height) { + super(viewTag); + mEventType = eventType; + mImageUri = imageUri; + mWidth = width; + mHeight = height; + } + + public ImageLoadEvent(View view, @ImageEventType int eventType) { + this(view, eventType, null); } - public ImageLoadEvent(int viewId, @ImageEventType int eventType, String imageUri) { - this(viewId, eventType, imageUri, 0, 0); + public ImageLoadEvent(View view, @ImageEventType int eventType, String imageUri) { + this(view, eventType, imageUri, 0, 0); } public ImageLoadEvent( - int viewId, + View view, @ImageEventType int eventType, @Nullable String imageUri, int width, int height) { - super(viewId); + super(view); mEventType = eventType; mImageUri = imageUri; mWidth = width; 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 f519627b634f1c..b95b897b858344 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(), ImageLoadEvent.ON_LOAD_START)); + new ImageLoadEvent(getThisReactImageView(), ImageLoadEvent.ON_LOAD_START)); } @Override @@ -202,19 +202,19 @@ public void onFinalImageSet( @Nullable Animatable animatable) { if (imageInfo != null) { mEventDispatcher.dispatchEvent( - new ImageLoadEvent(getId(), ImageLoadEvent.ON_LOAD, + new ImageLoadEvent(getThisReactImageView(), ImageLoadEvent.ON_LOAD, mImageSource.getSource(), imageInfo.getWidth(), imageInfo.getHeight())); mEventDispatcher.dispatchEvent( - new ImageLoadEvent(getId(), ImageLoadEvent.ON_LOAD_END)); + new ImageLoadEvent(getThisReactImageView(), ImageLoadEvent.ON_LOAD_END)); } } @Override public void onFailure(String id, Throwable throwable) { mEventDispatcher.dispatchEvent( - new ImageLoadEvent(getId(), ImageLoadEvent.ON_ERROR)); + new ImageLoadEvent(getThisReactImageView(), ImageLoadEvent.ON_ERROR)); mEventDispatcher.dispatchEvent( - new ImageLoadEvent(getId(), ImageLoadEvent.ON_LOAD_END)); + new ImageLoadEvent(getThisReactImageView(), ImageLoadEvent.ON_LOAD_END)); } }; } @@ -441,6 +441,10 @@ private boolean hasMultipleSources() { return mSources.size() > 1; } + private ReactImageView getThisReactImageView() { + return this; + } + private void setSourceImage() { mImageSource = null; if (mSources.isEmpty()) { 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 220284ef3dd870..cf35544c93148e 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 @@ -76,14 +76,14 @@ protected void addEventEmitters( new ReactModalHostView.OnRequestCloseListener() { @Override public void onRequestClose(DialogInterface dialog) { - dispatcher.dispatchEvent(new RequestCloseEvent(view.getId())); + dispatcher.dispatchEvent(new RequestCloseEvent(view)); } }); view.setOnShowListener( new DialogInterface.OnShowListener() { @Override public void onShow(DialogInterface dialog) { - dispatcher.dispatchEvent(new ShowEvent(view.getId())); + dispatcher.dispatchEvent(new ShowEvent(view)); } }); } diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/modal/ReactModalHostView.java b/ReactAndroid/src/main/java/com/facebook/react/views/modal/ReactModalHostView.java index c2a5c933dbec4c..e0752980cfe94e 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/modal/ReactModalHostView.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/modal/ReactModalHostView.java @@ -36,6 +36,8 @@ import com.facebook.react.uimanager.events.EventDispatcher; import com.facebook.react.views.view.ReactViewGroup; +import static com.facebook.react.common.TestIdUtil.getOriginalReactTag; + /** * ReactModalHostView is a view that sits in the view hierarchy representing a Modal view. * @@ -299,7 +301,7 @@ protected void onSizeChanged(final int w, final int h, int oldw, int oldh) { @Override public void run() { ((ReactContext) getContext()).getNativeModule(UIManagerModule.class) - .updateNodeSize(getChildAt(0).getId(), w, h); + .updateNodeSize(getOriginalReactTag(getChildAt(0)), w, h); } }); } diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/modal/RequestCloseEvent.java b/ReactAndroid/src/main/java/com/facebook/react/views/modal/RequestCloseEvent.java index 133488760441bf..c28dcc19f01660 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/modal/RequestCloseEvent.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/modal/RequestCloseEvent.java @@ -9,6 +9,8 @@ package com.facebook.react.views.modal; +import android.view.View; + import com.facebook.react.uimanager.events.Event; import com.facebook.react.uimanager.events.RCTEventEmitter; @@ -19,10 +21,20 @@ public static final String EVENT_NAME = "topRequestClose"; + /** + * See {@link Event#Event(int)}. + * + * @param viewTag + */ + @Deprecated protected RequestCloseEvent(int viewTag) { super(viewTag); } + protected RequestCloseEvent(View view) { + super(view); + } + @Override public String getEventName() { return EVENT_NAME; diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/modal/ShowEvent.java b/ReactAndroid/src/main/java/com/facebook/react/views/modal/ShowEvent.java index a0851ccf75e6c9..bc482b14f4f179 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/modal/ShowEvent.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/modal/ShowEvent.java @@ -9,6 +9,8 @@ package com.facebook.react.views.modal; +import android.view.View; + import com.facebook.react.uimanager.events.Event; import com.facebook.react.uimanager.events.RCTEventEmitter; @@ -19,10 +21,20 @@ public static final String EVENT_NAME = "topShow"; + /** + * See {@link Event#Event(int)}. + * + * @param viewTag + */ + @Deprecated protected ShowEvent(int viewTag) { super(viewTag); } + protected ShowEvent(View view) { + super(view); + } + @Override public String getEventName() { return EVENT_NAME; 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 5e1e9ccf33a236..55204ea68ad74f 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 @@ -156,7 +156,7 @@ public PickerEventEmitter(ReactPicker reactPicker, EventDispatcher eventDispatch @Override public void onItemSelected(int position) { mEventDispatcher.dispatchEvent( new PickerItemSelectEvent( - mReactPicker.getId(), position)); + mReactPicker, position)); } } } diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/picker/events/PickerItemSelectEvent.java b/ReactAndroid/src/main/java/com/facebook/react/views/picker/events/PickerItemSelectEvent.java index 3eb45f48b74424..b0d02fb30902b2 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/picker/events/PickerItemSelectEvent.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/picker/events/PickerItemSelectEvent.java @@ -9,6 +9,8 @@ package com.facebook.react.views.picker.events; +import android.view.View; + import com.facebook.react.bridge.Arguments; import com.facebook.react.bridge.WritableMap; import com.facebook.react.uimanager.events.Event; @@ -19,8 +21,20 @@ public class PickerItemSelectEvent extends Event { private final int mPosition; - public PickerItemSelectEvent(int id, int position) { - super(id); + /** + * See {@link Event#Event(int)}. + * + * @param viewTag + * @param position + */ + @Deprecated + public PickerItemSelectEvent(int viewTag, int position) { + super(viewTag); + mPosition = position; + } + + public PickerItemSelectEvent(View view, int position) { + super(view); mPosition = 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 d823ac88bf3938..4396d519152b74 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 @@ -15,6 +15,7 @@ import com.facebook.infer.annotation.Assertions; import com.facebook.react.bridge.ReactContext; import com.facebook.react.common.annotations.VisibleForTesting; +import com.facebook.react.uimanager.NativeViewHierarchyManager; import com.facebook.react.uimanager.UIManagerModule; import com.facebook.react.uimanager.events.ContentSizeChangeEvent; import com.facebook.react.uimanager.events.NativeGestureUtil; @@ -294,6 +295,7 @@ public int getItemCount() { @Override public long getItemId(int position) { + // this should return the view's actual ID to work properly with the view we're extending. return mViews.get(position).getId(); } @@ -342,7 +344,7 @@ protected void onScrollChanged(int l, int t, int oldl, int oldt) { ((ReactContext) getContext()).getNativeModule(UIManagerModule.class).getEventDispatcher() .dispatchEvent(ScrollEvent.obtain( - getId(), + this, ScrollEventType.SCROLL, 0, /* offsetX = 0, horizontal scrolling only */ calculateAbsoluteOffset(), @@ -356,7 +358,7 @@ private void onTotalChildrenHeightChange(int newTotalChildrenHeight) { if (mSendContentSizeChangeEvents) { ((ReactContext) getContext()).getNativeModule(UIManagerModule.class).getEventDispatcher() .dispatchEvent(new ContentSizeChangeEvent( - getId(), + this, 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 966c50bb30a797..01b88da6046a9f 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 @@ -55,7 +55,7 @@ private static void emitScrollEvent(ViewGroup scrollView, ScrollEventType scroll ReactContext reactContext = (ReactContext) scrollView.getContext(); reactContext.getNativeModule(UIManagerModule.class).getEventDispatcher().dispatchEvent( ScrollEvent.obtain( - scrollView.getId(), + scrollView, scrollEventType, scrollView.getScrollX(), scrollView.getScrollY(), diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ScrollEvent.java b/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ScrollEvent.java index 25606a48960621..6491888219e387 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ScrollEvent.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ScrollEvent.java @@ -14,6 +14,7 @@ import java.lang.Override; import android.support.v4.util.Pools; +import android.view.View; import com.facebook.infer.annotation.Assertions; import com.facebook.react.bridge.Arguments; @@ -39,7 +40,7 @@ public class ScrollEvent extends Event { private @Nullable ScrollEventType mScrollEventType; public static ScrollEvent obtain( - int viewTag, + View view, ScrollEventType scrollEventType, int scrollX, int scrollY, @@ -52,7 +53,7 @@ public static ScrollEvent obtain( event = new ScrollEvent(); } event.init( - viewTag, + view, scrollEventType, scrollX, scrollY, @@ -72,7 +73,7 @@ private ScrollEvent() { } private void init( - int viewTag, + View view, ScrollEventType scrollEventType, int scrollX, int scrollY, @@ -80,7 +81,7 @@ private void init( int contentHeight, int scrollViewWidth, int scrollViewHeight) { - super.init(viewTag); + super.init(view); mScrollEventType = scrollEventType; mScrollX = scrollX; mScrollY = scrollY; diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/slider/ReactSliderEvent.java b/ReactAndroid/src/main/java/com/facebook/react/views/slider/ReactSliderEvent.java index f45dc71f301794..98898fbf75849e 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/slider/ReactSliderEvent.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/slider/ReactSliderEvent.java @@ -9,6 +9,8 @@ package com.facebook.react.views.slider; +import android.view.View; + import com.facebook.react.bridge.Arguments; import com.facebook.react.bridge.WritableMap; import com.facebook.react.uimanager.events.Event; @@ -24,8 +26,22 @@ public class ReactSliderEvent extends Event { private final double mValue; private final boolean mFromUser; - public ReactSliderEvent(int viewId, double value, boolean fromUser) { - super(viewId); + /** + * See {@link Event#Event(int)}. + * + * @param viewTag + * @param value + * @param fromUser + */ + @Deprecated + public ReactSliderEvent(int viewTag, double value, boolean fromUser) { + super(viewTag); + mValue = value; + mFromUser = fromUser; + } + + public ReactSliderEvent(View view, double value, boolean fromUser) { + super(view); mValue = value; mFromUser = fromUser; } 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 87f930ab46db97..bb67e6e7c16581 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 @@ -79,7 +79,7 @@ public void onProgressChanged(SeekBar seekbar, int progress, boolean fromUser) { ReactContext reactContext = (ReactContext) seekbar.getContext(); reactContext.getNativeModule(UIManagerModule.class).getEventDispatcher().dispatchEvent( new ReactSliderEvent( - seekbar.getId(), + seekbar, ((ReactSlider)seekbar).toRealProgress(progress), fromUser)); } @@ -93,7 +93,7 @@ public void onStopTrackingTouch(SeekBar seekbar) { ReactContext reactContext = (ReactContext) seekbar.getContext(); reactContext.getNativeModule(UIManagerModule.class).getEventDispatcher().dispatchEvent( new ReactSlidingCompleteEvent( - seekbar.getId(), + seekbar, ((ReactSlider)seekbar).toRealProgress(seekbar.getProgress()))); } }; diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/slider/ReactSlidingCompleteEvent.java b/ReactAndroid/src/main/java/com/facebook/react/views/slider/ReactSlidingCompleteEvent.java index 1dceb63ee4c685..98046088fd542c 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/slider/ReactSlidingCompleteEvent.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/slider/ReactSlidingCompleteEvent.java @@ -9,6 +9,8 @@ package com.facebook.react.views.slider; +import android.view.View; + import com.facebook.react.bridge.Arguments; import com.facebook.react.bridge.WritableMap; import com.facebook.react.uimanager.events.Event; @@ -23,8 +25,20 @@ public class ReactSlidingCompleteEvent extends Event private final double mValue; - public ReactSlidingCompleteEvent(int viewId, double value) { - super(viewId); + /** + * See {@link Event#Event(int)}. + * + * @param viewTag + * @param value + */ + @Deprecated + public ReactSlidingCompleteEvent(int viewTag, double value) { + super(viewTag); + mValue = value; + } + + public ReactSlidingCompleteEvent(View view, double value) { + super(view); mValue = value; } diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/swiperefresh/RefreshEvent.java b/ReactAndroid/src/main/java/com/facebook/react/views/swiperefresh/RefreshEvent.java index 0745d2adbecee7..2ac38d327d4775 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/swiperefresh/RefreshEvent.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/swiperefresh/RefreshEvent.java @@ -9,15 +9,27 @@ package com.facebook.react.views.swiperefresh; +import android.view.View; + import com.facebook.react.uimanager.events.Event; import com.facebook.react.uimanager.events.RCTEventEmitter; public class RefreshEvent extends Event { + /** + * See {@link Event#Event(int)}. + * + * @param viewTag + */ + @Deprecated protected RefreshEvent(int viewTag) { super(viewTag); } + protected RefreshEvent(View view) { + super(view); + } + @Override public String getEventName() { return "topRefresh"; 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 99b62b4a96b67e..a8cfd2ae62bc9b 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 @@ -94,7 +94,7 @@ protected void addEventEmitters( @Override public void onRefresh() { reactContext.getNativeModule(UIManagerModule.class).getEventDispatcher() - .dispatchEvent(new RefreshEvent(view.getId())); + .dispatchEvent(new RefreshEvent(view)); } }); } diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/switchview/ReactSwitchEvent.java b/ReactAndroid/src/main/java/com/facebook/react/views/switchview/ReactSwitchEvent.java index 0b60076448979a..882176aab8005b 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/switchview/ReactSwitchEvent.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/switchview/ReactSwitchEvent.java @@ -9,6 +9,8 @@ package com.facebook.react.views.switchview; +import android.view.View; + import com.facebook.react.bridge.Arguments; import com.facebook.react.bridge.WritableMap; import com.facebook.react.uimanager.events.Event; @@ -23,8 +25,20 @@ private final boolean mIsChecked; - public ReactSwitchEvent(int viewId, boolean isChecked) { - super(viewId); + /** + * See {@link Event#Event(int)}. + * + * @param viewTag + * @param isChecked + */ + @Deprecated + public ReactSwitchEvent(int viewTag, boolean isChecked) { + super(viewTag); + mIsChecked = isChecked; + } + + public ReactSwitchEvent(View view, boolean isChecked) { + super(view); mIsChecked = isChecked; } 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 d05f8bae33fd3f..89e136e6ff537b 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 @@ -76,7 +76,7 @@ public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { ReactContext reactContext = (ReactContext) buttonView.getContext(); reactContext.getNativeModule(UIManagerModule.class).getEventDispatcher().dispatchEvent( new ReactSwitchEvent( - buttonView.getId(), + buttonView, isChecked)); } }; diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactTextView.java b/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactTextView.java index 50828a80ba6818..51032838655576 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactTextView.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactTextView.java @@ -26,6 +26,9 @@ import com.facebook.react.uimanager.ViewDefaults; import com.facebook.react.views.view.ReactViewBackgroundDrawable; +import static com.facebook.react.common.TestIdUtil.getOriginalReactTag; + + public class ReactTextView extends TextView implements ReactCompoundView { private static final ViewGroup.LayoutParams EMPTY_LAYOUT_PARAMS = @@ -74,7 +77,7 @@ public void setText(ReactTextUpdate update) { @Override public int reactTagForTouch(float touchX, float touchY) { Spanned text = (Spanned) getText(); - int target = getId(); + int target = getOriginalReactTag(this); int x = (int) touchX; int y = (int) touchY; diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactContentSizeChangedEvent.java b/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactContentSizeChangedEvent.java index 2ad1a1c3a37315..d6e5d57d3dfe83 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactContentSizeChangedEvent.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactContentSizeChangedEvent.java @@ -9,6 +9,8 @@ package com.facebook.react.views.textinput; +import android.view.View; + import com.facebook.react.bridge.Arguments; import com.facebook.react.bridge.WritableMap; import com.facebook.react.uimanager.events.Event; @@ -24,11 +26,28 @@ public class ReactContentSizeChangedEvent extends Event { private float mContentWidth; private float mContentHeight; + /** + * See {@link Event#Event(int)}. + * + * @param viewTag + * @param contentSizeWidth + * @param contentSizeHeight + */ + @Deprecated + public ReactContentSizeChangedEvent( + int viewTag, + float contentSizeWidth, + float contentSizeHeight) { + super(viewTag); + mContentWidth = contentSizeWidth; + mContentHeight = contentSizeHeight; + } + public ReactContentSizeChangedEvent( - int viewId, + View view, float contentSizeWidth, float contentSizeHeight) { - super(viewId); + super(view); mContentWidth = contentSizeWidth; mContentHeight = contentSizeHeight; } diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextChangedEvent.java b/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextChangedEvent.java index 67ca37c5e682f2..67a719e5954c01 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextChangedEvent.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextChangedEvent.java @@ -9,6 +9,8 @@ package com.facebook.react.views.textinput; +import android.view.View; + import com.facebook.react.bridge.Arguments; import com.facebook.react.bridge.WritableMap; import com.facebook.react.uimanager.events.Event; @@ -27,13 +29,36 @@ public class ReactTextChangedEvent extends Event { private float mContentHeight; private int mEventCount; + /** + * See {@link Event#Event(int)}. + * + * @param viewTag + * @param text + * @param contentSizeWidth + * @param contentSizeHeight + * @param eventCount + */ + @Deprecated + public ReactTextChangedEvent( + int viewTag, + String text, + float contentSizeWidth, + float contentSizeHeight, + int eventCount) { + super(viewTag); + mText = text; + mContentWidth = contentSizeWidth; + mContentHeight = contentSizeHeight; + mEventCount = eventCount; + } + public ReactTextChangedEvent( - int viewId, + View view, String text, float contentSizeWidth, float contentSizeHeight, int eventCount) { - super(viewId); + super(view); mText = text; mContentWidth = contentSizeWidth; mContentHeight = contentSizeHeight; diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputBlurEvent.java b/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputBlurEvent.java index a51d01677e8107..b8a87054e50935 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputBlurEvent.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputBlurEvent.java @@ -9,6 +9,8 @@ package com.facebook.react.views.textinput; +import android.view.View; + import com.facebook.react.bridge.Arguments; import com.facebook.react.bridge.WritableMap; import com.facebook.react.uimanager.events.Event; @@ -21,8 +23,18 @@ private static final String EVENT_NAME = "topBlur"; - public ReactTextInputBlurEvent(int viewId) { - super(viewId); + /** + * See {@link Event#Event(int)}. + * + * @param viewTag + */ + @Deprecated + public ReactTextInputBlurEvent(int viewTag) { + super(viewTag); + } + + public ReactTextInputBlurEvent(View view) { + super(view); } @Override diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputEndEditingEvent.java b/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputEndEditingEvent.java index 9c6975cf7a9869..cab1a2155a3ef8 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputEndEditingEvent.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputEndEditingEvent.java @@ -9,6 +9,8 @@ package com.facebook.react.views.textinput; +import android.view.View; + import com.facebook.react.bridge.Arguments; import com.facebook.react.bridge.WritableMap; import com.facebook.react.uimanager.events.Event; @@ -24,10 +26,24 @@ class ReactTextInputEndEditingEvent extends Event private String mText; + /** + * See {@link Event#Event(int)}. + * + * @param viewTag + * @param text + */ + @Deprecated + public ReactTextInputEndEditingEvent( + int viewTag, + String text) { + super(viewTag); + mText = text; + } + public ReactTextInputEndEditingEvent( - int viewId, + View view, String text) { - super(viewId); + super(view); mText = text; } diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputEvent.java b/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputEvent.java index caab8c136c0eb4..daf1dcbb530613 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputEvent.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputEvent.java @@ -9,6 +9,8 @@ package com.facebook.react.views.textinput; +import android.view.View; + import com.facebook.react.bridge.Arguments; import com.facebook.react.bridge.WritableMap; import com.facebook.react.uimanager.events.Event; @@ -27,13 +29,36 @@ public class ReactTextInputEvent extends Event { private int mRangeStart; private int mRangeEnd; + /** + * See {@link Event#Event(int)}. + * + * @param viewTag + * @param text + * @param previousText + * @param rangeStart + * @param rangeEnd + */ + @Deprecated + public ReactTextInputEvent( + int viewTag, + String text, + String previousText, + int rangeStart, + int rangeEnd) { + super(viewTag); + mText = text; + mPreviousText = previousText; + mRangeStart = rangeStart; + mRangeEnd = rangeEnd; + } + public ReactTextInputEvent( - int viewId, + View view, String text, String previousText, int rangeStart, int rangeEnd) { - super(viewId); + super(view); mText = text; mPreviousText = previousText; mRangeStart = rangeStart; diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputFocusEvent.java b/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputFocusEvent.java index 3ca67c3d944008..fdbe1fd6f719e5 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputFocusEvent.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputFocusEvent.java @@ -9,6 +9,8 @@ package com.facebook.react.views.textinput; +import android.view.View; + import com.facebook.react.bridge.Arguments; import com.facebook.react.bridge.WritableMap; import com.facebook.react.uimanager.events.Event; @@ -21,8 +23,18 @@ private static final String EVENT_NAME = "topFocus"; - public ReactTextInputFocusEvent(int viewId) { - super(viewId); + /** + * See {@link Event#Event(int)}. + * + * @param viewTag + */ + @Deprecated + public ReactTextInputFocusEvent(int viewTag) { + super(viewTag); + } + + public ReactTextInputFocusEvent(View view) { + super(view); } @Override 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 2a2cf446c70de9..e88199ed47cd2f 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 @@ -645,7 +645,7 @@ public void onTextChanged(CharSequence s, int start, int before, int count) { // TODO: t7936714 merge these events mEventDispatcher.dispatchEvent( new ReactTextChangedEvent( - mEditText.getId(), + mEditText, s.toString(), PixelUtil.toDIPFromPixel(contentWidth), PixelUtil.toDIPFromPixel(contentHeight), @@ -653,7 +653,7 @@ public void onTextChanged(CharSequence s, int start, int before, int count) { mEventDispatcher.dispatchEvent( new ReactTextInputEvent( - mEditText.getId(), + mEditText, newText, oldText, start, @@ -678,15 +678,15 @@ public void onFocusChange(View v, boolean hasFocus) { if (hasFocus) { eventDispatcher.dispatchEvent( new ReactTextInputFocusEvent( - editText.getId())); + editText)); } else { eventDispatcher.dispatchEvent( new ReactTextInputBlurEvent( - editText.getId())); + editText)); eventDispatcher.dispatchEvent( new ReactTextInputEndEditingEvent( - editText.getId(), + editText, editText.getText().toString())); } } @@ -703,7 +703,7 @@ public boolean onEditorAction(TextView v, int actionId, KeyEvent keyEvent) { reactContext.getNativeModule(UIManagerModule.class).getEventDispatcher(); eventDispatcher.dispatchEvent( new ReactTextInputSubmitEditingEvent( - editText.getId(), + editText, editText.getText().toString())); } if (actionId == EditorInfo.IME_ACTION_NEXT || @@ -749,7 +749,7 @@ public void onLayout() { mEventDispatcher.dispatchEvent( new ReactContentSizeChangedEvent( - mEditText.getId(), + mEditText, PixelUtil.toDIPFromPixel(contentWidth), PixelUtil.toDIPFromPixel(contentHeight))); } @@ -777,7 +777,7 @@ public void onSelectionChanged(int start, int end) { if (mPreviousSelectionStart != start || mPreviousSelectionEnd != end) { mEventDispatcher.dispatchEvent( new ReactTextInputSelectionEvent( - mReactEditText.getId(), + mReactEditText, start, end )); diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputSelectionEvent.java b/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputSelectionEvent.java index c9e5a4153715ef..d191c64e59243b 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputSelectionEvent.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputSelectionEvent.java @@ -9,6 +9,8 @@ package com.facebook.react.views.textinput; +import android.view.View; + import com.facebook.react.bridge.Arguments; import com.facebook.react.bridge.WritableMap; import com.facebook.react.uimanager.events.Event; @@ -25,11 +27,28 @@ private int mSelectionStart; private int mSelectionEnd; + /** + * See {@link Event#Event(int)}. + * + * @param viewTag + * @param selectionStart + * @param selectionEnd + */ + @Deprecated + public ReactTextInputSelectionEvent( + int viewTag, + int selectionStart, + int selectionEnd) { + super(viewTag); + mSelectionStart = selectionStart; + mSelectionEnd = selectionEnd; + } + public ReactTextInputSelectionEvent( - int viewId, + View view, int selectionStart, int selectionEnd) { - super(viewId); + super(view); mSelectionStart = selectionStart; mSelectionEnd = selectionEnd; } diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputSubmitEditingEvent.java b/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputSubmitEditingEvent.java index 32b9755a0129d3..47006bf0243440 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputSubmitEditingEvent.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputSubmitEditingEvent.java @@ -9,6 +9,8 @@ package com.facebook.react.views.textinput; +import android.view.View; + import com.facebook.react.bridge.Arguments; import com.facebook.react.bridge.WritableMap; import com.facebook.react.uimanager.events.Event; @@ -24,10 +26,24 @@ private String mText; + /** + * See {@link Event#Event(int)}. + * + * @param viewTag + * @param text + */ + @Deprecated + public ReactTextInputSubmitEditingEvent( + int viewTag, + String text) { + super(viewTag); + mText = text; + } + public ReactTextInputSubmitEditingEvent( - int viewId, + View view, String text) { - super(viewId); + super(view); mText = text; } 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 b37040a22f3ed8..05defcc8e3546c 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 @@ -130,7 +130,7 @@ protected void addEventEmitters(final ThemedReactContext reactContext, final Rea @Override public void onClick(View v) { mEventDispatcher.dispatchEvent( - new ToolbarClickEvent(view.getId(), -1)); + new ToolbarClickEvent(view, -1)); } }); @@ -140,7 +140,7 @@ public void onClick(View v) { public boolean onMenuItemClick(MenuItem menuItem) { mEventDispatcher.dispatchEvent( new ToolbarClickEvent( - view.getId(), + view, menuItem.getOrder())); return true; } diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/toolbar/events/ToolbarClickEvent.java b/ReactAndroid/src/main/java/com/facebook/react/views/toolbar/events/ToolbarClickEvent.java index 2391a2147ef718..c444c3d127b06f 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/toolbar/events/ToolbarClickEvent.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/toolbar/events/ToolbarClickEvent.java @@ -8,6 +8,8 @@ */ package com.facebook.react.views.toolbar.events; +import android.view.View; + import com.facebook.react.bridge.WritableMap; import com.facebook.react.bridge.WritableNativeMap; import com.facebook.react.uimanager.events.Event; @@ -22,8 +24,20 @@ public class ToolbarClickEvent extends Event { private static final String EVENT_NAME = "topSelect"; private final int position; - public ToolbarClickEvent(int viewId, int position) { - super(viewId); + /** + * See {@link Event#Event(int)}. + * + * @param viewTag + * @param position + */ + @Deprecated + public ToolbarClickEvent(int viewTag, int position) { + super(viewTag); + this.position = position; + } + + public ToolbarClickEvent(View view, int position) { + super(view); this.position = position; } diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/viewpager/PageScrollEvent.java b/ReactAndroid/src/main/java/com/facebook/react/views/viewpager/PageScrollEvent.java index 6eeac56d747ba1..d31edb9f3287f8 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/viewpager/PageScrollEvent.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/viewpager/PageScrollEvent.java @@ -9,6 +9,8 @@ package com.facebook.react.views.viewpager; +import android.view.View; + import com.facebook.react.bridge.Arguments; import com.facebook.react.bridge.WritableMap; import com.facebook.react.uimanager.events.Event; @@ -31,13 +33,30 @@ private final int mPosition; private final float mOffset; - protected PageScrollEvent(int viewTag, int position, float offset) { + /** + * See {@link Event#Event(int)}. + * + * @param viewTag + * @param position + * @param offset + */ + @Deprecated + protected PageScrollEvent(int viewTag, int position, int offset) { super(viewTag); mPosition = position; + mOffset = getOffset(offset); + } + + protected PageScrollEvent(View view, int position, float offset) { + super(view); + mPosition = position; // folly::toJson default options don't support serialize NaN or Infinite value - mOffset = (Float.isInfinite(offset) || Float.isNaN(offset)) - ? 0.0f : offset; + mOffset = getOffset(offset); + } + + private float getOffset(float offset) { + return (Float.isInfinite(offset) || Float.isNaN(offset)) ? 0.0f : offset; } @Override diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/viewpager/PageScrollStateChangedEvent.java b/ReactAndroid/src/main/java/com/facebook/react/views/viewpager/PageScrollStateChangedEvent.java index d3a5a7c4a10302..1902d392d49fad 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/viewpager/PageScrollStateChangedEvent.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/viewpager/PageScrollStateChangedEvent.java @@ -9,6 +9,8 @@ package com.facebook.react.views.viewpager; +import android.view.View; + import com.facebook.react.bridge.Arguments; import com.facebook.react.bridge.WritableMap; import com.facebook.react.uimanager.events.Event; @@ -26,11 +28,23 @@ class PageScrollStateChangedEvent extends Event { private final String mPageScrollState; + /** + * See {@link Event#Event(int)}. + * + * @param viewTag + * @param pageScrollState + */ + @Deprecated protected PageScrollStateChangedEvent(int viewTag, String pageScrollState) { super(viewTag); mPageScrollState = pageScrollState; } + protected PageScrollStateChangedEvent(View view, String pageScrollState) { + super(view); + mPageScrollState = pageScrollState; + } + @Override public String getEventName() { return EVENT_NAME; diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/viewpager/PageSelectedEvent.java b/ReactAndroid/src/main/java/com/facebook/react/views/viewpager/PageSelectedEvent.java index 6145c08230bcc2..bad263866cb875 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/viewpager/PageSelectedEvent.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/viewpager/PageSelectedEvent.java @@ -9,6 +9,8 @@ package com.facebook.react.views.viewpager; +import android.view.View; + import com.facebook.react.bridge.Arguments; import com.facebook.react.bridge.WritableMap; import com.facebook.react.uimanager.events.Event; @@ -26,11 +28,23 @@ private final int mPosition; + /** + * See {@link Event#Event(int)}. + * + * @param viewTag + * @param position + */ + @Deprecated protected PageSelectedEvent(int viewTag, int position) { super(viewTag); mPosition = position; } + protected PageSelectedEvent(View view, int position) { + super(view); + mPosition = position; + } + @Override public String getEventName() { return EVENT_NAME; 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 c5a2ea12f71557..55e7b079d442d0 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 @@ -123,14 +123,14 @@ private class PageChangeListener implements OnPageChangeListener { @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { mEventDispatcher.dispatchEvent( - new PageScrollEvent(getId(), position, positionOffset)); + new PageScrollEvent(getThisPager(), position, positionOffset)); } @Override public void onPageSelected(int position) { if (!mIsCurrentItemFromJs) { mEventDispatcher.dispatchEvent( - new PageSelectedEvent(getId(), position)); + new PageSelectedEvent(getThisPager(), position)); } } @@ -151,7 +151,7 @@ public void onPageScrollStateChanged(int state) { throw new IllegalStateException("Unsupported pageScrollState"); } mEventDispatcher.dispatchEvent( - new PageScrollStateChangedEvent(getId(), pageScrollState)); + new PageScrollStateChangedEvent(getThisPager(), pageScrollState)); } } @@ -194,6 +194,10 @@ public boolean onTouchEvent(MotionEvent ev) { return super.onTouchEvent(ev); } + private ReactViewPager getThisPager() { + return this; + } + public void setCurrentItemFromJs(int item, boolean animated) { mIsCurrentItemFromJs = true; setCurrentItem(item, animated); 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 20951b621291fe..33e09914150c48 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 @@ -57,6 +57,8 @@ import org.json.JSONObject; import org.json.JSONException; +import static com.facebook.react.common.TestIdUtil.getOriginalReactTag; + /** * Manages instances of {@link WebView} * @@ -126,7 +128,7 @@ public void onPageStarted(WebView webView, String url, Bitmap favicon) { dispatchEvent( webView, new TopLoadingStartEvent( - webView.getId(), + webView, createWebViewEvent(webView, url))); } @@ -162,7 +164,7 @@ public void onReceivedError( dispatchEvent( webView, - new TopLoadingErrorEvent(webView.getId(), eventData)); + new TopLoadingErrorEvent(webView, eventData)); } @Override @@ -172,7 +174,7 @@ public void doUpdateVisitedHistory(WebView webView, String url, boolean isReload dispatchEvent( webView, new TopLoadingStartEvent( - webView.getId(), + webView, createWebViewEvent(webView, url))); } @@ -180,13 +182,13 @@ private void emitFinishEvent(WebView webView, String url) { dispatchEvent( webView, new TopLoadingFinishEvent( - webView.getId(), + webView, createWebViewEvent(webView, url))); } private WritableMap createWebViewEvent(WebView webView, String url) { WritableMap event = Arguments.createMap(); - event.putDouble("target", webView.getId()); + event.putDouble("target", getOriginalReactTag(webView)); // Don't use webView.getUrl() here, the URL isn't updated to the new value yet in callbacks // like onPageFinished event.putString("url", url); @@ -512,7 +514,7 @@ public void onNewPicture(WebView webView, Picture picture) { dispatchEvent( webView, new ContentSizeChangeEvent( - webView.getId(), + webView, webView.getWidth(), webView.getContentHeight())); } diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/webview/events/TopLoadingErrorEvent.java b/ReactAndroid/src/main/java/com/facebook/react/views/webview/events/TopLoadingErrorEvent.java index 795b29f69a4533..c358b448284b49 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/webview/events/TopLoadingErrorEvent.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/webview/events/TopLoadingErrorEvent.java @@ -9,6 +9,8 @@ package com.facebook.react.views.webview.events; +import android.view.View; + import com.facebook.react.bridge.WritableMap; import com.facebook.react.uimanager.events.Event; import com.facebook.react.uimanager.events.RCTEventEmitter; @@ -21,8 +23,20 @@ public class TopLoadingErrorEvent extends Event { public static final String EVENT_NAME = "topLoadingError"; private WritableMap mEventData; - public TopLoadingErrorEvent(int viewId, WritableMap eventData) { - super(viewId); + /** + * See {@link Event#Event(int)}. + * + * @param viewTag + * @param eventData + */ + @Deprecated + public TopLoadingErrorEvent(int viewTag, WritableMap eventData) { + super(viewTag); + mEventData = eventData; + } + + public TopLoadingErrorEvent(View view, WritableMap eventData) { + super(view); mEventData = eventData; } diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/webview/events/TopLoadingFinishEvent.java b/ReactAndroid/src/main/java/com/facebook/react/views/webview/events/TopLoadingFinishEvent.java index e858fbc176dff9..7ffffe60c22f0f 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/webview/events/TopLoadingFinishEvent.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/webview/events/TopLoadingFinishEvent.java @@ -9,6 +9,8 @@ package com.facebook.react.views.webview.events; +import android.view.View; + import com.facebook.react.bridge.WritableMap; import com.facebook.react.uimanager.events.Event; import com.facebook.react.uimanager.events.RCTEventEmitter; @@ -21,8 +23,20 @@ public class TopLoadingFinishEvent extends Event { public static final String EVENT_NAME = "topLoadingFinish"; private WritableMap mEventData; - public TopLoadingFinishEvent(int viewId, WritableMap eventData) { - super(viewId); + /** + * See {@link Event#Event(int)}. + * + * @param viewTag + * @param eventData + */ + @Deprecated + public TopLoadingFinishEvent(int viewTag, WritableMap eventData) { + super(viewTag); + mEventData = eventData; + } + + public TopLoadingFinishEvent(View view, WritableMap eventData) { + super(view); mEventData = eventData; } diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/webview/events/TopLoadingStartEvent.java b/ReactAndroid/src/main/java/com/facebook/react/views/webview/events/TopLoadingStartEvent.java index 171cf6e6515712..8bb9822a1bfdd6 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/webview/events/TopLoadingStartEvent.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/webview/events/TopLoadingStartEvent.java @@ -9,6 +9,8 @@ package com.facebook.react.views.webview.events; +import android.view.View; + import com.facebook.react.bridge.WritableMap; import com.facebook.react.uimanager.events.Event; import com.facebook.react.uimanager.events.RCTEventEmitter; @@ -21,8 +23,20 @@ public class TopLoadingStartEvent extends Event { public static final String EVENT_NAME = "topLoadingStart"; private WritableMap mEventData; - public TopLoadingStartEvent(int viewId, WritableMap eventData) { - super(viewId); + /** + * See {@link Event#Event(int)}. + * + * @param viewTag + * @param eventData + */ + @Deprecated + public TopLoadingStartEvent(int viewTag, WritableMap eventData) { + super(viewTag); + mEventData = eventData; + } + + public TopLoadingStartEvent(View view, WritableMap eventData) { + super(view); mEventData = eventData; } diff --git a/ReactAndroid/src/test/java/com/facebook/react/animated/NativeAnimatedNodeTraversalTest.java b/ReactAndroid/src/test/java/com/facebook/react/animated/NativeAnimatedNodeTraversalTest.java index 9f4db9d6fd1945..509ae31a263a5e 100644 --- a/ReactAndroid/src/test/java/com/facebook/react/animated/NativeAnimatedNodeTraversalTest.java +++ b/ReactAndroid/src/test/java/com/facebook/react/animated/NativeAnimatedNodeTraversalTest.java @@ -9,6 +9,8 @@ package com.facebook.react.animated; +import android.view.View; + import com.facebook.react.bridge.Arguments; import com.facebook.react.bridge.Callback; import com.facebook.react.bridge.JavaOnlyArray; @@ -27,6 +29,8 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.ArgumentCaptor; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; import org.mockito.invocation.InvocationOnMock; import org.mockito.stubbing.Answer; import org.powermock.api.mockito.PowerMockito; @@ -45,6 +49,7 @@ import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verifyNoMoreInteractions; +import static org.mockito.Mockito.when; /** * Tests the animated nodes graph traversal algorithm from {@link NativeAnimatedNodesManager}. @@ -54,6 +59,9 @@ @PowerMockIgnore({"org.mockito.*", "org.robolectric.*", "android.*"}) public class NativeAnimatedNodeTraversalTest { + @Mock + private View view; + private final int viewTag = 1000; private static long FRAME_LEN_NANOS = 1000000000L / 60L; private static long INITIAL_FRAME_TIME_NANOS = 14599233201256L; /* random */ @@ -72,6 +80,8 @@ private long nextFrameTime() { @Before public void setUp() { + MockitoAnnotations.initMocks(this); + when(view.getId()).thenReturn(viewTag); PowerMockito.mockStatic(Arguments.class); PowerMockito.when(Arguments.createArray()).thenAnswer(new Answer() { @Override @@ -726,8 +736,8 @@ public void testInterpolationNode() { verifyNoMoreInteractions(mUIImplementationMock); } - private Event createScrollEvent(final int tag, final double value) { - return new Event(tag) { + private Event createScrollEvent(final View view, final double value) { + return new Event(view) { @Override public String getEventName() { return "topScroll"; @@ -735,7 +745,7 @@ public String getEventName() { @Override public void dispatch(RCTEventEmitter rctEventEmitter) { - rctEventEmitter.receiveEvent(tag, "topScroll", JavaOnlyMap.of( + rctEventEmitter.receiveEvent(getViewTag(), "topScroll", JavaOnlyMap.of( "contentOffset", JavaOnlyMap.of("y", value))); } }; @@ -743,15 +753,13 @@ public void dispatch(RCTEventEmitter rctEventEmitter) { @Test public void testNativeAnimatedEventDoUpdate() { - int viewTag = 1000; - createSimpleAnimatedViewWithOpacity(viewTag, 0d); mNativeAnimatedNodesManager.addAnimatedEventToView(viewTag, "topScroll", JavaOnlyMap.of( "animatedValueTag", 1, "nativeEventPath", JavaOnlyArray.of("contentOffset", "y"))); - mNativeAnimatedNodesManager.onEventDispatch(createScrollEvent(viewTag, 10)); + mNativeAnimatedNodesManager.onEventDispatch(createScrollEvent(view, 10)); ArgumentCaptor stylesCaptor = ArgumentCaptor.forClass(ReactStylesDiffMap.class); @@ -764,8 +772,6 @@ public void testNativeAnimatedEventDoUpdate() { @Test public void testNativeAnimatedEventDoNotUpdate() { - int viewTag = 1000; - createSimpleAnimatedViewWithOpacity(viewTag, 0d); mNativeAnimatedNodesManager.addAnimatedEventToView(viewTag, "otherEvent", JavaOnlyMap.of( @@ -776,7 +782,7 @@ public void testNativeAnimatedEventDoNotUpdate() { "animatedValueTag", 1, "nativeEventPath", JavaOnlyArray.of("contentOffset", "y"))); - mNativeAnimatedNodesManager.onEventDispatch(createScrollEvent(viewTag, 10)); + mNativeAnimatedNodesManager.onEventDispatch(createScrollEvent(view, 10)); ArgumentCaptor stylesCaptor = ArgumentCaptor.forClass(ReactStylesDiffMap.class); @@ -789,8 +795,6 @@ public void testNativeAnimatedEventDoNotUpdate() { @Test public void testNativeAnimatedEventCustomMapping() { - int viewTag = 1000; - PowerMockito.when(mUIManagerMock.getConstants()).thenAnswer(new Answer() { @Override public Object answer(InvocationOnMock invocation) throws Throwable { @@ -807,7 +811,7 @@ public Object answer(InvocationOnMock invocation) throws Throwable { "animatedValueTag", 1, "nativeEventPath", JavaOnlyArray.of("contentOffset", "y"))); - mNativeAnimatedNodesManager.onEventDispatch(createScrollEvent(viewTag, 10)); + mNativeAnimatedNodesManager.onEventDispatch(createScrollEvent(view, 10)); ArgumentCaptor stylesCaptor = ArgumentCaptor.forClass(ReactStylesDiffMap.class); diff --git a/ReactAndroid/src/test/java/com/facebook/react/uimanager/BaseViewManagerTest.java b/ReactAndroid/src/test/java/com/facebook/react/uimanager/BaseViewManagerTest.java new file mode 100644 index 00000000000000..a75e08b3f206df --- /dev/null +++ b/ReactAndroid/src/test/java/com/facebook/react/uimanager/BaseViewManagerTest.java @@ -0,0 +1,162 @@ +/** + * Copyright (c) 2015-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.uimanager; + +import android.content.Context; +import android.content.res.Resources; +import android.view.View; + +import com.facebook.csslayout.Spacing; +import com.facebook.react.common.TestIdUtil; + +import org.junit.After; +import org.junit.Before; +import org.junit.FixMethodOrder; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.MethodSorters; +import org.mockito.InOrder; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; +import org.mockito.verification.VerificationMode; +import org.powermock.core.classloader.annotations.PowerMockIgnore; +import org.powermock.core.classloader.annotations.PrepareForTest; +import org.robolectric.RobolectricTestRunner; +import org.robolectric.annotation.Config; + +import static org.junit.Assert.assertEquals; +import static org.mockito.AdditionalMatchers.not; +import static org.mockito.Matchers.any; +import static org.mockito.Matchers.anyFloat; +import static org.mockito.Matchers.anyInt; +import static org.mockito.Matchers.eq; +import static org.mockito.Mockito.inOrder; +import static org.mockito.Mockito.never; +import static org.mockito.Mockito.spy; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.verifyZeroInteractions; +import static org.mockito.Mockito.when; +import static org.mockito.internal.verification.VerificationModeFactory.calls; + +@Config(manifest= Config.NONE) +@RunWith(RobolectricTestRunner.class) +@PowerMockIgnore({"org.mockito.*", "org.robolectric.*", "android.*"}) +public class BaseViewManagerTest { + + @Mock + Resources resources; + @Mock + Context context; + @Mock + private View view; + private BaseViewManager sut; + + private final String testID = "some-test-id"; + private final int mappedTestID = 23457897; + private final int originalJsTag = 5; + private final String myPackage = "com.myApp"; + + + @Before + public void setup() { + MockitoAnnotations.initMocks(this); + when(view.getContext()).thenReturn(context); + when(view.getResources()).thenReturn(resources); + when(view.getId()).thenReturn(originalJsTag); + when(resources.getIdentifier(eq(testID), eq("id"), eq(myPackage))).thenReturn(mappedTestID); + when(resources.getIdentifier(eq(testID), eq("id"), not(eq(myPackage)))).thenReturn(0); + sut = new ViewManagerStub(); + } + + @After + public void teardown() { + TestIdUtil.resetTestState(); + } + + @Test + public void testSetTestIdShouldAlwaysCallSetTag() { + String expectedTestID1 = "asdfasdf1"; + String expectedTestID2 = "asdfasdf2"; + when(context.getPackageName()).thenReturn("com.foo"); + sut.setTestId(view, expectedTestID1); + sut.setTestId(view, expectedTestID2); + verify(view).setTag(expectedTestID1); + verify(view).setTag(expectedTestID2); + } + + @Test + public void testUsingATestIdNotFoundInResources() { + when(context.getPackageName()).thenReturn("com.foo"); + sut.setTestId(view, testID); + verify(view, never()).setId(anyInt()); + } + + @Test + public void testUsingATestIdFoundInResources() { + InOrder inOrder = inOrder(view); + when(context.getPackageName()).thenReturn(myPackage); + sut.setTestId(view, testID); + inOrder.verify(view, calls(1)).setId(mappedTestID); + when(view.getId()).thenReturn((mappedTestID)); + sut.setTestId(view, testID); + inOrder.verify(view, never()).setId(anyInt()); + } + + @Test + public void testRetrievingOriginalReactTagWhenNoTestIdWasUsed() { + assertEquals("The original JS tag was not returned", TestIdUtil.getOriginalReactTag(view), originalJsTag); + } + + @Test + public void testRetrievingOriginalReactTagWhenTestIdWasUsed() { + when(context.getPackageName()).thenReturn(myPackage); + sut.setTestId(view, testID); + verify(view).setId(mappedTestID); + assertEquals("The original JS tag was not returned", TestIdUtil.getOriginalReactTag(view), originalJsTag); + } + + @Test + public void testWhenTheViewInstanceIsRemoved() { + InOrder inOrder = inOrder(view); + when(context.getPackageName()).thenReturn(myPackage); + sut.setTestId(view, testID); + inOrder.verify(view).setId(mappedTestID); + assertEquals("The original JS tag was not returned", TestIdUtil.getOriginalReactTag(view), originalJsTag); + sut.onDropViewInstance(view); + inOrder.verify(view).setId(originalJsTag); + } + + private static class ViewManagerStub extends BaseViewManager { + @Override + public String getName() { + return null; + } + + @Override + public LayoutShadowNode createShadowNodeInstance() { + return null; + } + + @Override + public Class getShadowNodeClass() { + return null; + } + + @Override + protected View createViewInstance(ThemedReactContext reactContext) { + return null; + } + + @Override + public void updateExtraData(View root, Object extraData) { + + } + } +} From d613eda05eb468928404f5b8c884c40faf6e9c69 Mon Sep 17 00:00:00 2001 From: jsdevel Date: Sat, 8 Oct 2016 04:23:34 -0700 Subject: [PATCH 2/6] Attempting setTag over setId. --- Libraries/Components/View/View.js | 5 -- .../react/testing/ReactAppTestActivity.java | 2 +- .../tests/CatalystUIManagerTestCase.java | 12 +++-- .../react/XReactInstanceManagerImpl.java | 6 +-- .../com/facebook/react/common/TestIdUtil.java | 49 +---------------- .../react/common/ViewHelperMethods.java | 22 ++++++++ .../react/touch/JSResponderHandler.java | 4 +- .../react/uimanager/BaseViewManager.java | 7 --- .../uimanager/NativeViewHierarchyManager.java | 26 ++++----- .../react/uimanager/TouchTargetHelper.java | 12 ++--- .../events/ContentSizeChangeEvent.java | 18 +------ .../react/uimanager/events/Event.java | 26 ++------- .../drawer/ReactDrawerLayoutManager.java | 8 +-- .../drawer/events/DrawerClosedEvent.java | 14 +---- .../drawer/events/DrawerOpenedEvent.java | 14 +---- .../views/drawer/events/DrawerSlideEvent.java | 16 +----- .../events/DrawerStateChangedEvent.java | 16 +----- .../react/views/image/ImageLoadEvent.java | 53 ++----------------- .../react/views/image/ReactImageView.java | 14 ++--- .../views/modal/ReactModalHostManager.java | 4 +- .../react/views/modal/ReactModalHostView.java | 4 +- .../react/views/modal/RequestCloseEvent.java | 14 +---- .../facebook/react/views/modal/ShowEvent.java | 14 +---- .../views/picker/ReactPickerManager.java | 2 +- .../picker/events/PickerItemSelectEvent.java | 16 +----- .../RecyclerViewBackedScrollView.java | 8 +-- .../views/scroll/ReactScrollViewHelper.java | 2 +- .../react/views/scroll/ScrollEvent.java | 9 ++-- .../react/views/slider/ReactSliderEvent.java | 17 +----- .../views/slider/ReactSliderManager.java | 4 +- .../slider/ReactSlidingCompleteEvent.java | 16 +----- .../views/swiperefresh/RefreshEvent.java | 14 +---- .../SwipeRefreshLayoutManager.java | 2 +- .../views/switchview/ReactSwitchEvent.java | 16 +----- .../views/switchview/ReactSwitchManager.java | 2 +- .../react/views/text/ReactTextView.java | 5 +- .../ReactContentSizeChangedEvent.java | 21 +------- .../textinput/ReactTextChangedEvent.java | 27 +--------- .../textinput/ReactTextInputBlurEvent.java | 14 +---- .../ReactTextInputEndEditingEvent.java | 18 +------ .../views/textinput/ReactTextInputEvent.java | 27 +--------- .../textinput/ReactTextInputFocusEvent.java | 14 +---- .../textinput/ReactTextInputManager.java | 16 +++--- .../ReactTextInputSelectionEvent.java | 21 +------- .../ReactTextInputSubmitEditingEvent.java | 18 +------ .../views/toolbar/ReactToolbarManager.java | 4 +- .../toolbar/events/ToolbarClickEvent.java | 16 +----- .../views/viewpager/PageScrollEvent.java | 20 +------ .../PageScrollStateChangedEvent.java | 16 +----- .../views/viewpager/PageSelectedEvent.java | 16 +----- .../react/views/viewpager/ReactViewPager.java | 10 ++-- .../views/webview/ReactWebViewManager.java | 14 ++--- .../webview/events/TopLoadingErrorEvent.java | 16 +----- .../webview/events/TopLoadingFinishEvent.java | 16 +----- .../webview/events/TopLoadingStartEvent.java | 16 +----- .../java/com/facebook/react/RootViewTest.java | 2 +- .../NativeAnimatedNodeTraversalTest.java | 4 +- .../react/uimanager/BaseViewManagerTest.java | 37 ------------- .../react/uimanager/UIManagerModuleTest.java | 12 ++--- 59 files changed, 148 insertions(+), 700 deletions(-) create mode 100644 ReactAndroid/src/main/java/com/facebook/react/common/ViewHelperMethods.java diff --git a/Libraries/Components/View/View.js b/Libraries/Components/View/View.js index 4a72c956e1100e..baedafaf1bcd47 100644 --- a/Libraries/Components/View/View.js +++ b/Libraries/Components/View/View.js @@ -262,11 +262,6 @@ const View = React.createClass({ * * ### Android Specifics * - * By default this value is passed to the underlying View's - * [setTag](https://developer.android.com/reference/android/view/View.html#setTag(java.lang.Object) - * method. Very few testing frameworks support looking up - * a View by tag, let alone `uiautomatorviewer` which only supports `content-description`, `resource-id`, `text`, and `XPath`. - * * While React Native does *not* utilize XML based layouts for android Views it * is still possible to add [android:id](https://developer.android.com/reference/android/view/View.html#attr_android:id) * to the underlying View in order to support diff --git a/ReactAndroid/src/androidTest/java/com/facebook/react/testing/ReactAppTestActivity.java b/ReactAndroid/src/androidTest/java/com/facebook/react/testing/ReactAppTestActivity.java index 4e84fdab239ca3..dc0200e3cc97a6 100644 --- a/ReactAndroid/src/androidTest/java/com/facebook/react/testing/ReactAppTestActivity.java +++ b/ReactAndroid/src/androidTest/java/com/facebook/react/testing/ReactAppTestActivity.java @@ -58,7 +58,7 @@ protected void onCreate(Bundle savedInstanceState) { setContentView(rootView); mScreenshotingFrameLayout = new ScreenshotingFrameLayout(this); - mScreenshotingFrameLayout.setId(ROOT_VIEW_ID); + mScreenshotingFrameLayout.setTag(ROOT_VIEW_ID); rootView.addView(mScreenshotingFrameLayout); mReactRootView = new ReactRootView(this); diff --git a/ReactAndroid/src/androidTest/java/com/facebook/react/tests/CatalystUIManagerTestCase.java b/ReactAndroid/src/androidTest/java/com/facebook/react/tests/CatalystUIManagerTestCase.java index f73efaf4677864..0c66146c04db3e 100644 --- a/ReactAndroid/src/androidTest/java/com/facebook/react/tests/CatalystUIManagerTestCase.java +++ b/ReactAndroid/src/androidTest/java/com/facebook/react/tests/CatalystUIManagerTestCase.java @@ -34,6 +34,8 @@ import com.facebook.react.testing.ReactIntegrationTestCase; import com.facebook.react.testing.ReactTestHelper; +import static com.facebook.react.common.ViewHelperMethods.reactTagFrom; + /** * Test case for basic {@link UIManagerModule} functionality. */ @@ -102,7 +104,7 @@ public void run() { public void testFlexUIRendered() { FrameLayout rootView = createRootView(); - jsModule.renderFlexTestApplication(rootView.getId()); + jsModule.renderFlexTestApplication(reactTagFrom(rootView)); waitForBridgeAndUIIdle(); assertEquals(1, rootView.getChildCount()); @@ -126,7 +128,7 @@ public void testFlexUIRendered() { // Find what could be different and make the test independent of env // public void testFlexWithTextViews() { // FrameLayout rootView = createRootView(); - // jsModule.renderFlexWithTextApplication(rootView.getId()); + // jsModule.renderFlexWithTextApplication(reactTagFrom(rootView)); // waitForBridgeAndUIIdle(); // // assertEquals(1, rootView.getChildCount()); @@ -164,7 +166,7 @@ public void testFlexUIRendered() { public void testAbsolutePositionUIRendered() { FrameLayout rootView = createRootView(); - jsModule.renderAbsolutePositionTestApplication(rootView.getId()); + jsModule.renderAbsolutePositionTestApplication(reactTagFrom(rootView)); waitForBridgeAndUIIdle(); assertEquals(1, rootView.getChildCount()); @@ -178,7 +180,7 @@ public void testAbsolutePositionUIRendered() { public void testUpdatePositionInList() { FrameLayout rootView = createRootView(); - jsModule.renderUpdatePositionInListTestApplication(rootView.getId()); + jsModule.renderUpdatePositionInListTestApplication(reactTagFrom(rootView)); waitForBridgeAndUIIdle(); ViewGroup containerView = getViewByTestId(rootView, "container"); @@ -207,7 +209,7 @@ public void testUpdatePositionInList() { public void testAbsolutePositionBottomRightUIRendered() { FrameLayout rootView = createRootView(); - jsModule.renderAbsolutePositionBottomRightTestApplication(rootView.getId()); + jsModule.renderAbsolutePositionBottomRightTestApplication(reactTagFrom(rootView)); waitForBridgeAndUIIdle(); assertEquals(1, rootView.getChildCount()); diff --git a/ReactAndroid/src/main/java/com/facebook/react/XReactInstanceManagerImpl.java b/ReactAndroid/src/main/java/com/facebook/react/XReactInstanceManagerImpl.java index 272a28a90a0614..9ea52772d069e1 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/XReactInstanceManagerImpl.java +++ b/ReactAndroid/src/main/java/com/facebook/react/XReactInstanceManagerImpl.java @@ -88,7 +88,7 @@ import static com.facebook.react.bridge.ReactMarkerConstants.PROCESS_PACKAGES_START; import static com.facebook.react.bridge.ReactMarkerConstants.SETUP_REACT_CONTEXT_END; import static com.facebook.react.bridge.ReactMarkerConstants.SETUP_REACT_CONTEXT_START; -import static com.facebook.react.common.TestIdUtil.getOriginalReactTag; +import static com.facebook.react.common.ViewHelperMethods.reactTagFrom; import static com.facebook.systrace.Systrace.TRACE_TAG_REACT_JAVA_BRIDGE; /** @@ -798,7 +798,7 @@ private void attachMeasuredRootViewToInstance( // Reset view content as it's going to be populated by the application content from JS rootView.removeAllViews(); - rootView.setId(View.NO_ID); + rootView.setTag(View.NO_ID); UIManagerModule uiManagerModule = catalystInstance.getNativeModule(UIManagerModule.class); int rootTag = uiManagerModule.addMeasuredRootView(rootView); @@ -819,7 +819,7 @@ private void detachViewFromInstance( CatalystInstance catalystInstance) { UiThreadUtil.assertOnUiThread(); catalystInstance.getJSModule(AppRegistry.class) - .unmountApplicationComponentAtRootTag(getOriginalReactTag(rootView)); + .unmountApplicationComponentAtRootTag(reactTagFrom(rootView)); } private void tearDownReactContext(ReactContext reactContext) { diff --git a/ReactAndroid/src/main/java/com/facebook/react/common/TestIdUtil.java b/ReactAndroid/src/main/java/com/facebook/react/common/TestIdUtil.java index d783bff96ac5c5..c7898b2a90dbbb 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/common/TestIdUtil.java +++ b/ReactAndroid/src/main/java/com/facebook/react/common/TestIdUtil.java @@ -7,18 +7,14 @@ import java.util.concurrent.ConcurrentHashMap; /** - * Utility methods for managing testIDs on views and mapping them back to React Tags. + * Utility methods for managing testIDs. */ public class TestIdUtil { private static final ConcurrentHashMap TEST_IDS = new ConcurrentHashMap<>(); - private static final ConcurrentHashMap ORIGINAL_REACT_TAGS = new ConcurrentHashMap<>(); - private static volatile boolean hasTagMappings; /** * Looks for defined resource IDs in R.class by the name of testId and if a matching resource ID is - * found it is passed to the view's setId method. Before the view's Id is overridden it is stored - * in an internal association with the view's identity hash code for later retrieval - * (see {@link #getOriginalReactTag(View)}). {@link View#addOn} + * found it is passed to the view's setId method. * * @param view * @param testId @@ -34,56 +30,15 @@ public static void setTestId(T view, String testId) { } if (mappedTestId != 0 && view.getId() != mappedTestId) { - ORIGINAL_REACT_TAGS.put(System.identityHashCode(view), view.getId()); - hasTagMappings = true; view.setId(mappedTestId); } } - /** - * Returns the tag originally generated by the JS when the view was created prior to - * it being potentially overridden by {@link #setTestId(View, String)}. If no view has had it's Id - * overridden by {@link #setTestId(View, String)} then this method simply returns view.getId(). - * In non __DEV__ environments this should be as performant as calling view.getId(). - * - * @param view - * @param - * @return - */ - public static int getOriginalReactTag(T view) { - if (!hasTagMappings) { - return view.getId(); - } - Integer tag = ORIGINAL_REACT_TAGS.get(System.identityHashCode(view)); - return tag != null ? tag.intValue() : view.getId(); - } - - /** - * Removes the internal mapping of this view's identity to it's original react tag set from JS - * and restores it's Id prior to it having been overridden by setTestId. - * - * @param view - * @param - */ - public static void removeMapping(T view) { - if (!hasTagMappings) { - return; - } - int identityHashCode = System.identityHashCode(view); - Integer originalReactTag = ORIGINAL_REACT_TAGS.get(identityHashCode); - if (originalReactTag != null) { - view.setId(originalReactTag); - ORIGINAL_REACT_TAGS.remove(identityHashCode); - } - return; - } - /** * Used by tests to clear the static member Maps. */ @VisibleForTesting public static void resetTestState() { - ORIGINAL_REACT_TAGS.clear(); TEST_IDS.clear(); } } diff --git a/ReactAndroid/src/main/java/com/facebook/react/common/ViewHelperMethods.java b/ReactAndroid/src/main/java/com/facebook/react/common/ViewHelperMethods.java new file mode 100644 index 00000000000000..8fe7e19ee1f9d0 --- /dev/null +++ b/ReactAndroid/src/main/java/com/facebook/react/common/ViewHelperMethods.java @@ -0,0 +1,22 @@ +package com.facebook.react.common; + +import android.view.View; + +/** + * Various helper methods for {@link View} + */ +public class ViewHelperMethods { + + /** + * Returns the react tag for the view. If no react tag has been set then {@link View#NO_ID} is + * returned. + * + * @param view + * @return + */ + public static int reactTagFrom(View view) { + return view == null || view.getTag() == null ? + View.NO_ID : + (int) view.getTag(); + } +} diff --git a/ReactAndroid/src/main/java/com/facebook/react/touch/JSResponderHandler.java b/ReactAndroid/src/main/java/com/facebook/react/touch/JSResponderHandler.java index e9cabb46ed8b85..bf1d56fdfd7372 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/touch/JSResponderHandler.java +++ b/ReactAndroid/src/main/java/com/facebook/react/touch/JSResponderHandler.java @@ -15,7 +15,7 @@ import android.view.ViewGroup; import android.view.ViewParent; -import static com.facebook.react.common.TestIdUtil.getOriginalReactTag; +import static com.facebook.react.common.ViewHelperMethods.reactTagFrom; /** * This class coordinates JSResponder commands for {@link UIManagerModule}. It should be set as @@ -72,7 +72,7 @@ public boolean onInterceptTouchEvent(ViewGroup v, MotionEvent event) { // Therefore since "UP" event is the last event in a gesture, we should just let it reach the // original target that is a child view of {@param v}. // http://developer.android.com/reference/android/view/ViewGroup.html#onInterceptTouchEvent(android.view.MotionEvent) - return getOriginalReactTag(v) == currentJSResponder; + return reactTagFrom(v) == currentJSResponder; } return false; } diff --git a/ReactAndroid/src/main/java/com/facebook/react/uimanager/BaseViewManager.java b/ReactAndroid/src/main/java/com/facebook/react/uimanager/BaseViewManager.java index 01a18831e204fa..02accaf536ecfa 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/uimanager/BaseViewManager.java +++ b/ReactAndroid/src/main/java/com/facebook/react/uimanager/BaseViewManager.java @@ -85,13 +85,6 @@ public void setRenderToHardwareTexture(T view, boolean useHWTexture) { @ReactProp(name = PROP_TEST_ID) public void setTestId(T view, String testId) { TestIdUtil.setTestId(view, testId); - view.setTag(testId); - } - - @Override - public void onDropViewInstance(T view) { - super.onDropViewInstance(view); - TestIdUtil.removeMapping(view); } @ReactProp(name = PROP_ACCESSIBILITY_LABEL) diff --git a/ReactAndroid/src/main/java/com/facebook/react/uimanager/NativeViewHierarchyManager.java b/ReactAndroid/src/main/java/com/facebook/react/uimanager/NativeViewHierarchyManager.java index 91665c2469ea9c..c084312312d86a 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/uimanager/NativeViewHierarchyManager.java +++ b/ReactAndroid/src/main/java/com/facebook/react/uimanager/NativeViewHierarchyManager.java @@ -41,7 +41,7 @@ import javax.annotation.Nullable; import javax.annotation.concurrent.NotThreadSafe; -import static com.facebook.react.common.TestIdUtil.getOriginalReactTag; +import static com.facebook.react.common.ViewHelperMethods.reactTagFrom; /** * Delegate of {@link UIManagerModule} that owns the native view hierarchy and mapping between @@ -206,10 +206,10 @@ private void updateLayout(View viewToUpdate, int x, int y, int width, int height /** * Creates a {@link View} and adds it to a corresponding {@link ViewManager}. * - * The tag (a.k.a. React Tag) is saved with {@link View#setId(int)}. Because testID can override - * this value (see {@link BaseViewManager#setTestId(View, String)}), it is necessary to use - * {@link TestIdUtil#getOriginalReactTag(View)} wherever the original tag is needed - * e.g. when communicating with the Shadow DOM or with JS about a particular react tag. + * The tag (a.k.a. React Tag) is saved with {@link View#setTag(Object)}. It is necessary to use + * {@link com.facebook.react.common.ViewHelperMethods#reactTagFrom(View)} wherever the original + * tag is needed e.g. when communicating with the Shadow DOM or with JS about a particular react + * tag. * * @param themedContext * @param tag @@ -234,7 +234,7 @@ public void createView( View view = viewManager.createView(themedContext, mJSResponderHandler); mTagsToViews.put(tag, view); mTagsToViewManagers.put(tag, viewManager); - view.setId(tag); + view.setTag(tag); if (initialProps != null) { viewManager.updateProperties(view, initialProps); } @@ -252,13 +252,13 @@ private static String constructManageChildrenErrorMessage( StringBuilder stringBuilder = new StringBuilder(); if (null != viewToManage) { - stringBuilder.append("View tag:" + viewToManage.getId() + "\n"); + stringBuilder.append("View tag:" + viewToManage.getTag() + "\n"); stringBuilder.append(" children(" + viewManager.getChildCount(viewToManage) + "): [\n"); for (int index=0; index= 0; i--) { View child = viewGroupManager.getChildAt(viewGroup, i); - if (mTagsToViews.get(getOriginalReactTag(child)) != null) { + if (mTagsToViews.get(reactTagFrom(child)) != null) { dropView(child); } } diff --git a/ReactAndroid/src/main/java/com/facebook/react/uimanager/TouchTargetHelper.java b/ReactAndroid/src/main/java/com/facebook/react/uimanager/TouchTargetHelper.java index 8d6cfc3d786448..7358937eea4135 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/uimanager/TouchTargetHelper.java +++ b/ReactAndroid/src/main/java/com/facebook/react/uimanager/TouchTargetHelper.java @@ -22,7 +22,7 @@ import com.facebook.react.bridge.UiThreadUtil; import com.facebook.react.touch.ReactHitSlopView; -import static com.facebook.react.common.TestIdUtil.getOriginalReactTag; +import static com.facebook.react.common.ViewHelperMethods.reactTagFrom; /** * Class responsible for identifying which react view should handle a given {@link MotionEvent}. @@ -89,7 +89,7 @@ public static int findTargetTagAndCoordinatesForTouch( float[] viewCoords, @Nullable int[] nativeViewTag) { UiThreadUtil.assertOnUiThread(); - int targetTag = getOriginalReactTag(viewGroup); + int targetTag = reactTagFrom(viewGroup); // Store eventCoords in array so that they are modified to be relative to the targetView found. viewCoords[0] = eventX; viewCoords[1] = eventY; @@ -98,7 +98,7 @@ public static int findTargetTagAndCoordinatesForTouch( View reactTargetView = findClosestReactAncestor(nativeTargetView); if (reactTargetView != null) { if (nativeViewTag != null) { - nativeViewTag[0] = getOriginalReactTag(reactTargetView); + nativeViewTag[0] = reactTagFrom(reactTargetView); } targetTag = getTouchTargetForView(reactTargetView, viewCoords[0], viewCoords[1]); } @@ -107,7 +107,7 @@ public static int findTargetTagAndCoordinatesForTouch( } private static View findClosestReactAncestor(View view) { - while (view != null && view.getId() <= 0) { + while (view != null && reactTagFrom(view) <= 0) { view = (View) view.getParent(); } return view; @@ -226,7 +226,7 @@ private static boolean isTransformedTouchPointInView( // ViewGroup). if (view instanceof ReactCompoundView) { int reactTag = ((ReactCompoundView)view).reactTagForTouch(eventCoords[0], eventCoords[1]); - if (reactTag != getOriginalReactTag(view)) { + if (reactTag != reactTagFrom(view)) { // make sure we exclude the View itself because of the PointerEvents.BOX_NONE return view; } @@ -258,7 +258,7 @@ private static int getTouchTargetForView(View targetView, float eventX, float ev // {@link #findTouchTargetView()}. return ((ReactCompoundView) targetView).reactTagForTouch(eventX, eventY); } - return getOriginalReactTag(targetView); + return reactTagFrom(targetView); } } diff --git a/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/ContentSizeChangeEvent.java b/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/ContentSizeChangeEvent.java index 19252980cec369..8c3324a00de63a 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/ContentSizeChangeEvent.java +++ b/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/ContentSizeChangeEvent.java @@ -2,8 +2,6 @@ package com.facebook.react.uimanager.events; -import android.view.View; - import com.facebook.react.bridge.Arguments; import com.facebook.react.bridge.WritableMap; import com.facebook.react.uimanager.PixelUtil; @@ -18,26 +16,12 @@ public class ContentSizeChangeEvent extends Event { private final int mWidth; private final int mHeight; - /** - * See {@link Event#Event(int)}. - * - * @param viewTag - * @param width - * @param height - */ - @Deprecated - public ContentSizeChangeEvent(int viewTag, int width, int height) { + public ContentSizeChangeEvent(Object viewTag, int width, int height) { super(viewTag); mWidth = width; mHeight = height; } - public ContentSizeChangeEvent(View view, int width, int height) { - super(view); - mWidth = width; - mHeight = height; - } - @Override public String getEventName() { return EVENT_NAME; diff --git a/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/Event.java b/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/Event.java index 981a9949c91f7f..ee8e416a3a3ca1 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/Event.java +++ b/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/Event.java @@ -9,12 +9,8 @@ package com.facebook.react.uimanager.events; -import android.view.View; - import com.facebook.react.common.SystemClock; -import static com.facebook.react.common.TestIdUtil.getOriginalReactTag; - /** * A UI event that can be dispatched to JS. * @@ -34,35 +30,19 @@ public abstract class Event { protected Event() { } - /** - * Usage of this constructor is discouraged as the viewTag is not gauranteed to represent the - * associated view. See {@link com.facebook.react.uimanager.BaseViewManager#setTestId(View, String)}. - * Use {@link #Event(View)} instead. - * - * @param viewTag - */ - @Deprecated - protected Event(int viewTag) { + protected Event(Object viewTag) { init(viewTag); } - protected Event(View view) { - init(getOriginalReactTag(view)); - } - /** * This method needs to be called before event is sent to event dispatcher. */ - protected void init(int viewTag) { - mViewTag = viewTag; + protected void init(Object viewTag) { + mViewTag = (int) viewTag; mTimestampMs = SystemClock.uptimeMillis(); mInitialized = true; } - protected void init(View view) { - init(getOriginalReactTag(view)); - } - /** * @return the view id for the view that generated this event */ 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 6c66926462da64..c8abad75a1fbbc 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 @@ -187,25 +187,25 @@ public DrawerEventEmitter(DrawerLayout drawerLayout, EventDispatcher eventDispat @Override public void onDrawerSlide(View view, float v) { mEventDispatcher.dispatchEvent( - new DrawerSlideEvent(mDrawerLayout, v)); + new DrawerSlideEvent(mDrawerLayout.getTag(), v)); } @Override public void onDrawerOpened(View view) { mEventDispatcher.dispatchEvent( - new DrawerOpenedEvent(mDrawerLayout)); + new DrawerOpenedEvent(mDrawerLayout.getTag())); } @Override public void onDrawerClosed(View view) { mEventDispatcher.dispatchEvent( - new DrawerClosedEvent(mDrawerLayout)); + new DrawerClosedEvent(mDrawerLayout.getTag())); } @Override public void onDrawerStateChanged(int i) { mEventDispatcher.dispatchEvent( - new DrawerStateChangedEvent(mDrawerLayout, i)); + new DrawerStateChangedEvent(mDrawerLayout.getTag(), i)); } } } diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/drawer/events/DrawerClosedEvent.java b/ReactAndroid/src/main/java/com/facebook/react/views/drawer/events/DrawerClosedEvent.java index f7cc3a44bb218e..019a1e0c370a80 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/drawer/events/DrawerClosedEvent.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/drawer/events/DrawerClosedEvent.java @@ -9,8 +9,6 @@ package com.facebook.react.views.drawer.events; -import android.view.View; - import com.facebook.react.bridge.Arguments; import com.facebook.react.uimanager.events.Event; import com.facebook.react.uimanager.events.RCTEventEmitter; @@ -19,20 +17,10 @@ public class DrawerClosedEvent extends Event { public static final String EVENT_NAME = "topDrawerClosed"; - /** - * See {@link Event#Event(int)}. - * - * @param viewTag - */ - @Deprecated - public DrawerClosedEvent(int viewTag) { + public DrawerClosedEvent(Object viewTag) { super(viewTag); } - public DrawerClosedEvent(View view) { - super(view); - } - @Override public String getEventName() { return EVENT_NAME; diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/drawer/events/DrawerOpenedEvent.java b/ReactAndroid/src/main/java/com/facebook/react/views/drawer/events/DrawerOpenedEvent.java index 3deb72d4bb5e05..c5e32eb4f511e6 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/drawer/events/DrawerOpenedEvent.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/drawer/events/DrawerOpenedEvent.java @@ -9,8 +9,6 @@ package com.facebook.react.views.drawer.events; -import android.view.View; - import com.facebook.react.bridge.Arguments; import com.facebook.react.uimanager.events.Event; import com.facebook.react.uimanager.events.RCTEventEmitter; @@ -19,20 +17,10 @@ public class DrawerOpenedEvent extends Event { public static final String EVENT_NAME = "topDrawerOpened"; - /** - * See {@link Event#Event(int)}. - * - * @param viewTag - */ - @Deprecated - public DrawerOpenedEvent(int viewTag) { + public DrawerOpenedEvent(Object viewTag) { super(viewTag); } - public DrawerOpenedEvent(View view) { - super(view); - } - @Override public String getEventName() { return EVENT_NAME; diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/drawer/events/DrawerSlideEvent.java b/ReactAndroid/src/main/java/com/facebook/react/views/drawer/events/DrawerSlideEvent.java index 2b76b2db024f86..3c7ed29c467b29 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/drawer/events/DrawerSlideEvent.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/drawer/events/DrawerSlideEvent.java @@ -9,8 +9,6 @@ package com.facebook.react.views.drawer.events; -import android.view.View; - import com.facebook.react.bridge.Arguments; import com.facebook.react.bridge.WritableMap; import com.facebook.react.uimanager.events.Event; @@ -25,23 +23,11 @@ public class DrawerSlideEvent extends Event { private final float mOffset; - /** - * See {@link Event#Event(int)}. - * - * @param viewTag - * @param offset - */ - @Deprecated - public DrawerSlideEvent(int viewTag, float offset) { + public DrawerSlideEvent(Object viewTag, float offset) { super(viewTag); mOffset = offset; } - public DrawerSlideEvent(View view, float offset) { - super(view); - mOffset = offset; - } - public float getOffset() { return mOffset; } diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/drawer/events/DrawerStateChangedEvent.java b/ReactAndroid/src/main/java/com/facebook/react/views/drawer/events/DrawerStateChangedEvent.java index 8387446245330e..6ea16d4230e6e5 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/drawer/events/DrawerStateChangedEvent.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/drawer/events/DrawerStateChangedEvent.java @@ -9,8 +9,6 @@ package com.facebook.react.views.drawer.events; -import android.view.View; - import com.facebook.react.bridge.Arguments; import com.facebook.react.bridge.WritableMap; import com.facebook.react.uimanager.events.Event; @@ -22,23 +20,11 @@ public class DrawerStateChangedEvent extends Event { private final int mDrawerState; - /** - * See {@link Event#Event(int)}. - * - * @param viewTag - * @param drawerState - */ - @Deprecated - public DrawerStateChangedEvent(int viewTag, int drawerState) { + public DrawerStateChangedEvent(Object viewTag, int drawerState) { super(viewTag); mDrawerState = drawerState; } - public DrawerStateChangedEvent(View view, int drawerState) { - super(view); - mDrawerState = drawerState; - } - public int getDrawerState() { return mDrawerState; } diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/image/ImageLoadEvent.java b/ReactAndroid/src/main/java/com/facebook/react/views/image/ImageLoadEvent.java index a63e160185241e..f98b3ad080361c 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/image/ImageLoadEvent.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/image/ImageLoadEvent.java @@ -12,7 +12,6 @@ import javax.annotation.Nullable; import android.support.annotation.IntDef; -import android.view.View; import com.facebook.react.bridge.Arguments; import com.facebook.react.bridge.WritableMap; @@ -41,41 +40,16 @@ public class ImageLoadEvent extends Event { private final int mHeight; - /** - * See {@link Event#Event(int)}. - * - * @param viewTag - * @param eventType - */ - @Deprecated - public ImageLoadEvent(int viewTag, @ImageEventType int eventType) { + public ImageLoadEvent(Object viewTag, @ImageEventType int eventType) { this(viewTag, eventType, null); } - /** - * See {@link Event#Event(int)}. - * - * @param viewTag - * @param eventType - * @param imageUri - */ - @Deprecated - public ImageLoadEvent(int viewTag, @ImageEventType int eventType, String imageUri) { + public ImageLoadEvent(Object viewTag, @ImageEventType int eventType, String imageUri) { this(viewTag, eventType, imageUri, 0, 0); } - /** - * See {@link Event#Event(int)}. - * - * @param viewTag - * @param eventType - * @param imageUri - * @param width - * @param height - */ - @Deprecated public ImageLoadEvent( - int viewTag, + Object viewTag, @ImageEventType int eventType, @Nullable String imageUri, int width, @@ -87,27 +61,6 @@ public ImageLoadEvent( mHeight = height; } - public ImageLoadEvent(View view, @ImageEventType int eventType) { - this(view, eventType, null); - } - - public ImageLoadEvent(View view, @ImageEventType int eventType, String imageUri) { - this(view, eventType, imageUri, 0, 0); - } - - public ImageLoadEvent( - View view, - @ImageEventType int eventType, - @Nullable String imageUri, - int width, - int height) { - super(view); - mEventType = eventType; - mImageUri = imageUri; - mWidth = width; - mHeight = height; - } - public static String eventNameForType(@ImageEventType int eventType) { switch (eventType) { case ON_ERROR: 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 b95b897b858344..58e85ab4101273 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(getThisReactImageView(), ImageLoadEvent.ON_LOAD_START)); + new ImageLoadEvent(getTag(), ImageLoadEvent.ON_LOAD_START)); } @Override @@ -202,19 +202,19 @@ public void onFinalImageSet( @Nullable Animatable animatable) { if (imageInfo != null) { mEventDispatcher.dispatchEvent( - new ImageLoadEvent(getThisReactImageView(), ImageLoadEvent.ON_LOAD, + new ImageLoadEvent(getTag(), ImageLoadEvent.ON_LOAD, mImageSource.getSource(), imageInfo.getWidth(), imageInfo.getHeight())); mEventDispatcher.dispatchEvent( - new ImageLoadEvent(getThisReactImageView(), ImageLoadEvent.ON_LOAD_END)); + new ImageLoadEvent(getTag(), ImageLoadEvent.ON_LOAD_END)); } } @Override public void onFailure(String id, Throwable throwable) { mEventDispatcher.dispatchEvent( - new ImageLoadEvent(getThisReactImageView(), ImageLoadEvent.ON_ERROR)); + new ImageLoadEvent(getTag(), ImageLoadEvent.ON_ERROR)); mEventDispatcher.dispatchEvent( - new ImageLoadEvent(getThisReactImageView(), ImageLoadEvent.ON_LOAD_END)); + new ImageLoadEvent(getTag(), ImageLoadEvent.ON_LOAD_END)); } }; } @@ -441,10 +441,6 @@ private boolean hasMultipleSources() { return mSources.size() > 1; } - private ReactImageView getThisReactImageView() { - return this; - } - private void setSourceImage() { mImageSource = null; if (mSources.isEmpty()) { 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 cf35544c93148e..004da201ec278c 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 @@ -76,14 +76,14 @@ protected void addEventEmitters( new ReactModalHostView.OnRequestCloseListener() { @Override public void onRequestClose(DialogInterface dialog) { - dispatcher.dispatchEvent(new RequestCloseEvent(view)); + dispatcher.dispatchEvent(new RequestCloseEvent(view.getTag())); } }); view.setOnShowListener( new DialogInterface.OnShowListener() { @Override public void onShow(DialogInterface dialog) { - dispatcher.dispatchEvent(new ShowEvent(view)); + dispatcher.dispatchEvent(new ShowEvent(view.getTag())); } }); } diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/modal/ReactModalHostView.java b/ReactAndroid/src/main/java/com/facebook/react/views/modal/ReactModalHostView.java index e0752980cfe94e..94f9ee90e6bf67 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/modal/ReactModalHostView.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/modal/ReactModalHostView.java @@ -36,7 +36,7 @@ import com.facebook.react.uimanager.events.EventDispatcher; import com.facebook.react.views.view.ReactViewGroup; -import static com.facebook.react.common.TestIdUtil.getOriginalReactTag; +import static com.facebook.react.common.ViewHelperMethods.reactTagFrom; /** * ReactModalHostView is a view that sits in the view hierarchy representing a Modal view. @@ -301,7 +301,7 @@ protected void onSizeChanged(final int w, final int h, int oldw, int oldh) { @Override public void run() { ((ReactContext) getContext()).getNativeModule(UIManagerModule.class) - .updateNodeSize(getOriginalReactTag(getChildAt(0)), w, h); + .updateNodeSize(reactTagFrom(getChildAt(0)), w, h); } }); } diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/modal/RequestCloseEvent.java b/ReactAndroid/src/main/java/com/facebook/react/views/modal/RequestCloseEvent.java index c28dcc19f01660..b05ee975e37fe5 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/modal/RequestCloseEvent.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/modal/RequestCloseEvent.java @@ -9,8 +9,6 @@ package com.facebook.react.views.modal; -import android.view.View; - import com.facebook.react.uimanager.events.Event; import com.facebook.react.uimanager.events.RCTEventEmitter; @@ -21,20 +19,10 @@ public static final String EVENT_NAME = "topRequestClose"; - /** - * See {@link Event#Event(int)}. - * - * @param viewTag - */ - @Deprecated - protected RequestCloseEvent(int viewTag) { + protected RequestCloseEvent(Object viewTag) { super(viewTag); } - protected RequestCloseEvent(View view) { - super(view); - } - @Override public String getEventName() { return EVENT_NAME; diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/modal/ShowEvent.java b/ReactAndroid/src/main/java/com/facebook/react/views/modal/ShowEvent.java index bc482b14f4f179..e380ff05d07d31 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/modal/ShowEvent.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/modal/ShowEvent.java @@ -9,8 +9,6 @@ package com.facebook.react.views.modal; -import android.view.View; - import com.facebook.react.uimanager.events.Event; import com.facebook.react.uimanager.events.RCTEventEmitter; @@ -21,20 +19,10 @@ public static final String EVENT_NAME = "topShow"; - /** - * See {@link Event#Event(int)}. - * - * @param viewTag - */ - @Deprecated - protected ShowEvent(int viewTag) { + protected ShowEvent(Object viewTag) { super(viewTag); } - protected ShowEvent(View view) { - super(view); - } - @Override public String getEventName() { return EVENT_NAME; 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 55204ea68ad74f..a9b5cbede6fa50 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 @@ -156,7 +156,7 @@ public PickerEventEmitter(ReactPicker reactPicker, EventDispatcher eventDispatch @Override public void onItemSelected(int position) { mEventDispatcher.dispatchEvent( new PickerItemSelectEvent( - mReactPicker, position)); + mReactPicker.getTag(), position)); } } } diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/picker/events/PickerItemSelectEvent.java b/ReactAndroid/src/main/java/com/facebook/react/views/picker/events/PickerItemSelectEvent.java index b0d02fb30902b2..b05a2594fc57fe 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/picker/events/PickerItemSelectEvent.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/picker/events/PickerItemSelectEvent.java @@ -9,8 +9,6 @@ package com.facebook.react.views.picker.events; -import android.view.View; - import com.facebook.react.bridge.Arguments; import com.facebook.react.bridge.WritableMap; import com.facebook.react.uimanager.events.Event; @@ -21,23 +19,11 @@ public class PickerItemSelectEvent extends Event { private final int mPosition; - /** - * See {@link Event#Event(int)}. - * - * @param viewTag - * @param position - */ - @Deprecated - public PickerItemSelectEvent(int viewTag, int position) { + public PickerItemSelectEvent(Object viewTag, int position) { super(viewTag); mPosition = position; } - public PickerItemSelectEvent(View view, int position) { - super(view); - mPosition = position; - } - @Override public String getEventName() { return EVENT_NAME; 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 4396d519152b74..9dbac63dcda2eb 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 @@ -22,6 +22,8 @@ import com.facebook.react.views.scroll.ScrollEvent; import com.facebook.react.views.scroll.ScrollEventType; +import static com.facebook.react.common.ViewHelperMethods.reactTagFrom; + /** * Wraps {@link RecyclerView} providing interface similar to `ScrollView.js` where each children * will be rendered as a separate {@link RecyclerView} row. @@ -296,7 +298,7 @@ public int getItemCount() { @Override public long getItemId(int position) { // this should return the view's actual ID to work properly with the view we're extending. - return mViews.get(position).getId(); + return reactTagFrom(mViews.get(position)); } public View getView(int index) { @@ -344,7 +346,7 @@ protected void onScrollChanged(int l, int t, int oldl, int oldt) { ((ReactContext) getContext()).getNativeModule(UIManagerModule.class).getEventDispatcher() .dispatchEvent(ScrollEvent.obtain( - this, + this.getTag(), ScrollEventType.SCROLL, 0, /* offsetX = 0, horizontal scrolling only */ calculateAbsoluteOffset(), @@ -358,7 +360,7 @@ private void onTotalChildrenHeightChange(int newTotalChildrenHeight) { if (mSendContentSizeChangeEvents) { ((ReactContext) getContext()).getNativeModule(UIManagerModule.class).getEventDispatcher() .dispatchEvent(new ContentSizeChangeEvent( - this, + this.getTag(), 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 01b88da6046a9f..7a308ef9291a41 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 @@ -55,7 +55,7 @@ private static void emitScrollEvent(ViewGroup scrollView, ScrollEventType scroll ReactContext reactContext = (ReactContext) scrollView.getContext(); reactContext.getNativeModule(UIManagerModule.class).getEventDispatcher().dispatchEvent( ScrollEvent.obtain( - scrollView, + scrollView.getTag(), scrollEventType, scrollView.getScrollX(), scrollView.getScrollY(), diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ScrollEvent.java b/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ScrollEvent.java index 6491888219e387..173a80ffcceadb 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ScrollEvent.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ScrollEvent.java @@ -14,7 +14,6 @@ import java.lang.Override; import android.support.v4.util.Pools; -import android.view.View; import com.facebook.infer.annotation.Assertions; import com.facebook.react.bridge.Arguments; @@ -40,7 +39,7 @@ public class ScrollEvent extends Event { private @Nullable ScrollEventType mScrollEventType; public static ScrollEvent obtain( - View view, + Object viewTag, ScrollEventType scrollEventType, int scrollX, int scrollY, @@ -53,7 +52,7 @@ public static ScrollEvent obtain( event = new ScrollEvent(); } event.init( - view, + viewTag, scrollEventType, scrollX, scrollY, @@ -73,7 +72,7 @@ private ScrollEvent() { } private void init( - View view, + Object viewTag, ScrollEventType scrollEventType, int scrollX, int scrollY, @@ -81,7 +80,7 @@ private void init( int contentHeight, int scrollViewWidth, int scrollViewHeight) { - super.init(view); + super.init(viewTag); mScrollEventType = scrollEventType; mScrollX = scrollX; mScrollY = scrollY; diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/slider/ReactSliderEvent.java b/ReactAndroid/src/main/java/com/facebook/react/views/slider/ReactSliderEvent.java index 98898fbf75849e..a223bb15103a7d 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/slider/ReactSliderEvent.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/slider/ReactSliderEvent.java @@ -9,8 +9,6 @@ package com.facebook.react.views.slider; -import android.view.View; - import com.facebook.react.bridge.Arguments; import com.facebook.react.bridge.WritableMap; import com.facebook.react.uimanager.events.Event; @@ -26,25 +24,12 @@ public class ReactSliderEvent extends Event { private final double mValue; private final boolean mFromUser; - /** - * See {@link Event#Event(int)}. - * - * @param viewTag - * @param value - * @param fromUser - */ - @Deprecated - public ReactSliderEvent(int viewTag, double value, boolean fromUser) { + public ReactSliderEvent(Object viewTag, double value, boolean fromUser) { super(viewTag); mValue = value; mFromUser = fromUser; } - public ReactSliderEvent(View view, double value, boolean fromUser) { - super(view); - mValue = value; - mFromUser = fromUser; - } public double getValue() { return mValue; 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 bb67e6e7c16581..73a019c0d8179e 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 @@ -79,7 +79,7 @@ public void onProgressChanged(SeekBar seekbar, int progress, boolean fromUser) { ReactContext reactContext = (ReactContext) seekbar.getContext(); reactContext.getNativeModule(UIManagerModule.class).getEventDispatcher().dispatchEvent( new ReactSliderEvent( - seekbar, + seekbar.getTag(), ((ReactSlider)seekbar).toRealProgress(progress), fromUser)); } @@ -93,7 +93,7 @@ public void onStopTrackingTouch(SeekBar seekbar) { ReactContext reactContext = (ReactContext) seekbar.getContext(); reactContext.getNativeModule(UIManagerModule.class).getEventDispatcher().dispatchEvent( new ReactSlidingCompleteEvent( - seekbar, + seekbar.getTag(), ((ReactSlider)seekbar).toRealProgress(seekbar.getProgress()))); } }; diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/slider/ReactSlidingCompleteEvent.java b/ReactAndroid/src/main/java/com/facebook/react/views/slider/ReactSlidingCompleteEvent.java index 98046088fd542c..9f490da0d70687 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/slider/ReactSlidingCompleteEvent.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/slider/ReactSlidingCompleteEvent.java @@ -9,8 +9,6 @@ package com.facebook.react.views.slider; -import android.view.View; - import com.facebook.react.bridge.Arguments; import com.facebook.react.bridge.WritableMap; import com.facebook.react.uimanager.events.Event; @@ -25,23 +23,11 @@ public class ReactSlidingCompleteEvent extends Event private final double mValue; - /** - * See {@link Event#Event(int)}. - * - * @param viewTag - * @param value - */ - @Deprecated - public ReactSlidingCompleteEvent(int viewTag, double value) { + public ReactSlidingCompleteEvent(Object viewTag, double value) { super(viewTag); mValue = value; } - public ReactSlidingCompleteEvent(View view, double value) { - super(view); - mValue = value; - } - public double getValue() { return mValue; } diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/swiperefresh/RefreshEvent.java b/ReactAndroid/src/main/java/com/facebook/react/views/swiperefresh/RefreshEvent.java index 2ac38d327d4775..5e133f650f856f 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/swiperefresh/RefreshEvent.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/swiperefresh/RefreshEvent.java @@ -9,27 +9,15 @@ package com.facebook.react.views.swiperefresh; -import android.view.View; - import com.facebook.react.uimanager.events.Event; import com.facebook.react.uimanager.events.RCTEventEmitter; public class RefreshEvent extends Event { - /** - * See {@link Event#Event(int)}. - * - * @param viewTag - */ - @Deprecated - protected RefreshEvent(int viewTag) { + protected RefreshEvent(Object viewTag) { super(viewTag); } - protected RefreshEvent(View view) { - super(view); - } - @Override public String getEventName() { return "topRefresh"; 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 a8cfd2ae62bc9b..3ea9c92a5a8c2a 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 @@ -94,7 +94,7 @@ protected void addEventEmitters( @Override public void onRefresh() { reactContext.getNativeModule(UIManagerModule.class).getEventDispatcher() - .dispatchEvent(new RefreshEvent(view)); + .dispatchEvent(new RefreshEvent(view.getTag())); } }); } diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/switchview/ReactSwitchEvent.java b/ReactAndroid/src/main/java/com/facebook/react/views/switchview/ReactSwitchEvent.java index 882176aab8005b..7aaf69f740de28 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/switchview/ReactSwitchEvent.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/switchview/ReactSwitchEvent.java @@ -9,8 +9,6 @@ package com.facebook.react.views.switchview; -import android.view.View; - import com.facebook.react.bridge.Arguments; import com.facebook.react.bridge.WritableMap; import com.facebook.react.uimanager.events.Event; @@ -25,23 +23,11 @@ private final boolean mIsChecked; - /** - * See {@link Event#Event(int)}. - * - * @param viewTag - * @param isChecked - */ - @Deprecated - public ReactSwitchEvent(int viewTag, boolean isChecked) { + public ReactSwitchEvent(Object viewTag, boolean isChecked) { super(viewTag); mIsChecked = isChecked; } - public ReactSwitchEvent(View view, boolean isChecked) { - super(view); - mIsChecked = isChecked; - } - public boolean getIsChecked() { return mIsChecked; } 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 89e136e6ff537b..0737ac3a1cd8ed 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 @@ -76,7 +76,7 @@ public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { ReactContext reactContext = (ReactContext) buttonView.getContext(); reactContext.getNativeModule(UIManagerModule.class).getEventDispatcher().dispatchEvent( new ReactSwitchEvent( - buttonView, + buttonView.getTag(), isChecked)); } }; diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactTextView.java b/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactTextView.java index 51032838655576..09a062720dec58 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactTextView.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactTextView.java @@ -26,8 +26,7 @@ import com.facebook.react.uimanager.ViewDefaults; import com.facebook.react.views.view.ReactViewBackgroundDrawable; -import static com.facebook.react.common.TestIdUtil.getOriginalReactTag; - +import static com.facebook.react.common.ViewHelperMethods.reactTagFrom; public class ReactTextView extends TextView implements ReactCompoundView { @@ -77,7 +76,7 @@ public void setText(ReactTextUpdate update) { @Override public int reactTagForTouch(float touchX, float touchY) { Spanned text = (Spanned) getText(); - int target = getOriginalReactTag(this); + int target = reactTagFrom(this); int x = (int) touchX; int y = (int) touchY; diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactContentSizeChangedEvent.java b/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactContentSizeChangedEvent.java index d6e5d57d3dfe83..da1e85cde06b40 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactContentSizeChangedEvent.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactContentSizeChangedEvent.java @@ -9,8 +9,6 @@ package com.facebook.react.views.textinput; -import android.view.View; - import com.facebook.react.bridge.Arguments; import com.facebook.react.bridge.WritableMap; import com.facebook.react.uimanager.events.Event; @@ -26,16 +24,8 @@ public class ReactContentSizeChangedEvent extends Event { private float mContentWidth; private float mContentHeight; - /** - * See {@link Event#Event(int)}. - * - * @param viewTag - * @param contentSizeWidth - * @param contentSizeHeight - */ - @Deprecated public ReactContentSizeChangedEvent( - int viewTag, + Object viewTag, float contentSizeWidth, float contentSizeHeight) { super(viewTag); @@ -43,15 +33,6 @@ public ReactContentSizeChangedEvent( mContentHeight = contentSizeHeight; } - public ReactContentSizeChangedEvent( - View view, - float contentSizeWidth, - float contentSizeHeight) { - super(view); - mContentWidth = contentSizeWidth; - mContentHeight = contentSizeHeight; - } - @Override public String getEventName() { return EVENT_NAME; diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextChangedEvent.java b/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextChangedEvent.java index 67a719e5954c01..6df6a7f4c84cfb 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextChangedEvent.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextChangedEvent.java @@ -9,8 +9,6 @@ package com.facebook.react.views.textinput; -import android.view.View; - import com.facebook.react.bridge.Arguments; import com.facebook.react.bridge.WritableMap; import com.facebook.react.uimanager.events.Event; @@ -29,18 +27,8 @@ public class ReactTextChangedEvent extends Event { private float mContentHeight; private int mEventCount; - /** - * See {@link Event#Event(int)}. - * - * @param viewTag - * @param text - * @param contentSizeWidth - * @param contentSizeHeight - * @param eventCount - */ - @Deprecated public ReactTextChangedEvent( - int viewTag, + Object viewTag, String text, float contentSizeWidth, float contentSizeHeight, @@ -52,19 +40,6 @@ public ReactTextChangedEvent( mEventCount = eventCount; } - public ReactTextChangedEvent( - View view, - String text, - float contentSizeWidth, - float contentSizeHeight, - int eventCount) { - super(view); - mText = text; - mContentWidth = contentSizeWidth; - mContentHeight = contentSizeHeight; - mEventCount = eventCount; - } - @Override public String getEventName() { return EVENT_NAME; diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputBlurEvent.java b/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputBlurEvent.java index b8a87054e50935..54014cd7e6d0f6 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputBlurEvent.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputBlurEvent.java @@ -9,8 +9,6 @@ package com.facebook.react.views.textinput; -import android.view.View; - import com.facebook.react.bridge.Arguments; import com.facebook.react.bridge.WritableMap; import com.facebook.react.uimanager.events.Event; @@ -23,20 +21,10 @@ private static final String EVENT_NAME = "topBlur"; - /** - * See {@link Event#Event(int)}. - * - * @param viewTag - */ - @Deprecated - public ReactTextInputBlurEvent(int viewTag) { + public ReactTextInputBlurEvent(Object viewTag) { super(viewTag); } - public ReactTextInputBlurEvent(View view) { - super(view); - } - @Override public String getEventName() { return EVENT_NAME; diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputEndEditingEvent.java b/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputEndEditingEvent.java index cab1a2155a3ef8..9df4ef477ca9ac 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputEndEditingEvent.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputEndEditingEvent.java @@ -9,8 +9,6 @@ package com.facebook.react.views.textinput; -import android.view.View; - import com.facebook.react.bridge.Arguments; import com.facebook.react.bridge.WritableMap; import com.facebook.react.uimanager.events.Event; @@ -26,27 +24,13 @@ class ReactTextInputEndEditingEvent extends Event private String mText; - /** - * See {@link Event#Event(int)}. - * - * @param viewTag - * @param text - */ - @Deprecated public ReactTextInputEndEditingEvent( - int viewTag, + Object viewTag, String text) { super(viewTag); mText = text; } - public ReactTextInputEndEditingEvent( - View view, - String text) { - super(view); - mText = text; - } - @Override public String getEventName() { return EVENT_NAME; diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputEvent.java b/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputEvent.java index daf1dcbb530613..4f9e16e2528a74 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputEvent.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputEvent.java @@ -9,8 +9,6 @@ package com.facebook.react.views.textinput; -import android.view.View; - import com.facebook.react.bridge.Arguments; import com.facebook.react.bridge.WritableMap; import com.facebook.react.uimanager.events.Event; @@ -29,18 +27,8 @@ public class ReactTextInputEvent extends Event { private int mRangeStart; private int mRangeEnd; - /** - * See {@link Event#Event(int)}. - * - * @param viewTag - * @param text - * @param previousText - * @param rangeStart - * @param rangeEnd - */ - @Deprecated public ReactTextInputEvent( - int viewTag, + Object viewTag, String text, String previousText, int rangeStart, @@ -52,19 +40,6 @@ public ReactTextInputEvent( mRangeEnd = rangeEnd; } - public ReactTextInputEvent( - View view, - String text, - String previousText, - int rangeStart, - int rangeEnd) { - super(view); - mText = text; - mPreviousText = previousText; - mRangeStart = rangeStart; - mRangeEnd = rangeEnd; - } - @Override public String getEventName() { return EVENT_NAME; diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputFocusEvent.java b/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputFocusEvent.java index fdbe1fd6f719e5..ac20b890294731 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputFocusEvent.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputFocusEvent.java @@ -9,8 +9,6 @@ package com.facebook.react.views.textinput; -import android.view.View; - import com.facebook.react.bridge.Arguments; import com.facebook.react.bridge.WritableMap; import com.facebook.react.uimanager.events.Event; @@ -23,20 +21,10 @@ private static final String EVENT_NAME = "topFocus"; - /** - * See {@link Event#Event(int)}. - * - * @param viewTag - */ - @Deprecated - public ReactTextInputFocusEvent(int viewTag) { + public ReactTextInputFocusEvent(Object viewTag) { super(viewTag); } - public ReactTextInputFocusEvent(View view) { - super(view); - } - @Override public String getEventName() { return EVENT_NAME; 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 e88199ed47cd2f..6b07f5def9fb16 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 @@ -645,7 +645,7 @@ public void onTextChanged(CharSequence s, int start, int before, int count) { // TODO: t7936714 merge these events mEventDispatcher.dispatchEvent( new ReactTextChangedEvent( - mEditText, + mEditText.getTag(), s.toString(), PixelUtil.toDIPFromPixel(contentWidth), PixelUtil.toDIPFromPixel(contentHeight), @@ -653,7 +653,7 @@ public void onTextChanged(CharSequence s, int start, int before, int count) { mEventDispatcher.dispatchEvent( new ReactTextInputEvent( - mEditText, + mEditText.getTag(), newText, oldText, start, @@ -678,15 +678,15 @@ public void onFocusChange(View v, boolean hasFocus) { if (hasFocus) { eventDispatcher.dispatchEvent( new ReactTextInputFocusEvent( - editText)); + editText.getTag())); } else { eventDispatcher.dispatchEvent( new ReactTextInputBlurEvent( - editText)); + editText.getTag())); eventDispatcher.dispatchEvent( new ReactTextInputEndEditingEvent( - editText, + editText.getTag(), editText.getText().toString())); } } @@ -703,7 +703,7 @@ public boolean onEditorAction(TextView v, int actionId, KeyEvent keyEvent) { reactContext.getNativeModule(UIManagerModule.class).getEventDispatcher(); eventDispatcher.dispatchEvent( new ReactTextInputSubmitEditingEvent( - editText, + editText.getTag(), editText.getText().toString())); } if (actionId == EditorInfo.IME_ACTION_NEXT || @@ -749,7 +749,7 @@ public void onLayout() { mEventDispatcher.dispatchEvent( new ReactContentSizeChangedEvent( - mEditText, + mEditText.getTag(), PixelUtil.toDIPFromPixel(contentWidth), PixelUtil.toDIPFromPixel(contentHeight))); } @@ -777,7 +777,7 @@ public void onSelectionChanged(int start, int end) { if (mPreviousSelectionStart != start || mPreviousSelectionEnd != end) { mEventDispatcher.dispatchEvent( new ReactTextInputSelectionEvent( - mReactEditText, + mReactEditText.getTag(), start, end )); diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputSelectionEvent.java b/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputSelectionEvent.java index d191c64e59243b..deed8d194de3a2 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputSelectionEvent.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputSelectionEvent.java @@ -9,8 +9,6 @@ package com.facebook.react.views.textinput; -import android.view.View; - import com.facebook.react.bridge.Arguments; import com.facebook.react.bridge.WritableMap; import com.facebook.react.uimanager.events.Event; @@ -27,16 +25,8 @@ private int mSelectionStart; private int mSelectionEnd; - /** - * See {@link Event#Event(int)}. - * - * @param viewTag - * @param selectionStart - * @param selectionEnd - */ - @Deprecated public ReactTextInputSelectionEvent( - int viewTag, + Object viewTag, int selectionStart, int selectionEnd) { super(viewTag); @@ -44,15 +34,6 @@ public ReactTextInputSelectionEvent( mSelectionEnd = selectionEnd; } - public ReactTextInputSelectionEvent( - View view, - int selectionStart, - int selectionEnd) { - super(view); - mSelectionStart = selectionStart; - mSelectionEnd = selectionEnd; - } - @Override public String getEventName() { return EVENT_NAME; diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputSubmitEditingEvent.java b/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputSubmitEditingEvent.java index 47006bf0243440..2b146cf1513f28 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputSubmitEditingEvent.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputSubmitEditingEvent.java @@ -9,8 +9,6 @@ package com.facebook.react.views.textinput; -import android.view.View; - import com.facebook.react.bridge.Arguments; import com.facebook.react.bridge.WritableMap; import com.facebook.react.uimanager.events.Event; @@ -26,27 +24,13 @@ private String mText; - /** - * See {@link Event#Event(int)}. - * - * @param viewTag - * @param text - */ - @Deprecated public ReactTextInputSubmitEditingEvent( - int viewTag, + Object viewTag, String text) { super(viewTag); mText = text; } - public ReactTextInputSubmitEditingEvent( - View view, - String text) { - super(view); - mText = text; - } - @Override public String getEventName() { return EVENT_NAME; 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 05defcc8e3546c..3ac4576cd48166 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 @@ -130,7 +130,7 @@ protected void addEventEmitters(final ThemedReactContext reactContext, final Rea @Override public void onClick(View v) { mEventDispatcher.dispatchEvent( - new ToolbarClickEvent(view, -1)); + new ToolbarClickEvent(view.getTag(), -1)); } }); @@ -140,7 +140,7 @@ public void onClick(View v) { public boolean onMenuItemClick(MenuItem menuItem) { mEventDispatcher.dispatchEvent( new ToolbarClickEvent( - view, + view.getTag(), menuItem.getOrder())); return true; } diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/toolbar/events/ToolbarClickEvent.java b/ReactAndroid/src/main/java/com/facebook/react/views/toolbar/events/ToolbarClickEvent.java index c444c3d127b06f..a2f1eb2bf903d3 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/toolbar/events/ToolbarClickEvent.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/toolbar/events/ToolbarClickEvent.java @@ -8,8 +8,6 @@ */ package com.facebook.react.views.toolbar.events; -import android.view.View; - import com.facebook.react.bridge.WritableMap; import com.facebook.react.bridge.WritableNativeMap; import com.facebook.react.uimanager.events.Event; @@ -24,23 +22,11 @@ public class ToolbarClickEvent extends Event { private static final String EVENT_NAME = "topSelect"; private final int position; - /** - * See {@link Event#Event(int)}. - * - * @param viewTag - * @param position - */ - @Deprecated - public ToolbarClickEvent(int viewTag, int position) { + public ToolbarClickEvent(Object viewTag, int position) { super(viewTag); this.position = position; } - public ToolbarClickEvent(View view, int position) { - super(view); - this.position = position; - } - public int getPosition() { return position; } diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/viewpager/PageScrollEvent.java b/ReactAndroid/src/main/java/com/facebook/react/views/viewpager/PageScrollEvent.java index d31edb9f3287f8..beeed709227015 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/viewpager/PageScrollEvent.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/viewpager/PageScrollEvent.java @@ -9,8 +9,6 @@ package com.facebook.react.views.viewpager; -import android.view.View; - import com.facebook.react.bridge.Arguments; import com.facebook.react.bridge.WritableMap; import com.facebook.react.uimanager.events.Event; @@ -33,28 +31,12 @@ private final int mPosition; private final float mOffset; - /** - * See {@link Event#Event(int)}. - * - * @param viewTag - * @param position - * @param offset - */ - @Deprecated - protected PageScrollEvent(int viewTag, int position, int offset) { + protected PageScrollEvent(Object viewTag, int position, float offset) { super(viewTag); mPosition = position; mOffset = getOffset(offset); } - protected PageScrollEvent(View view, int position, float offset) { - super(view); - mPosition = position; - - // folly::toJson default options don't support serialize NaN or Infinite value - mOffset = getOffset(offset); - } - private float getOffset(float offset) { return (Float.isInfinite(offset) || Float.isNaN(offset)) ? 0.0f : offset; } diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/viewpager/PageScrollStateChangedEvent.java b/ReactAndroid/src/main/java/com/facebook/react/views/viewpager/PageScrollStateChangedEvent.java index 1902d392d49fad..cc7782d069c3d1 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/viewpager/PageScrollStateChangedEvent.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/viewpager/PageScrollStateChangedEvent.java @@ -9,8 +9,6 @@ package com.facebook.react.views.viewpager; -import android.view.View; - import com.facebook.react.bridge.Arguments; import com.facebook.react.bridge.WritableMap; import com.facebook.react.uimanager.events.Event; @@ -28,23 +26,11 @@ class PageScrollStateChangedEvent extends Event { private final String mPageScrollState; - /** - * See {@link Event#Event(int)}. - * - * @param viewTag - * @param pageScrollState - */ - @Deprecated - protected PageScrollStateChangedEvent(int viewTag, String pageScrollState) { + protected PageScrollStateChangedEvent(Object viewTag, String pageScrollState) { super(viewTag); mPageScrollState = pageScrollState; } - protected PageScrollStateChangedEvent(View view, String pageScrollState) { - super(view); - mPageScrollState = pageScrollState; - } - @Override public String getEventName() { return EVENT_NAME; diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/viewpager/PageSelectedEvent.java b/ReactAndroid/src/main/java/com/facebook/react/views/viewpager/PageSelectedEvent.java index bad263866cb875..2f1dac0a8ea2b7 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/viewpager/PageSelectedEvent.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/viewpager/PageSelectedEvent.java @@ -9,8 +9,6 @@ package com.facebook.react.views.viewpager; -import android.view.View; - import com.facebook.react.bridge.Arguments; import com.facebook.react.bridge.WritableMap; import com.facebook.react.uimanager.events.Event; @@ -28,23 +26,11 @@ private final int mPosition; - /** - * See {@link Event#Event(int)}. - * - * @param viewTag - * @param position - */ - @Deprecated - protected PageSelectedEvent(int viewTag, int position) { + protected PageSelectedEvent(Object viewTag, int position) { super(viewTag); mPosition = position; } - protected PageSelectedEvent(View view, int position) { - super(view); - mPosition = position; - } - @Override public String getEventName() { return EVENT_NAME; 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 55e7b079d442d0..ed379aadf456c7 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 @@ -123,14 +123,14 @@ private class PageChangeListener implements OnPageChangeListener { @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { mEventDispatcher.dispatchEvent( - new PageScrollEvent(getThisPager(), position, positionOffset)); + new PageScrollEvent(getTag(), position, positionOffset)); } @Override public void onPageSelected(int position) { if (!mIsCurrentItemFromJs) { mEventDispatcher.dispatchEvent( - new PageSelectedEvent(getThisPager(), position)); + new PageSelectedEvent(getTag(), position)); } } @@ -151,7 +151,7 @@ public void onPageScrollStateChanged(int state) { throw new IllegalStateException("Unsupported pageScrollState"); } mEventDispatcher.dispatchEvent( - new PageScrollStateChangedEvent(getThisPager(), pageScrollState)); + new PageScrollStateChangedEvent(getTag(), pageScrollState)); } } @@ -194,10 +194,6 @@ public boolean onTouchEvent(MotionEvent ev) { return super.onTouchEvent(ev); } - private ReactViewPager getThisPager() { - return this; - } - public void setCurrentItemFromJs(int item, boolean animated) { mIsCurrentItemFromJs = true; setCurrentItem(item, animated); 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 33e09914150c48..c7e2cd2af8eaaf 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 @@ -57,7 +57,7 @@ import org.json.JSONObject; import org.json.JSONException; -import static com.facebook.react.common.TestIdUtil.getOriginalReactTag; +import static com.facebook.react.common.ViewHelperMethods.reactTagFrom; /** * Manages instances of {@link WebView} @@ -128,7 +128,7 @@ public void onPageStarted(WebView webView, String url, Bitmap favicon) { dispatchEvent( webView, new TopLoadingStartEvent( - webView, + webView.getTag(), createWebViewEvent(webView, url))); } @@ -164,7 +164,7 @@ public void onReceivedError( dispatchEvent( webView, - new TopLoadingErrorEvent(webView, eventData)); + new TopLoadingErrorEvent(webView.getTag(), eventData)); } @Override @@ -174,7 +174,7 @@ public void doUpdateVisitedHistory(WebView webView, String url, boolean isReload dispatchEvent( webView, new TopLoadingStartEvent( - webView, + webView.getTag(), createWebViewEvent(webView, url))); } @@ -182,13 +182,13 @@ private void emitFinishEvent(WebView webView, String url) { dispatchEvent( webView, new TopLoadingFinishEvent( - webView, + webView.getTag(), createWebViewEvent(webView, url))); } private WritableMap createWebViewEvent(WebView webView, String url) { WritableMap event = Arguments.createMap(); - event.putDouble("target", getOriginalReactTag(webView)); + event.putDouble("target", reactTagFrom(webView)); // Don't use webView.getUrl() here, the URL isn't updated to the new value yet in callbacks // like onPageFinished event.putString("url", url); @@ -514,7 +514,7 @@ public void onNewPicture(WebView webView, Picture picture) { dispatchEvent( webView, new ContentSizeChangeEvent( - webView, + webView.getTag(), webView.getWidth(), webView.getContentHeight())); } diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/webview/events/TopLoadingErrorEvent.java b/ReactAndroid/src/main/java/com/facebook/react/views/webview/events/TopLoadingErrorEvent.java index c358b448284b49..fc12027cb82cd2 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/webview/events/TopLoadingErrorEvent.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/webview/events/TopLoadingErrorEvent.java @@ -9,8 +9,6 @@ package com.facebook.react.views.webview.events; -import android.view.View; - import com.facebook.react.bridge.WritableMap; import com.facebook.react.uimanager.events.Event; import com.facebook.react.uimanager.events.RCTEventEmitter; @@ -23,23 +21,11 @@ public class TopLoadingErrorEvent extends Event { public static final String EVENT_NAME = "topLoadingError"; private WritableMap mEventData; - /** - * See {@link Event#Event(int)}. - * - * @param viewTag - * @param eventData - */ - @Deprecated - public TopLoadingErrorEvent(int viewTag, WritableMap eventData) { + public TopLoadingErrorEvent(Object viewTag, WritableMap eventData) { super(viewTag); mEventData = eventData; } - public TopLoadingErrorEvent(View view, WritableMap eventData) { - super(view); - mEventData = eventData; - } - @Override public String getEventName() { return EVENT_NAME; diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/webview/events/TopLoadingFinishEvent.java b/ReactAndroid/src/main/java/com/facebook/react/views/webview/events/TopLoadingFinishEvent.java index 7ffffe60c22f0f..f7b34f8ad9799e 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/webview/events/TopLoadingFinishEvent.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/webview/events/TopLoadingFinishEvent.java @@ -9,8 +9,6 @@ package com.facebook.react.views.webview.events; -import android.view.View; - import com.facebook.react.bridge.WritableMap; import com.facebook.react.uimanager.events.Event; import com.facebook.react.uimanager.events.RCTEventEmitter; @@ -23,23 +21,11 @@ public class TopLoadingFinishEvent extends Event { public static final String EVENT_NAME = "topLoadingFinish"; private WritableMap mEventData; - /** - * See {@link Event#Event(int)}. - * - * @param viewTag - * @param eventData - */ - @Deprecated - public TopLoadingFinishEvent(int viewTag, WritableMap eventData) { + public TopLoadingFinishEvent(Object viewTag, WritableMap eventData) { super(viewTag); mEventData = eventData; } - public TopLoadingFinishEvent(View view, WritableMap eventData) { - super(view); - mEventData = eventData; - } - @Override public String getEventName() { return EVENT_NAME; diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/webview/events/TopLoadingStartEvent.java b/ReactAndroid/src/main/java/com/facebook/react/views/webview/events/TopLoadingStartEvent.java index 8bb9822a1bfdd6..61e15163dd35bd 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/webview/events/TopLoadingStartEvent.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/webview/events/TopLoadingStartEvent.java @@ -9,8 +9,6 @@ package com.facebook.react.views.webview.events; -import android.view.View; - import com.facebook.react.bridge.WritableMap; import com.facebook.react.uimanager.events.Event; import com.facebook.react.uimanager.events.RCTEventEmitter; @@ -23,23 +21,11 @@ public class TopLoadingStartEvent extends Event { public static final String EVENT_NAME = "topLoadingStart"; private WritableMap mEventData; - /** - * See {@link Event#Event(int)}. - * - * @param viewTag - * @param eventData - */ - @Deprecated - public TopLoadingStartEvent(int viewTag, WritableMap eventData) { + public TopLoadingStartEvent(Object viewTag, WritableMap eventData) { super(viewTag); mEventData = eventData; } - public TopLoadingStartEvent(View view, WritableMap eventData) { - super(view); - mEventData = eventData; - } - @Override public String getEventName() { return EVENT_NAME; diff --git a/ReactAndroid/src/test/java/com/facebook/react/RootViewTest.java b/ReactAndroid/src/test/java/com/facebook/react/RootViewTest.java index 3bcdab6acdd5cb..a66c858dbbf30d 100644 --- a/ReactAndroid/src/test/java/com/facebook/react/RootViewTest.java +++ b/ReactAndroid/src/test/java/com/facebook/react/RootViewTest.java @@ -112,7 +112,7 @@ public void testTouchEmitter() { int rootViewId = 7; ReactRootView rootView = new ReactRootView(mReactContext); - rootView.setId(rootViewId); + rootView.setTag(rootViewId); rootView.startReactApplication(instanceManager, ""); rootView.simulateAttachForTesting(); diff --git a/ReactAndroid/src/test/java/com/facebook/react/animated/NativeAnimatedNodeTraversalTest.java b/ReactAndroid/src/test/java/com/facebook/react/animated/NativeAnimatedNodeTraversalTest.java index 509ae31a263a5e..51f4b55ed5a4d5 100644 --- a/ReactAndroid/src/test/java/com/facebook/react/animated/NativeAnimatedNodeTraversalTest.java +++ b/ReactAndroid/src/test/java/com/facebook/react/animated/NativeAnimatedNodeTraversalTest.java @@ -81,7 +81,7 @@ private long nextFrameTime() { @Before public void setUp() { MockitoAnnotations.initMocks(this); - when(view.getId()).thenReturn(viewTag); + when(view.getTag()).thenReturn(viewTag); PowerMockito.mockStatic(Arguments.class); PowerMockito.when(Arguments.createArray()).thenAnswer(new Answer() { @Override @@ -737,7 +737,7 @@ public void testInterpolationNode() { } private Event createScrollEvent(final View view, final double value) { - return new Event(view) { + return new Event(view.getTag()) { @Override public String getEventName() { return "topScroll"; diff --git a/ReactAndroid/src/test/java/com/facebook/react/uimanager/BaseViewManagerTest.java b/ReactAndroid/src/test/java/com/facebook/react/uimanager/BaseViewManagerTest.java index a75e08b3f206df..0641795ccf6d60 100644 --- a/ReactAndroid/src/test/java/com/facebook/react/uimanager/BaseViewManagerTest.java +++ b/ReactAndroid/src/test/java/com/facebook/react/uimanager/BaseViewManagerTest.java @@ -60,7 +60,6 @@ public class BaseViewManagerTest { private final String testID = "some-test-id"; private final int mappedTestID = 23457897; - private final int originalJsTag = 5; private final String myPackage = "com.myApp"; @@ -69,7 +68,6 @@ public void setup() { MockitoAnnotations.initMocks(this); when(view.getContext()).thenReturn(context); when(view.getResources()).thenReturn(resources); - when(view.getId()).thenReturn(originalJsTag); when(resources.getIdentifier(eq(testID), eq("id"), eq(myPackage))).thenReturn(mappedTestID); when(resources.getIdentifier(eq(testID), eq("id"), not(eq(myPackage)))).thenReturn(0); sut = new ViewManagerStub(); @@ -80,17 +78,6 @@ public void teardown() { TestIdUtil.resetTestState(); } - @Test - public void testSetTestIdShouldAlwaysCallSetTag() { - String expectedTestID1 = "asdfasdf1"; - String expectedTestID2 = "asdfasdf2"; - when(context.getPackageName()).thenReturn("com.foo"); - sut.setTestId(view, expectedTestID1); - sut.setTestId(view, expectedTestID2); - verify(view).setTag(expectedTestID1); - verify(view).setTag(expectedTestID2); - } - @Test public void testUsingATestIdNotFoundInResources() { when(context.getPackageName()).thenReturn("com.foo"); @@ -109,30 +96,6 @@ public void testUsingATestIdFoundInResources() { inOrder.verify(view, never()).setId(anyInt()); } - @Test - public void testRetrievingOriginalReactTagWhenNoTestIdWasUsed() { - assertEquals("The original JS tag was not returned", TestIdUtil.getOriginalReactTag(view), originalJsTag); - } - - @Test - public void testRetrievingOriginalReactTagWhenTestIdWasUsed() { - when(context.getPackageName()).thenReturn(myPackage); - sut.setTestId(view, testID); - verify(view).setId(mappedTestID); - assertEquals("The original JS tag was not returned", TestIdUtil.getOriginalReactTag(view), originalJsTag); - } - - @Test - public void testWhenTheViewInstanceIsRemoved() { - InOrder inOrder = inOrder(view); - when(context.getPackageName()).thenReturn(myPackage); - sut.setTestId(view, testID); - inOrder.verify(view).setId(mappedTestID); - assertEquals("The original JS tag was not returned", TestIdUtil.getOriginalReactTag(view), originalJsTag); - sut.onDropViewInstance(view); - inOrder.verify(view).setId(originalJsTag); - } - private static class ViewManagerStub extends BaseViewManager { @Override public String getName() { diff --git a/ReactAndroid/src/test/java/com/facebook/react/uimanager/UIManagerModuleTest.java b/ReactAndroid/src/test/java/com/facebook/react/uimanager/UIManagerModuleTest.java index 7cdcabf53932e8..c5390be3a13579 100644 --- a/ReactAndroid/src/test/java/com/facebook/react/uimanager/UIManagerModuleTest.java +++ b/ReactAndroid/src/test/java/com/facebook/react/uimanager/UIManagerModuleTest.java @@ -483,22 +483,22 @@ public void testTagsAssignment() { TestMoveDeleteHierarchy hierarchy = createMoveDeleteHierarchy(uiManager); View view0 = hierarchy.nativeRootView.getChildAt(0); - assertThat(view0.getId()).isEqualTo(hierarchy.view0); + assertThat(view0.getTag()).isEqualTo(hierarchy.view0); View viewWithChildren1 = hierarchy.nativeRootView.getChildAt(1); - assertThat(viewWithChildren1.getId()).isEqualTo(hierarchy.viewWithChildren1); + assertThat(viewWithChildren1.getTag()).isEqualTo(hierarchy.viewWithChildren1); View childView0 = ((ViewGroup) viewWithChildren1).getChildAt(0); - assertThat(childView0.getId()).isEqualTo(hierarchy.childView0); + assertThat(childView0.getTag()).isEqualTo(hierarchy.childView0); View childView1 = ((ViewGroup) viewWithChildren1).getChildAt(1); - assertThat(childView1.getId()).isEqualTo(hierarchy.childView1); + assertThat(childView1.getTag()).isEqualTo(hierarchy.childView1); View view2 = hierarchy.nativeRootView.getChildAt(2); - assertThat(view2.getId()).isEqualTo(hierarchy.view2); + assertThat(view2.getTag()).isEqualTo(hierarchy.view2); View view3 = hierarchy.nativeRootView.getChildAt(3); - assertThat(view3.getId()).isEqualTo(hierarchy.view3); + assertThat(view3.getTag()).isEqualTo(hierarchy.view3); } @Test From 3bf896566fcced950b59c0895ed5b9feafe40293 Mon Sep 17 00:00:00 2001 From: jsdevel Date: Sat, 8 Oct 2016 06:58:46 -0700 Subject: [PATCH 3/6] Attempting to fix internal e2e tests by using an internal int id value for testID. --- .../react/testing/ReactTestHelper.java | 34 ++----------------- .../react/tests/TextInputTestCase.java | 12 +++---- .../com/facebook/react/common/TestIdUtil.java | 24 +++++++++++-- .../react/uimanager/BaseViewManagerTest.java | 2 +- 4 files changed, 31 insertions(+), 41 deletions(-) diff --git a/ReactAndroid/src/androidTest/java/com/facebook/react/testing/ReactTestHelper.java b/ReactAndroid/src/androidTest/java/com/facebook/react/testing/ReactTestHelper.java index 8a65a51f61908d..245536fcddd96b 100644 --- a/ReactAndroid/src/androidTest/java/com/facebook/react/testing/ReactTestHelper.java +++ b/ReactAndroid/src/androidTest/java/com/facebook/react/testing/ReactTestHelper.java @@ -29,6 +29,7 @@ import com.facebook.react.bridge.NativeModuleCallExceptionHandler; import com.facebook.react.bridge.WritableNativeMap; import com.facebook.react.bridge.queue.ReactQueueConfigurationSpec; +import com.facebook.react.common.TestIdUtil; import com.facebook.react.cxxbridge.CatalystInstanceImpl; import com.facebook.react.cxxbridge.JSBundleLoader; import com.facebook.react.cxxbridge.JSCJavaScriptExecutor; @@ -179,37 +180,6 @@ public static T getViewAtPath(ViewGroup rootView, int... path) * propagated into view content description. */ public static View getViewWithReactTestId(View rootView, String testId) { - return findChild(rootView, hasTagValue(testId)); - } - - public static String getTestId(View view) { - return view.getTag() instanceof String ? (String) view.getTag() : null; - } - - private static View findChild(View root, Predicate predicate) { - if (predicate.apply(root)) { - return root; - } - if (root instanceof ViewGroup) { - ViewGroup viewGroup = (ViewGroup) root; - for (int i = 0; i < viewGroup.getChildCount(); i++) { - View child = viewGroup.getChildAt(i); - View result = findChild(child, predicate); - if (result != null) { - return result; - } - } - } - return null; - } - - private static Predicate hasTagValue(final String tagValue) { - return new Predicate() { - @Override - public boolean apply(View view) { - Object tag = view.getTag(); - return tag != null && tag.equals(tagValue); - } - }; + return rootView.findViewById(TestIdUtil.getTestId(testId)); } } 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 d3e32423664f0b..a0893a28cda676 100644 --- a/ReactAndroid/src/androidTest/java/com/facebook/react/tests/TextInputTestCase.java +++ b/ReactAndroid/src/androidTest/java/com/facebook/react/tests/TextInputTestCase.java @@ -114,7 +114,7 @@ public void testMetionsInputColors() throws Throwable { eventDispatcher.dispatchEvent( new ReactTextChangedEvent( - reactEditText, + reactEditText.getTag(), newText.toString(), (int) PixelUtil.toDIPFromPixel(contentWidth), (int) PixelUtil.toDIPFromPixel(contentHeight), @@ -122,7 +122,7 @@ public void testMetionsInputColors() throws Throwable { eventDispatcher.dispatchEvent( new ReactTextInputEvent( - reactEditText, + reactEditText.getTag(), newText.toString(), "", start, @@ -146,7 +146,7 @@ public void testMetionsInputColors() throws Throwable { eventDispatcher.dispatchEvent( new ReactTextChangedEvent( - reactEditText, + reactEditText.getTag(), newText.toString(), (int) PixelUtil.toDIPFromPixel(contentWidth), (int) PixelUtil.toDIPFromPixel(contentHeight), @@ -154,7 +154,7 @@ public void testMetionsInputColors() throws Throwable { eventDispatcher.dispatchEvent( new ReactTextInputEvent( - reactEditText, + reactEditText.getTag(), moreText, "", start, @@ -178,7 +178,7 @@ public void testMetionsInputColors() throws Throwable { eventDispatcher.dispatchEvent( new ReactTextChangedEvent( - reactEditText, + reactEditText.getTag(), newText.toString(), (int) PixelUtil.toDIPFromPixel(contentWidth), (int) PixelUtil.toDIPFromPixel(contentHeight), @@ -186,7 +186,7 @@ public void testMetionsInputColors() throws Throwable { eventDispatcher.dispatchEvent( new ReactTextInputEvent( - reactEditText, + reactEditText.getTag(), moreText, "", start, diff --git a/ReactAndroid/src/main/java/com/facebook/react/common/TestIdUtil.java b/ReactAndroid/src/main/java/com/facebook/react/common/TestIdUtil.java index c7898b2a90dbbb..3b923c1f58378c 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/common/TestIdUtil.java +++ b/ReactAndroid/src/main/java/com/facebook/react/common/TestIdUtil.java @@ -5,16 +5,20 @@ import com.facebook.react.common.annotations.VisibleForTesting; import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.atomic.AtomicInteger; /** * Utility methods for managing testIDs. */ public class TestIdUtil { private static final ConcurrentHashMap TEST_IDS = new ConcurrentHashMap<>(); + private static final int STARTING_INTERNAL_ID = 10; + private static final AtomicInteger INTERNAL_ID = new AtomicInteger(STARTING_INTERNAL_ID); /** * Looks for defined resource IDs in R.class by the name of testId and if a matching resource ID is - * found it is passed to the view's setId method. + * found it is passed to the view's setId method. If the given testId cannot be found in R.class, + * an internal increment value is assigned instead. * * @param view * @param testId @@ -24,6 +28,9 @@ public static void setTestId(T view, String testId) { int mappedTestId; if (!TEST_IDS.containsKey(testId)) { mappedTestId = view.getResources().getIdentifier(testId, "id", view.getContext().getPackageName()); + if (mappedTestId <= 0) { + mappedTestId = INTERNAL_ID.getAndIncrement(); + } TEST_IDS.put(testId, mappedTestId); } else { mappedTestId = TEST_IDS.get(testId); @@ -34,11 +41,24 @@ public static void setTestId(T view, String testId) { } } + /** + * Used for internal e2e tests that do not yet have testIDs stored in ids.xml. It is strongly + * advised that you reference ids that have been generated in R.class to avoid collisions and + * to properly support UIAutomatorViewer. + * + * @param testId + * @return + */ + @VisibleForTesting + public static int getTestId(String testId) { + return TEST_IDS.containsKey(testId) ? TEST_IDS.get(testId) : View.NO_ID; + } + /** * Used by tests to clear the static member Maps. */ @VisibleForTesting public static void resetTestState() { - TEST_IDS.clear(); + TEST_IDS.clear();INTERNAL_ID.set(STARTING_INTERNAL_ID); } } diff --git a/ReactAndroid/src/test/java/com/facebook/react/uimanager/BaseViewManagerTest.java b/ReactAndroid/src/test/java/com/facebook/react/uimanager/BaseViewManagerTest.java index 0641795ccf6d60..2659c872621878 100644 --- a/ReactAndroid/src/test/java/com/facebook/react/uimanager/BaseViewManagerTest.java +++ b/ReactAndroid/src/test/java/com/facebook/react/uimanager/BaseViewManagerTest.java @@ -82,7 +82,7 @@ public void teardown() { public void testUsingATestIdNotFoundInResources() { when(context.getPackageName()).thenReturn("com.foo"); sut.setTestId(view, testID); - verify(view, never()).setId(anyInt()); + verify(view).setId(eq(10)); } @Test From 2d646753e29a2b05cb01f57fe724a489556dbe18 Mon Sep 17 00:00:00 2001 From: jsdevel Date: Thu, 13 Oct 2016 02:03:14 -0700 Subject: [PATCH 4/6] Moving viewTag type back to int to reduce changeset. --- .../react/tests/TextInputTestCase.java | 14 +++++++------ .../com/facebook/react/common/TestIdUtil.java | 3 ++- .../events/ContentSizeChangeEvent.java | 2 +- .../react/uimanager/events/Event.java | 6 +++--- .../drawer/ReactDrawerLayoutManager.java | 10 +++++---- .../drawer/events/DrawerClosedEvent.java | 4 ++-- .../drawer/events/DrawerOpenedEvent.java | 4 ++-- .../views/drawer/events/DrawerSlideEvent.java | 4 ++-- .../events/DrawerStateChangedEvent.java | 4 ++-- .../react/views/image/ImageLoadEvent.java | 21 +++++++++---------- .../react/views/image/ReactImageView.java | 16 +++++++++----- .../views/modal/ReactModalHostManager.java | 6 ++++-- .../react/views/modal/RequestCloseEvent.java | 2 +- .../facebook/react/views/modal/ShowEvent.java | 2 +- .../views/picker/ReactPickerManager.java | 4 +++- .../picker/events/PickerItemSelectEvent.java | 4 ++-- .../RecyclerViewBackedScrollView.java | 4 ++-- .../views/scroll/ReactScrollViewHelper.java | 4 +++- .../react/views/scroll/ScrollEvent.java | 4 ++-- .../react/views/slider/ReactSliderEvent.java | 5 ++--- .../views/slider/ReactSliderManager.java | 6 ++++-- .../slider/ReactSlidingCompleteEvent.java | 4 ++-- .../views/swiperefresh/RefreshEvent.java | 2 +- .../SwipeRefreshLayoutManager.java | 3 ++- .../views/switchview/ReactSwitchEvent.java | 4 ++-- .../views/switchview/ReactSwitchManager.java | 4 +++- .../ReactContentSizeChangedEvent.java | 8 +++---- .../textinput/ReactTextChangedEvent.java | 12 +++++------ .../textinput/ReactTextInputBlurEvent.java | 4 ++-- .../ReactTextInputEndEditingEvent.java | 6 +++--- .../views/textinput/ReactTextInputEvent.java | 12 +++++------ .../textinput/ReactTextInputFocusEvent.java | 4 ++-- .../textinput/ReactTextInputManager.java | 18 +++++++++------- .../ReactTextInputSelectionEvent.java | 8 +++---- .../ReactTextInputSubmitEditingEvent.java | 6 +++--- .../views/toolbar/ReactToolbarManager.java | 6 ++++-- .../toolbar/events/ToolbarClickEvent.java | 4 ++-- .../views/viewpager/PageScrollEvent.java | 9 ++++---- .../PageScrollStateChangedEvent.java | 2 +- .../views/viewpager/PageSelectedEvent.java | 2 +- .../react/views/viewpager/ReactViewPager.java | 12 ++++++++--- .../views/webview/ReactWebViewManager.java | 10 ++++----- .../webview/events/TopLoadingErrorEvent.java | 4 ++-- .../webview/events/TopLoadingFinishEvent.java | 4 ++-- .../webview/events/TopLoadingStartEvent.java | 4 ++-- .../NativeAnimatedNodeTraversalTest.java | 5 +++-- .../react/uimanager/UIManagerModuleTest.java | 13 ++++++------ 47 files changed, 165 insertions(+), 134 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 a0893a28cda676..99ebcd3865a52f 100644 --- a/ReactAndroid/src/androidTest/java/com/facebook/react/tests/TextInputTestCase.java +++ b/ReactAndroid/src/androidTest/java/com/facebook/react/tests/TextInputTestCase.java @@ -25,6 +25,8 @@ import com.facebook.react.views.textinput.ReactTextChangedEvent; import com.facebook.react.views.textinput.ReactTextInputEvent; +import static com.facebook.react.common.ViewHelperMethods.reactTagFrom; + /** * Test to verify that TextInput renders correctly */ @@ -114,7 +116,7 @@ public void testMetionsInputColors() throws Throwable { eventDispatcher.dispatchEvent( new ReactTextChangedEvent( - reactEditText.getTag(), + reactTagFrom(reactEditText), newText.toString(), (int) PixelUtil.toDIPFromPixel(contentWidth), (int) PixelUtil.toDIPFromPixel(contentHeight), @@ -122,7 +124,7 @@ public void testMetionsInputColors() throws Throwable { eventDispatcher.dispatchEvent( new ReactTextInputEvent( - reactEditText.getTag(), + reactTagFrom(reactEditText), newText.toString(), "", start, @@ -146,7 +148,7 @@ public void testMetionsInputColors() throws Throwable { eventDispatcher.dispatchEvent( new ReactTextChangedEvent( - reactEditText.getTag(), + reactTagFrom(reactEditText), newText.toString(), (int) PixelUtil.toDIPFromPixel(contentWidth), (int) PixelUtil.toDIPFromPixel(contentHeight), @@ -154,7 +156,7 @@ public void testMetionsInputColors() throws Throwable { eventDispatcher.dispatchEvent( new ReactTextInputEvent( - reactEditText.getTag(), + reactTagFrom(reactEditText), moreText, "", start, @@ -178,7 +180,7 @@ public void testMetionsInputColors() throws Throwable { eventDispatcher.dispatchEvent( new ReactTextChangedEvent( - reactEditText.getTag(), + reactTagFrom(reactEditText), newText.toString(), (int) PixelUtil.toDIPFromPixel(contentWidth), (int) PixelUtil.toDIPFromPixel(contentHeight), @@ -186,7 +188,7 @@ public void testMetionsInputColors() throws Throwable { eventDispatcher.dispatchEvent( new ReactTextInputEvent( - reactEditText.getTag(), + reactTagFrom(reactEditText), moreText, "", start, diff --git a/ReactAndroid/src/main/java/com/facebook/react/common/TestIdUtil.java b/ReactAndroid/src/main/java/com/facebook/react/common/TestIdUtil.java index 3b923c1f58378c..d9fc2352719cae 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/common/TestIdUtil.java +++ b/ReactAndroid/src/main/java/com/facebook/react/common/TestIdUtil.java @@ -59,6 +59,7 @@ public static int getTestId(String testId) { */ @VisibleForTesting public static void resetTestState() { - TEST_IDS.clear();INTERNAL_ID.set(STARTING_INTERNAL_ID); + TEST_IDS.clear(); + INTERNAL_ID.set(STARTING_INTERNAL_ID); } } diff --git a/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/ContentSizeChangeEvent.java b/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/ContentSizeChangeEvent.java index 8c3324a00de63a..03cc05a25c1980 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/ContentSizeChangeEvent.java +++ b/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/ContentSizeChangeEvent.java @@ -16,7 +16,7 @@ public class ContentSizeChangeEvent extends Event { private final int mWidth; private final int mHeight; - public ContentSizeChangeEvent(Object viewTag, int width, int height) { + public ContentSizeChangeEvent(int viewTag, int width, int height) { super(viewTag); mWidth = width; mHeight = height; diff --git a/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/Event.java b/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/Event.java index ee8e416a3a3ca1..4da9ed777d3758 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/Event.java +++ b/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/Event.java @@ -30,15 +30,15 @@ public abstract class Event { protected Event() { } - protected Event(Object viewTag) { + protected Event(int viewTag) { init(viewTag); } /** * This method needs to be called before event is sent to event dispatcher. */ - protected void init(Object viewTag) { - mViewTag = (int) viewTag; + protected void init(int viewTag) { + mViewTag = viewTag; mTimestampMs = SystemClock.uptimeMillis(); mInitialized = true; } 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 c8abad75a1fbbc..f63cf3cd838c37 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 @@ -36,6 +36,8 @@ import com.facebook.react.views.drawer.events.DrawerSlideEvent; import com.facebook.react.views.drawer.events.DrawerStateChangedEvent; +import static com.facebook.react.common.ViewHelperMethods.reactTagFrom; + /** * View Manager for {@link ReactDrawerLayout} components. */ @@ -187,25 +189,25 @@ public DrawerEventEmitter(DrawerLayout drawerLayout, EventDispatcher eventDispat @Override public void onDrawerSlide(View view, float v) { mEventDispatcher.dispatchEvent( - new DrawerSlideEvent(mDrawerLayout.getTag(), v)); + new DrawerSlideEvent(reactTagFrom(mDrawerLayout), v)); } @Override public void onDrawerOpened(View view) { mEventDispatcher.dispatchEvent( - new DrawerOpenedEvent(mDrawerLayout.getTag())); + new DrawerOpenedEvent(reactTagFrom(mDrawerLayout))); } @Override public void onDrawerClosed(View view) { mEventDispatcher.dispatchEvent( - new DrawerClosedEvent(mDrawerLayout.getTag())); + new DrawerClosedEvent(reactTagFrom(mDrawerLayout))); } @Override public void onDrawerStateChanged(int i) { mEventDispatcher.dispatchEvent( - new DrawerStateChangedEvent(mDrawerLayout.getTag(), i)); + new DrawerStateChangedEvent(reactTagFrom(mDrawerLayout), i)); } } } diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/drawer/events/DrawerClosedEvent.java b/ReactAndroid/src/main/java/com/facebook/react/views/drawer/events/DrawerClosedEvent.java index 019a1e0c370a80..a6845037d89702 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/drawer/events/DrawerClosedEvent.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/drawer/events/DrawerClosedEvent.java @@ -17,8 +17,8 @@ public class DrawerClosedEvent extends Event { public static final String EVENT_NAME = "topDrawerClosed"; - public DrawerClosedEvent(Object viewTag) { - super(viewTag); + public DrawerClosedEvent(int viewId) { + super(viewId); } @Override diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/drawer/events/DrawerOpenedEvent.java b/ReactAndroid/src/main/java/com/facebook/react/views/drawer/events/DrawerOpenedEvent.java index c5e32eb4f511e6..b94d5937ae4510 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/drawer/events/DrawerOpenedEvent.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/drawer/events/DrawerOpenedEvent.java @@ -17,8 +17,8 @@ public class DrawerOpenedEvent extends Event { public static final String EVENT_NAME = "topDrawerOpened"; - public DrawerOpenedEvent(Object viewTag) { - super(viewTag); + public DrawerOpenedEvent(int viewId) { + super(viewId); } @Override diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/drawer/events/DrawerSlideEvent.java b/ReactAndroid/src/main/java/com/facebook/react/views/drawer/events/DrawerSlideEvent.java index 3c7ed29c467b29..5010ee6befa480 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/drawer/events/DrawerSlideEvent.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/drawer/events/DrawerSlideEvent.java @@ -23,8 +23,8 @@ public class DrawerSlideEvent extends Event { private final float mOffset; - public DrawerSlideEvent(Object viewTag, float offset) { - super(viewTag); + public DrawerSlideEvent(int viewId, float offset) { + super(viewId); mOffset = offset; } diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/drawer/events/DrawerStateChangedEvent.java b/ReactAndroid/src/main/java/com/facebook/react/views/drawer/events/DrawerStateChangedEvent.java index 6ea16d4230e6e5..a4d9294875201b 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/drawer/events/DrawerStateChangedEvent.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/drawer/events/DrawerStateChangedEvent.java @@ -20,8 +20,8 @@ public class DrawerStateChangedEvent extends Event { private final int mDrawerState; - public DrawerStateChangedEvent(Object viewTag, int drawerState) { - super(viewTag); + public DrawerStateChangedEvent(int viewId, int drawerState) { + super(viewId); mDrawerState = drawerState; } diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/image/ImageLoadEvent.java b/ReactAndroid/src/main/java/com/facebook/react/views/image/ImageLoadEvent.java index f98b3ad080361c..f47c34540164c7 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/image/ImageLoadEvent.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/image/ImageLoadEvent.java @@ -39,22 +39,21 @@ public class ImageLoadEvent extends Event { private final int mWidth; private final int mHeight; - - public ImageLoadEvent(Object viewTag, @ImageEventType int eventType) { - this(viewTag, eventType, null); + public ImageLoadEvent(int viewId, @ImageEventType int eventType) { + this(viewId, eventType, null); } - public ImageLoadEvent(Object viewTag, @ImageEventType int eventType, String imageUri) { - this(viewTag, eventType, imageUri, 0, 0); + public ImageLoadEvent(int viewId, @ImageEventType int eventType, String imageUri) { + this(viewId, eventType, imageUri, 0, 0); } public ImageLoadEvent( - Object viewTag, - @ImageEventType int eventType, - @Nullable String imageUri, - int width, - int height) { - super(viewTag); + int viewId, + @ImageEventType int eventType, + @Nullable String imageUri, + int width, + int height) { + super(viewId); mEventType = eventType; mImageUri = imageUri; mWidth = width; 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 58e85ab4101273..11891cd78b4d79 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 @@ -59,6 +59,8 @@ import com.facebook.react.views.imagehelper.ResourceDrawableIdHelper; import com.facebook.react.views.imagehelper.MultiSourceHelper.MultiSourceResult; +import static com.facebook.react.common.ViewHelperMethods.reactTagFrom; + /** * Wrapper class around Fresco's GenericDraweeView, enabling persisting props across multiple view * update and consistent processing of both static and network images. @@ -192,7 +194,7 @@ public void setShouldNotifyLoadEvents(boolean shouldNotify) { @Override public void onSubmit(String id, Object callerContext) { mEventDispatcher.dispatchEvent( - new ImageLoadEvent(getTag(), ImageLoadEvent.ON_LOAD_START)); + new ImageLoadEvent(getReactTag(), ImageLoadEvent.ON_LOAD_START)); } @Override @@ -202,19 +204,19 @@ public void onFinalImageSet( @Nullable Animatable animatable) { if (imageInfo != null) { mEventDispatcher.dispatchEvent( - new ImageLoadEvent(getTag(), ImageLoadEvent.ON_LOAD, + new ImageLoadEvent(getReactTag(), ImageLoadEvent.ON_LOAD, mImageSource.getSource(), imageInfo.getWidth(), imageInfo.getHeight())); mEventDispatcher.dispatchEvent( - new ImageLoadEvent(getTag(), ImageLoadEvent.ON_LOAD_END)); + new ImageLoadEvent(getReactTag(), ImageLoadEvent.ON_LOAD_END)); } } @Override public void onFailure(String id, Throwable throwable) { mEventDispatcher.dispatchEvent( - new ImageLoadEvent(getTag(), ImageLoadEvent.ON_ERROR)); + new ImageLoadEvent(getReactTag(), ImageLoadEvent.ON_ERROR)); mEventDispatcher.dispatchEvent( - new ImageLoadEvent(getTag(), ImageLoadEvent.ON_LOAD_END)); + new ImageLoadEvent(getReactTag(), ImageLoadEvent.ON_LOAD_END)); } }; } @@ -222,6 +224,10 @@ public void onFailure(String id, Throwable throwable) { mIsDirty = true; } + private int getReactTag() { + return reactTagFrom(this); + } + public void setBorderColor(int borderColor) { mBorderColor = borderColor; mIsDirty = true; 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 004da201ec278c..485099449fc80a 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 @@ -22,6 +22,8 @@ import com.facebook.react.uimanager.annotations.ReactProp; import com.facebook.react.uimanager.events.EventDispatcher; +import static com.facebook.react.common.ViewHelperMethods.reactTagFrom; + /** * View manager for {@link ReactModalHostView} components. */ @@ -76,14 +78,14 @@ protected void addEventEmitters( new ReactModalHostView.OnRequestCloseListener() { @Override public void onRequestClose(DialogInterface dialog) { - dispatcher.dispatchEvent(new RequestCloseEvent(view.getTag())); + dispatcher.dispatchEvent(new RequestCloseEvent(reactTagFrom(view))); } }); view.setOnShowListener( new DialogInterface.OnShowListener() { @Override public void onShow(DialogInterface dialog) { - dispatcher.dispatchEvent(new ShowEvent(view.getTag())); + dispatcher.dispatchEvent(new ShowEvent(reactTagFrom(view))); } }); } diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/modal/RequestCloseEvent.java b/ReactAndroid/src/main/java/com/facebook/react/views/modal/RequestCloseEvent.java index b05ee975e37fe5..133488760441bf 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/modal/RequestCloseEvent.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/modal/RequestCloseEvent.java @@ -19,7 +19,7 @@ public static final String EVENT_NAME = "topRequestClose"; - protected RequestCloseEvent(Object viewTag) { + protected RequestCloseEvent(int viewTag) { super(viewTag); } diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/modal/ShowEvent.java b/ReactAndroid/src/main/java/com/facebook/react/views/modal/ShowEvent.java index e380ff05d07d31..a0851ccf75e6c9 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/modal/ShowEvent.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/modal/ShowEvent.java @@ -19,7 +19,7 @@ public static final String EVENT_NAME = "topShow"; - protected ShowEvent(Object viewTag) { + protected ShowEvent(int viewTag) { super(viewTag); } 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 a9b5cbede6fa50..437213db82d33f 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 @@ -30,6 +30,8 @@ import com.facebook.react.uimanager.events.EventDispatcher; import com.facebook.react.views.picker.events.PickerItemSelectEvent; +import static com.facebook.react.common.ViewHelperMethods.reactTagFrom; + /** * {@link ViewManager} for the {@link ReactPicker} view. This is abstract because the * {@link Spinner} doesn't support setting the mode (dropdown/dialog) outside the constructor, so @@ -156,7 +158,7 @@ public PickerEventEmitter(ReactPicker reactPicker, EventDispatcher eventDispatch @Override public void onItemSelected(int position) { mEventDispatcher.dispatchEvent( new PickerItemSelectEvent( - mReactPicker.getTag(), position)); + reactTagFrom(mReactPicker), position)); } } } diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/picker/events/PickerItemSelectEvent.java b/ReactAndroid/src/main/java/com/facebook/react/views/picker/events/PickerItemSelectEvent.java index b05a2594fc57fe..3eb45f48b74424 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/picker/events/PickerItemSelectEvent.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/picker/events/PickerItemSelectEvent.java @@ -19,8 +19,8 @@ public class PickerItemSelectEvent extends Event { private final int mPosition; - public PickerItemSelectEvent(Object viewTag, int position) { - super(viewTag); + public PickerItemSelectEvent(int id, int position) { + super(id); mPosition = 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 9dbac63dcda2eb..88043e5d3e65a9 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 @@ -346,7 +346,7 @@ protected void onScrollChanged(int l, int t, int oldl, int oldt) { ((ReactContext) getContext()).getNativeModule(UIManagerModule.class).getEventDispatcher() .dispatchEvent(ScrollEvent.obtain( - this.getTag(), + reactTagFrom(this), ScrollEventType.SCROLL, 0, /* offsetX = 0, horizontal scrolling only */ calculateAbsoluteOffset(), @@ -360,7 +360,7 @@ private void onTotalChildrenHeightChange(int newTotalChildrenHeight) { if (mSendContentSizeChangeEvents) { ((ReactContext) getContext()).getNativeModule(UIManagerModule.class).getEventDispatcher() .dispatchEvent(new ContentSizeChangeEvent( - this.getTag(), + reactTagFrom(this), 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 7a308ef9291a41..839dbdaaf54e8a 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 @@ -15,6 +15,8 @@ import com.facebook.react.bridge.ReactContext; import com.facebook.react.uimanager.UIManagerModule; +import static com.facebook.react.common.ViewHelperMethods.reactTagFrom; + /** * Helper class that deals with emitting Scroll Events. */ @@ -55,7 +57,7 @@ private static void emitScrollEvent(ViewGroup scrollView, ScrollEventType scroll ReactContext reactContext = (ReactContext) scrollView.getContext(); reactContext.getNativeModule(UIManagerModule.class).getEventDispatcher().dispatchEvent( ScrollEvent.obtain( - scrollView.getTag(), + reactTagFrom(scrollView), scrollEventType, scrollView.getScrollX(), scrollView.getScrollY(), diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ScrollEvent.java b/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ScrollEvent.java index 173a80ffcceadb..25606a48960621 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ScrollEvent.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ScrollEvent.java @@ -39,7 +39,7 @@ public class ScrollEvent extends Event { private @Nullable ScrollEventType mScrollEventType; public static ScrollEvent obtain( - Object viewTag, + int viewTag, ScrollEventType scrollEventType, int scrollX, int scrollY, @@ -72,7 +72,7 @@ private ScrollEvent() { } private void init( - Object viewTag, + int viewTag, ScrollEventType scrollEventType, int scrollX, int scrollY, diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/slider/ReactSliderEvent.java b/ReactAndroid/src/main/java/com/facebook/react/views/slider/ReactSliderEvent.java index a223bb15103a7d..f45dc71f301794 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/slider/ReactSliderEvent.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/slider/ReactSliderEvent.java @@ -24,13 +24,12 @@ public class ReactSliderEvent extends Event { private final double mValue; private final boolean mFromUser; - public ReactSliderEvent(Object viewTag, double value, boolean fromUser) { - super(viewTag); + public ReactSliderEvent(int viewId, double value, boolean fromUser) { + super(viewId); mValue = value; mFromUser = fromUser; } - public double getValue() { return mValue; } 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 73a019c0d8179e..186a1455197d65 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 @@ -27,6 +27,8 @@ import com.facebook.react.uimanager.ViewProps; import com.facebook.react.uimanager.annotations.ReactProp; +import static com.facebook.react.common.ViewHelperMethods.reactTagFrom; + /** * Manages instances of {@code ReactSlider}. * @@ -79,7 +81,7 @@ public void onProgressChanged(SeekBar seekbar, int progress, boolean fromUser) { ReactContext reactContext = (ReactContext) seekbar.getContext(); reactContext.getNativeModule(UIManagerModule.class).getEventDispatcher().dispatchEvent( new ReactSliderEvent( - seekbar.getTag(), + reactTagFrom(seekbar), ((ReactSlider)seekbar).toRealProgress(progress), fromUser)); } @@ -93,7 +95,7 @@ public void onStopTrackingTouch(SeekBar seekbar) { ReactContext reactContext = (ReactContext) seekbar.getContext(); reactContext.getNativeModule(UIManagerModule.class).getEventDispatcher().dispatchEvent( new ReactSlidingCompleteEvent( - seekbar.getTag(), + reactTagFrom(seekbar), ((ReactSlider)seekbar).toRealProgress(seekbar.getProgress()))); } }; diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/slider/ReactSlidingCompleteEvent.java b/ReactAndroid/src/main/java/com/facebook/react/views/slider/ReactSlidingCompleteEvent.java index 9f490da0d70687..1dceb63ee4c685 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/slider/ReactSlidingCompleteEvent.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/slider/ReactSlidingCompleteEvent.java @@ -23,8 +23,8 @@ public class ReactSlidingCompleteEvent extends Event private final double mValue; - public ReactSlidingCompleteEvent(Object viewTag, double value) { - super(viewTag); + public ReactSlidingCompleteEvent(int viewId, double value) { + super(viewId); mValue = value; } diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/swiperefresh/RefreshEvent.java b/ReactAndroid/src/main/java/com/facebook/react/views/swiperefresh/RefreshEvent.java index 5e133f650f856f..0745d2adbecee7 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/swiperefresh/RefreshEvent.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/swiperefresh/RefreshEvent.java @@ -14,7 +14,7 @@ public class RefreshEvent extends Event { - protected RefreshEvent(Object viewTag) { + protected RefreshEvent(int viewTag) { super(viewTag); } 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 3ea9c92a5a8c2a..dd9b987680a205 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 @@ -27,6 +27,7 @@ import com.facebook.react.uimanager.annotations.ReactProp; import static com.facebook.react.views.swiperefresh.SwipeRefreshLayoutManager.REACT_CLASS; +import static com.facebook.react.common.ViewHelperMethods.reactTagFrom; /** * ViewManager for {@link ReactSwipeRefreshLayout} which allows the user to "pull to refresh" a @@ -94,7 +95,7 @@ protected void addEventEmitters( @Override public void onRefresh() { reactContext.getNativeModule(UIManagerModule.class).getEventDispatcher() - .dispatchEvent(new RefreshEvent(view.getTag())); + .dispatchEvent(new RefreshEvent(reactTagFrom(view))); } }); } diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/switchview/ReactSwitchEvent.java b/ReactAndroid/src/main/java/com/facebook/react/views/switchview/ReactSwitchEvent.java index 7aaf69f740de28..0b60076448979a 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/switchview/ReactSwitchEvent.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/switchview/ReactSwitchEvent.java @@ -23,8 +23,8 @@ private final boolean mIsChecked; - public ReactSwitchEvent(Object viewTag, boolean isChecked) { - super(viewTag); + public ReactSwitchEvent(int viewId, boolean isChecked) { + super(viewId); mIsChecked = isChecked; } 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 0737ac3a1cd8ed..1cba6222414641 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 @@ -25,6 +25,8 @@ import com.facebook.react.uimanager.ViewProps; import com.facebook.react.uimanager.annotations.ReactProp; +import static com.facebook.react.common.ViewHelperMethods.reactTagFrom; + /** * View manager for {@link ReactSwitch} components. */ @@ -76,7 +78,7 @@ public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { ReactContext reactContext = (ReactContext) buttonView.getContext(); reactContext.getNativeModule(UIManagerModule.class).getEventDispatcher().dispatchEvent( new ReactSwitchEvent( - buttonView.getTag(), + reactTagFrom(buttonView), isChecked)); } }; diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactContentSizeChangedEvent.java b/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactContentSizeChangedEvent.java index da1e85cde06b40..2ad1a1c3a37315 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactContentSizeChangedEvent.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactContentSizeChangedEvent.java @@ -25,10 +25,10 @@ public class ReactContentSizeChangedEvent extends Event { private float mContentHeight; public ReactContentSizeChangedEvent( - Object viewTag, - float contentSizeWidth, - float contentSizeHeight) { - super(viewTag); + int viewId, + float contentSizeWidth, + float contentSizeHeight) { + super(viewId); mContentWidth = contentSizeWidth; mContentHeight = contentSizeHeight; } diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextChangedEvent.java b/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextChangedEvent.java index 6df6a7f4c84cfb..67ca37c5e682f2 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextChangedEvent.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextChangedEvent.java @@ -28,12 +28,12 @@ public class ReactTextChangedEvent extends Event { private int mEventCount; public ReactTextChangedEvent( - Object viewTag, - String text, - float contentSizeWidth, - float contentSizeHeight, - int eventCount) { - super(viewTag); + int viewId, + String text, + float contentSizeWidth, + float contentSizeHeight, + int eventCount) { + super(viewId); mText = text; mContentWidth = contentSizeWidth; mContentHeight = contentSizeHeight; diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputBlurEvent.java b/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputBlurEvent.java index 54014cd7e6d0f6..a51d01677e8107 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputBlurEvent.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputBlurEvent.java @@ -21,8 +21,8 @@ private static final String EVENT_NAME = "topBlur"; - public ReactTextInputBlurEvent(Object viewTag) { - super(viewTag); + public ReactTextInputBlurEvent(int viewId) { + super(viewId); } @Override diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputEndEditingEvent.java b/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputEndEditingEvent.java index 9df4ef477ca9ac..9c6975cf7a9869 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputEndEditingEvent.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputEndEditingEvent.java @@ -25,9 +25,9 @@ class ReactTextInputEndEditingEvent extends Event private String mText; public ReactTextInputEndEditingEvent( - Object viewTag, - String text) { - super(viewTag); + int viewId, + String text) { + super(viewId); mText = text; } diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputEvent.java b/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputEvent.java index 4f9e16e2528a74..caab8c136c0eb4 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputEvent.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputEvent.java @@ -28,12 +28,12 @@ public class ReactTextInputEvent extends Event { private int mRangeEnd; public ReactTextInputEvent( - Object viewTag, - String text, - String previousText, - int rangeStart, - int rangeEnd) { - super(viewTag); + int viewId, + String text, + String previousText, + int rangeStart, + int rangeEnd) { + super(viewId); mText = text; mPreviousText = previousText; mRangeStart = rangeStart; diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputFocusEvent.java b/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputFocusEvent.java index ac20b890294731..3ca67c3d944008 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputFocusEvent.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputFocusEvent.java @@ -21,8 +21,8 @@ private static final String EVENT_NAME = "topFocus"; - public ReactTextInputFocusEvent(Object viewTag) { - super(viewTag); + public ReactTextInputFocusEvent(int viewId) { + super(viewId); } @Override 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 6b07f5def9fb16..6ba6350a8a455a 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 @@ -53,6 +53,8 @@ import com.facebook.react.views.text.ReactTextView; import com.facebook.react.views.text.TextInlineImageSpan; +import static com.facebook.react.common.ViewHelperMethods.reactTagFrom; + /** * Manages instances of TextInput. */ @@ -645,7 +647,7 @@ public void onTextChanged(CharSequence s, int start, int before, int count) { // TODO: t7936714 merge these events mEventDispatcher.dispatchEvent( new ReactTextChangedEvent( - mEditText.getTag(), + reactTagFrom(mEditText), s.toString(), PixelUtil.toDIPFromPixel(contentWidth), PixelUtil.toDIPFromPixel(contentHeight), @@ -653,7 +655,7 @@ public void onTextChanged(CharSequence s, int start, int before, int count) { mEventDispatcher.dispatchEvent( new ReactTextInputEvent( - mEditText.getTag(), + reactTagFrom(mEditText), newText, oldText, start, @@ -678,15 +680,15 @@ public void onFocusChange(View v, boolean hasFocus) { if (hasFocus) { eventDispatcher.dispatchEvent( new ReactTextInputFocusEvent( - editText.getTag())); + reactTagFrom(editText))); } else { eventDispatcher.dispatchEvent( new ReactTextInputBlurEvent( - editText.getTag())); + reactTagFrom(editText))); eventDispatcher.dispatchEvent( new ReactTextInputEndEditingEvent( - editText.getTag(), + reactTagFrom(editText), editText.getText().toString())); } } @@ -703,7 +705,7 @@ public boolean onEditorAction(TextView v, int actionId, KeyEvent keyEvent) { reactContext.getNativeModule(UIManagerModule.class).getEventDispatcher(); eventDispatcher.dispatchEvent( new ReactTextInputSubmitEditingEvent( - editText.getTag(), + reactTagFrom(editText), editText.getText().toString())); } if (actionId == EditorInfo.IME_ACTION_NEXT || @@ -749,7 +751,7 @@ public void onLayout() { mEventDispatcher.dispatchEvent( new ReactContentSizeChangedEvent( - mEditText.getTag(), + reactTagFrom(mEditText), PixelUtil.toDIPFromPixel(contentWidth), PixelUtil.toDIPFromPixel(contentHeight))); } @@ -777,7 +779,7 @@ public void onSelectionChanged(int start, int end) { if (mPreviousSelectionStart != start || mPreviousSelectionEnd != end) { mEventDispatcher.dispatchEvent( new ReactTextInputSelectionEvent( - mReactEditText.getTag(), + reactTagFrom(mReactEditText), start, end )); diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputSelectionEvent.java b/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputSelectionEvent.java index deed8d194de3a2..c9e5a4153715ef 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputSelectionEvent.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputSelectionEvent.java @@ -26,10 +26,10 @@ private int mSelectionEnd; public ReactTextInputSelectionEvent( - Object viewTag, - int selectionStart, - int selectionEnd) { - super(viewTag); + int viewId, + int selectionStart, + int selectionEnd) { + super(viewId); mSelectionStart = selectionStart; mSelectionEnd = selectionEnd; } diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputSubmitEditingEvent.java b/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputSubmitEditingEvent.java index 2b146cf1513f28..32b9755a0129d3 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputSubmitEditingEvent.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputSubmitEditingEvent.java @@ -25,9 +25,9 @@ private String mText; public ReactTextInputSubmitEditingEvent( - Object viewTag, - String text) { - super(viewTag); + int viewId, + String text) { + super(viewId); mText = text; } 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 3ac4576cd48166..e0e361d4102c11 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 @@ -33,6 +33,8 @@ import com.facebook.react.uimanager.events.EventDispatcher; import com.facebook.react.views.toolbar.events.ToolbarClickEvent; +import static com.facebook.react.common.ViewHelperMethods.reactTagFrom; + /** * Manages instances of ReactToolbar. */ @@ -130,7 +132,7 @@ protected void addEventEmitters(final ThemedReactContext reactContext, final Rea @Override public void onClick(View v) { mEventDispatcher.dispatchEvent( - new ToolbarClickEvent(view.getTag(), -1)); + new ToolbarClickEvent(reactTagFrom(view), -1)); } }); @@ -140,7 +142,7 @@ public void onClick(View v) { public boolean onMenuItemClick(MenuItem menuItem) { mEventDispatcher.dispatchEvent( new ToolbarClickEvent( - view.getTag(), + reactTagFrom(view), menuItem.getOrder())); return true; } diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/toolbar/events/ToolbarClickEvent.java b/ReactAndroid/src/main/java/com/facebook/react/views/toolbar/events/ToolbarClickEvent.java index a2f1eb2bf903d3..2391a2147ef718 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/toolbar/events/ToolbarClickEvent.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/toolbar/events/ToolbarClickEvent.java @@ -22,8 +22,8 @@ public class ToolbarClickEvent extends Event { private static final String EVENT_NAME = "topSelect"; private final int position; - public ToolbarClickEvent(Object viewTag, int position) { - super(viewTag); + public ToolbarClickEvent(int viewId, int position) { + super(viewId); this.position = position; } diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/viewpager/PageScrollEvent.java b/ReactAndroid/src/main/java/com/facebook/react/views/viewpager/PageScrollEvent.java index beeed709227015..6eeac56d747ba1 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/viewpager/PageScrollEvent.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/viewpager/PageScrollEvent.java @@ -31,14 +31,13 @@ private final int mPosition; private final float mOffset; - protected PageScrollEvent(Object viewTag, int position, float offset) { + protected PageScrollEvent(int viewTag, int position, float offset) { super(viewTag); mPosition = position; - mOffset = getOffset(offset); - } - private float getOffset(float offset) { - return (Float.isInfinite(offset) || Float.isNaN(offset)) ? 0.0f : offset; + // folly::toJson default options don't support serialize NaN or Infinite value + mOffset = (Float.isInfinite(offset) || Float.isNaN(offset)) + ? 0.0f : offset; } @Override diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/viewpager/PageScrollStateChangedEvent.java b/ReactAndroid/src/main/java/com/facebook/react/views/viewpager/PageScrollStateChangedEvent.java index cc7782d069c3d1..d3a5a7c4a10302 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/viewpager/PageScrollStateChangedEvent.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/viewpager/PageScrollStateChangedEvent.java @@ -26,7 +26,7 @@ class PageScrollStateChangedEvent extends Event { private final String mPageScrollState; - protected PageScrollStateChangedEvent(Object viewTag, String pageScrollState) { + protected PageScrollStateChangedEvent(int viewTag, String pageScrollState) { super(viewTag); mPageScrollState = pageScrollState; } diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/viewpager/PageSelectedEvent.java b/ReactAndroid/src/main/java/com/facebook/react/views/viewpager/PageSelectedEvent.java index 2f1dac0a8ea2b7..6145c08230bcc2 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/viewpager/PageSelectedEvent.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/viewpager/PageSelectedEvent.java @@ -26,7 +26,7 @@ private final int mPosition; - protected PageSelectedEvent(Object viewTag, int position) { + protected PageSelectedEvent(int viewTag, int position) { super(viewTag); mPosition = position; } 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 ed379aadf456c7..76417a3a3ad581 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 @@ -23,6 +23,8 @@ import com.facebook.react.uimanager.events.EventDispatcher; import com.facebook.react.uimanager.events.NativeGestureUtil; +import static com.facebook.react.common.ViewHelperMethods.reactTagFrom; + /** * Wrapper view for {@link ViewPager}. It's forwarding calls to {@link ViewGroup#addView} to add * views to custom {@link PagerAdapter} instance which is used by {@link NativeViewHierarchyManager} @@ -123,14 +125,14 @@ private class PageChangeListener implements OnPageChangeListener { @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { mEventDispatcher.dispatchEvent( - new PageScrollEvent(getTag(), position, positionOffset)); + new PageScrollEvent(getReactTag(), position, positionOffset)); } @Override public void onPageSelected(int position) { if (!mIsCurrentItemFromJs) { mEventDispatcher.dispatchEvent( - new PageSelectedEvent(getTag(), position)); + new PageSelectedEvent(getReactTag(), position)); } } @@ -151,10 +153,14 @@ public void onPageScrollStateChanged(int state) { throw new IllegalStateException("Unsupported pageScrollState"); } mEventDispatcher.dispatchEvent( - new PageScrollStateChangedEvent(getTag(), pageScrollState)); + new PageScrollStateChangedEvent(getReactTag(), pageScrollState)); } } + private int getReactTag() { + return reactTagFrom(this); + } + private final EventDispatcher mEventDispatcher; private boolean mIsCurrentItemFromJs; private boolean mScrollEnabled = true; 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 c7e2cd2af8eaaf..096aad34f9c9a9 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 @@ -128,7 +128,7 @@ public void onPageStarted(WebView webView, String url, Bitmap favicon) { dispatchEvent( webView, new TopLoadingStartEvent( - webView.getTag(), + reactTagFrom(webView), createWebViewEvent(webView, url))); } @@ -164,7 +164,7 @@ public void onReceivedError( dispatchEvent( webView, - new TopLoadingErrorEvent(webView.getTag(), eventData)); + new TopLoadingErrorEvent(reactTagFrom(webView), eventData)); } @Override @@ -174,7 +174,7 @@ public void doUpdateVisitedHistory(WebView webView, String url, boolean isReload dispatchEvent( webView, new TopLoadingStartEvent( - webView.getTag(), + reactTagFrom(webView), createWebViewEvent(webView, url))); } @@ -182,7 +182,7 @@ private void emitFinishEvent(WebView webView, String url) { dispatchEvent( webView, new TopLoadingFinishEvent( - webView.getTag(), + reactTagFrom(webView), createWebViewEvent(webView, url))); } @@ -514,7 +514,7 @@ public void onNewPicture(WebView webView, Picture picture) { dispatchEvent( webView, new ContentSizeChangeEvent( - webView.getTag(), + reactTagFrom(webView), webView.getWidth(), webView.getContentHeight())); } diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/webview/events/TopLoadingErrorEvent.java b/ReactAndroid/src/main/java/com/facebook/react/views/webview/events/TopLoadingErrorEvent.java index fc12027cb82cd2..795b29f69a4533 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/webview/events/TopLoadingErrorEvent.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/webview/events/TopLoadingErrorEvent.java @@ -21,8 +21,8 @@ public class TopLoadingErrorEvent extends Event { public static final String EVENT_NAME = "topLoadingError"; private WritableMap mEventData; - public TopLoadingErrorEvent(Object viewTag, WritableMap eventData) { - super(viewTag); + public TopLoadingErrorEvent(int viewId, WritableMap eventData) { + super(viewId); mEventData = eventData; } diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/webview/events/TopLoadingFinishEvent.java b/ReactAndroid/src/main/java/com/facebook/react/views/webview/events/TopLoadingFinishEvent.java index f7b34f8ad9799e..e858fbc176dff9 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/webview/events/TopLoadingFinishEvent.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/webview/events/TopLoadingFinishEvent.java @@ -21,8 +21,8 @@ public class TopLoadingFinishEvent extends Event { public static final String EVENT_NAME = "topLoadingFinish"; private WritableMap mEventData; - public TopLoadingFinishEvent(Object viewTag, WritableMap eventData) { - super(viewTag); + public TopLoadingFinishEvent(int viewId, WritableMap eventData) { + super(viewId); mEventData = eventData; } diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/webview/events/TopLoadingStartEvent.java b/ReactAndroid/src/main/java/com/facebook/react/views/webview/events/TopLoadingStartEvent.java index 61e15163dd35bd..171cf6e6515712 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/webview/events/TopLoadingStartEvent.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/webview/events/TopLoadingStartEvent.java @@ -21,8 +21,8 @@ public class TopLoadingStartEvent extends Event { public static final String EVENT_NAME = "topLoadingStart"; private WritableMap mEventData; - public TopLoadingStartEvent(Object viewTag, WritableMap eventData) { - super(viewTag); + public TopLoadingStartEvent(int viewId, WritableMap eventData) { + super(viewId); mEventData = eventData; } diff --git a/ReactAndroid/src/test/java/com/facebook/react/animated/NativeAnimatedNodeTraversalTest.java b/ReactAndroid/src/test/java/com/facebook/react/animated/NativeAnimatedNodeTraversalTest.java index 51f4b55ed5a4d5..6c46fb2089cbc7 100644 --- a/ReactAndroid/src/test/java/com/facebook/react/animated/NativeAnimatedNodeTraversalTest.java +++ b/ReactAndroid/src/test/java/com/facebook/react/animated/NativeAnimatedNodeTraversalTest.java @@ -39,6 +39,7 @@ import org.powermock.modules.junit4.rule.PowerMockRule; import org.robolectric.RobolectricTestRunner; +import static com.facebook.react.common.ViewHelperMethods.reactTagFrom; import static org.fest.assertions.api.Assertions.assertThat; import static org.mockito.Matchers.any; import static org.mockito.Matchers.anyInt; @@ -81,7 +82,7 @@ private long nextFrameTime() { @Before public void setUp() { MockitoAnnotations.initMocks(this); - when(view.getTag()).thenReturn(viewTag); + when(reactTagFrom(view)).thenReturn(viewTag); PowerMockito.mockStatic(Arguments.class); PowerMockito.when(Arguments.createArray()).thenAnswer(new Answer() { @Override @@ -737,7 +738,7 @@ public void testInterpolationNode() { } private Event createScrollEvent(final View view, final double value) { - return new Event(view.getTag()) { + return new Event(reactTagFrom(view)) { @Override public String getEventName() { return "topScroll"; diff --git a/ReactAndroid/src/test/java/com/facebook/react/uimanager/UIManagerModuleTest.java b/ReactAndroid/src/test/java/com/facebook/react/uimanager/UIManagerModuleTest.java index c5390be3a13579..aeb0da07289131 100644 --- a/ReactAndroid/src/test/java/com/facebook/react/uimanager/UIManagerModuleTest.java +++ b/ReactAndroid/src/test/java/com/facebook/react/uimanager/UIManagerModuleTest.java @@ -48,6 +48,7 @@ import org.robolectric.RobolectricTestRunner; import org.robolectric.RuntimeEnvironment; +import static com.facebook.react.common.ViewHelperMethods.reactTagFrom; import static org.fest.assertions.api.Assertions.assertThat; import static org.mockito.Matchers.any; import static org.mockito.Mockito.doAnswer; @@ -483,22 +484,22 @@ public void testTagsAssignment() { TestMoveDeleteHierarchy hierarchy = createMoveDeleteHierarchy(uiManager); View view0 = hierarchy.nativeRootView.getChildAt(0); - assertThat(view0.getTag()).isEqualTo(hierarchy.view0); + assertThat(reactTagFrom(view0)).isEqualTo(hierarchy.view0); View viewWithChildren1 = hierarchy.nativeRootView.getChildAt(1); - assertThat(viewWithChildren1.getTag()).isEqualTo(hierarchy.viewWithChildren1); + assertThat(reactTagFrom(viewWithChildren1)).isEqualTo(hierarchy.viewWithChildren1); View childView0 = ((ViewGroup) viewWithChildren1).getChildAt(0); - assertThat(childView0.getTag()).isEqualTo(hierarchy.childView0); + assertThat(reactTagFrom(childView0)).isEqualTo(hierarchy.childView0); View childView1 = ((ViewGroup) viewWithChildren1).getChildAt(1); - assertThat(childView1.getTag()).isEqualTo(hierarchy.childView1); + assertThat(reactTagFrom(childView1)).isEqualTo(hierarchy.childView1); View view2 = hierarchy.nativeRootView.getChildAt(2); - assertThat(view2.getTag()).isEqualTo(hierarchy.view2); + assertThat(reactTagFrom(view2)).isEqualTo(hierarchy.view2); View view3 = hierarchy.nativeRootView.getChildAt(3); - assertThat(view3.getTag()).isEqualTo(hierarchy.view3); + assertThat(reactTagFrom(view3)).isEqualTo(hierarchy.view3); } @Test From b06afbb567681fa7f137f37758bb1321d4a01270 Mon Sep 17 00:00:00 2001 From: jsdevel Date: Tue, 25 Oct 2016 22:51:02 -0700 Subject: [PATCH 5/6] PR feedback. * Fixing some nits. * Removing unused javadoc param/return. * Naming. --- Libraries/Components/View/View.js | 6 +-- .../tests/CatalystUIManagerTestCase.java | 13 +++---- .../react/tests/TextInputTestCase.java | 14 +++---- .../react/XReactInstanceManagerImpl.java | 4 +- .../com/facebook/react/common/TestIdUtil.java | 38 +++++++------------ ...elperMethods.java => ViewMethodsUtil.java} | 9 ++--- .../react/touch/JSResponderHandler.java | 4 +- .../uimanager/NativeViewHierarchyManager.java | 21 ++++------ .../react/uimanager/TouchTargetHelper.java | 12 +++--- .../drawer/ReactDrawerLayoutManager.java | 10 ++--- .../react/views/image/ReactImageView.java | 4 +- .../views/modal/ReactModalHostManager.java | 6 +-- .../react/views/modal/ReactModalHostView.java | 4 +- .../views/picker/ReactPickerManager.java | 4 +- .../RecyclerViewBackedScrollView.java | 8 ++-- .../views/scroll/ReactScrollViewHelper.java | 4 +- .../views/slider/ReactSliderManager.java | 6 +-- .../SwipeRefreshLayoutManager.java | 4 +- .../views/switchview/ReactSwitchManager.java | 4 +- .../react/views/text/ReactTextView.java | 4 +- .../textinput/ReactTextInputManager.java | 19 +++++----- .../views/toolbar/ReactToolbarManager.java | 6 +-- .../react/views/viewpager/ReactViewPager.java | 4 +- .../views/webview/ReactWebViewManager.java | 14 +++---- .../NativeAnimatedNodeTraversalTest.java | 6 +-- .../react/uimanager/UIManagerModuleTest.java | 14 +++---- 26 files changed, 111 insertions(+), 131 deletions(-) rename ReactAndroid/src/main/java/com/facebook/react/common/{ViewHelperMethods.java => ViewMethodsUtil.java} (66%) diff --git a/Libraries/Components/View/View.js b/Libraries/Components/View/View.js index baedafaf1bcd47..cbe791c0d19854 100644 --- a/Libraries/Components/View/View.js +++ b/Libraries/Components/View/View.js @@ -272,16 +272,16 @@ const View = React.createClass({ * 1. Defining a resource id in your android project's `res` folder (typically at * `./android/app/src/main/res/values/ids.xml`). * - * 2. Adding your resource ids to `ids.xml` E.G. + * 2. Adding your resource ids to `ids.xml` e.g. * * ```xml * * - * + * * * * ``` - * 3. Using the resource id as `testID` E.G. ``. + * 3. Using the resource id as `testID` e.g. ``. * */ testID: PropTypes.string, diff --git a/ReactAndroid/src/androidTest/java/com/facebook/react/tests/CatalystUIManagerTestCase.java b/ReactAndroid/src/androidTest/java/com/facebook/react/tests/CatalystUIManagerTestCase.java index 0c66146c04db3e..7c362e4a2d96c1 100644 --- a/ReactAndroid/src/androidTest/java/com/facebook/react/tests/CatalystUIManagerTestCase.java +++ b/ReactAndroid/src/androidTest/java/com/facebook/react/tests/CatalystUIManagerTestCase.java @@ -23,7 +23,6 @@ import com.facebook.react.bridge.UiThreadUtil; import com.facebook.react.modules.systeminfo.AndroidInfoModule; import com.facebook.react.uimanager.PixelUtil; -import com.facebook.react.uimanager.UIImplementation; import com.facebook.react.uimanager.UIImplementationProvider; import com.facebook.react.uimanager.UIManagerModule; import com.facebook.react.uimanager.ViewManager; @@ -34,7 +33,7 @@ import com.facebook.react.testing.ReactIntegrationTestCase; import com.facebook.react.testing.ReactTestHelper; -import static com.facebook.react.common.ViewHelperMethods.reactTagFrom; +import static com.facebook.react.common.ViewMethodsUtil.reactTagFor; /** * Test case for basic {@link UIManagerModule} functionality. @@ -104,7 +103,7 @@ public void run() { public void testFlexUIRendered() { FrameLayout rootView = createRootView(); - jsModule.renderFlexTestApplication(reactTagFrom(rootView)); + jsModule.renderFlexTestApplication(reactTagFor(rootView)); waitForBridgeAndUIIdle(); assertEquals(1, rootView.getChildCount()); @@ -128,7 +127,7 @@ public void testFlexUIRendered() { // Find what could be different and make the test independent of env // public void testFlexWithTextViews() { // FrameLayout rootView = createRootView(); - // jsModule.renderFlexWithTextApplication(reactTagFrom(rootView)); + // jsModule.renderFlexWithTextApplication(reactTagFor(rootView)); // waitForBridgeAndUIIdle(); // // assertEquals(1, rootView.getChildCount()); @@ -166,7 +165,7 @@ public void testFlexUIRendered() { public void testAbsolutePositionUIRendered() { FrameLayout rootView = createRootView(); - jsModule.renderAbsolutePositionTestApplication(reactTagFrom(rootView)); + jsModule.renderAbsolutePositionTestApplication(reactTagFor(rootView)); waitForBridgeAndUIIdle(); assertEquals(1, rootView.getChildCount()); @@ -180,7 +179,7 @@ public void testAbsolutePositionUIRendered() { public void testUpdatePositionInList() { FrameLayout rootView = createRootView(); - jsModule.renderUpdatePositionInListTestApplication(reactTagFrom(rootView)); + jsModule.renderUpdatePositionInListTestApplication(reactTagFor(rootView)); waitForBridgeAndUIIdle(); ViewGroup containerView = getViewByTestId(rootView, "container"); @@ -209,7 +208,7 @@ public void testUpdatePositionInList() { public void testAbsolutePositionBottomRightUIRendered() { FrameLayout rootView = createRootView(); - jsModule.renderAbsolutePositionBottomRightTestApplication(reactTagFrom(rootView)); + jsModule.renderAbsolutePositionBottomRightTestApplication(reactTagFor(rootView)); waitForBridgeAndUIIdle(); assertEquals(1, rootView.getChildCount()); 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 99ebcd3865a52f..20e2a73d93c901 100644 --- a/ReactAndroid/src/androidTest/java/com/facebook/react/tests/TextInputTestCase.java +++ b/ReactAndroid/src/androidTest/java/com/facebook/react/tests/TextInputTestCase.java @@ -25,7 +25,7 @@ import com.facebook.react.views.textinput.ReactTextChangedEvent; import com.facebook.react.views.textinput.ReactTextInputEvent; -import static com.facebook.react.common.ViewHelperMethods.reactTagFrom; +import static com.facebook.react.common.ViewMethodsUtil.reactTagFor; /** * Test to verify that TextInput renders correctly @@ -116,7 +116,7 @@ public void testMetionsInputColors() throws Throwable { eventDispatcher.dispatchEvent( new ReactTextChangedEvent( - reactTagFrom(reactEditText), + reactTagFor(reactEditText), newText.toString(), (int) PixelUtil.toDIPFromPixel(contentWidth), (int) PixelUtil.toDIPFromPixel(contentHeight), @@ -124,7 +124,7 @@ public void testMetionsInputColors() throws Throwable { eventDispatcher.dispatchEvent( new ReactTextInputEvent( - reactTagFrom(reactEditText), + reactTagFor(reactEditText), newText.toString(), "", start, @@ -148,7 +148,7 @@ public void testMetionsInputColors() throws Throwable { eventDispatcher.dispatchEvent( new ReactTextChangedEvent( - reactTagFrom(reactEditText), + reactTagFor(reactEditText), newText.toString(), (int) PixelUtil.toDIPFromPixel(contentWidth), (int) PixelUtil.toDIPFromPixel(contentHeight), @@ -156,7 +156,7 @@ public void testMetionsInputColors() throws Throwable { eventDispatcher.dispatchEvent( new ReactTextInputEvent( - reactTagFrom(reactEditText), + reactTagFor(reactEditText), moreText, "", start, @@ -180,7 +180,7 @@ public void testMetionsInputColors() throws Throwable { eventDispatcher.dispatchEvent( new ReactTextChangedEvent( - reactTagFrom(reactEditText), + reactTagFor(reactEditText), newText.toString(), (int) PixelUtil.toDIPFromPixel(contentWidth), (int) PixelUtil.toDIPFromPixel(contentHeight), @@ -188,7 +188,7 @@ public void testMetionsInputColors() throws Throwable { eventDispatcher.dispatchEvent( new ReactTextInputEvent( - reactTagFrom(reactEditText), + reactTagFor(reactEditText), moreText, "", start, diff --git a/ReactAndroid/src/main/java/com/facebook/react/XReactInstanceManagerImpl.java b/ReactAndroid/src/main/java/com/facebook/react/XReactInstanceManagerImpl.java index 9ea52772d069e1..85b280b5c2090c 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/XReactInstanceManagerImpl.java +++ b/ReactAndroid/src/main/java/com/facebook/react/XReactInstanceManagerImpl.java @@ -88,7 +88,7 @@ import static com.facebook.react.bridge.ReactMarkerConstants.PROCESS_PACKAGES_START; import static com.facebook.react.bridge.ReactMarkerConstants.SETUP_REACT_CONTEXT_END; import static com.facebook.react.bridge.ReactMarkerConstants.SETUP_REACT_CONTEXT_START; -import static com.facebook.react.common.ViewHelperMethods.reactTagFrom; +import static com.facebook.react.common.ViewMethodsUtil.reactTagFor; import static com.facebook.systrace.Systrace.TRACE_TAG_REACT_JAVA_BRIDGE; /** @@ -819,7 +819,7 @@ private void detachViewFromInstance( CatalystInstance catalystInstance) { UiThreadUtil.assertOnUiThread(); catalystInstance.getJSModule(AppRegistry.class) - .unmountApplicationComponentAtRootTag(reactTagFrom(rootView)); + .unmountApplicationComponentAtRootTag(reactTagFor(rootView)); } private void tearDownReactContext(ReactContext reactContext) { diff --git a/ReactAndroid/src/main/java/com/facebook/react/common/TestIdUtil.java b/ReactAndroid/src/main/java/com/facebook/react/common/TestIdUtil.java index d9fc2352719cae..ab3b9cf3392614 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/common/TestIdUtil.java +++ b/ReactAndroid/src/main/java/com/facebook/react/common/TestIdUtil.java @@ -7,33 +7,29 @@ import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.atomic.AtomicInteger; -/** - * Utility methods for managing testIDs. - */ public class TestIdUtil { - private static final ConcurrentHashMap TEST_IDS = new ConcurrentHashMap<>(); - private static final int STARTING_INTERNAL_ID = 10; - private static final AtomicInteger INTERNAL_ID = new AtomicInteger(STARTING_INTERNAL_ID); + private static final ConcurrentHashMap mTestIds = new ConcurrentHashMap<>(); + // Integer values in R.class are typically great in value. Ids need to be greater than 0 to be + // useful, so setting this to 10. + private static final int mStartingInternalId = 10; + private static final AtomicInteger mInternalId = new AtomicInteger(mStartingInternalId); /** * Looks for defined resource IDs in R.class by the name of testId and if a matching resource ID is * found it is passed to the view's setId method. If the given testId cannot be found in R.class, * an internal increment value is assigned instead. - * - * @param view - * @param testId - * @param */ public static void setTestId(T view, String testId) { int mappedTestId; - if (!TEST_IDS.containsKey(testId)) { + if (!mTestIds.containsKey(testId)) { mappedTestId = view.getResources().getIdentifier(testId, "id", view.getContext().getPackageName()); - if (mappedTestId <= 0) { - mappedTestId = INTERNAL_ID.getAndIncrement(); + final boolean idNotFoundInResources = mappedTestId <= 0; + if (idNotFoundInResources) { + mappedTestId = mInternalId.getAndIncrement(); } - TEST_IDS.put(testId, mappedTestId); + mTestIds.put(testId, mappedTestId); } else { - mappedTestId = TEST_IDS.get(testId); + mappedTestId = mTestIds.get(testId); } if (mappedTestId != 0 && view.getId() != mappedTestId) { @@ -45,21 +41,15 @@ public static void setTestId(T view, String testId) { * Used for internal e2e tests that do not yet have testIDs stored in ids.xml. It is strongly * advised that you reference ids that have been generated in R.class to avoid collisions and * to properly support UIAutomatorViewer. - * - * @param testId - * @return */ @VisibleForTesting public static int getTestId(String testId) { - return TEST_IDS.containsKey(testId) ? TEST_IDS.get(testId) : View.NO_ID; + return mTestIds.containsKey(testId) ? mTestIds.get(testId) : View.NO_ID; } - /** - * Used by tests to clear the static member Maps. - */ @VisibleForTesting public static void resetTestState() { - TEST_IDS.clear(); - INTERNAL_ID.set(STARTING_INTERNAL_ID); + mTestIds.clear(); + mInternalId.set(mStartingInternalId); } } diff --git a/ReactAndroid/src/main/java/com/facebook/react/common/ViewHelperMethods.java b/ReactAndroid/src/main/java/com/facebook/react/common/ViewMethodsUtil.java similarity index 66% rename from ReactAndroid/src/main/java/com/facebook/react/common/ViewHelperMethods.java rename to ReactAndroid/src/main/java/com/facebook/react/common/ViewMethodsUtil.java index 8fe7e19ee1f9d0..07f01191df4cc2 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/common/ViewHelperMethods.java +++ b/ReactAndroid/src/main/java/com/facebook/react/common/ViewMethodsUtil.java @@ -3,18 +3,15 @@ import android.view.View; /** - * Various helper methods for {@link View} + * Various utility methods for {@link View}. */ -public class ViewHelperMethods { +public class ViewMethodsUtil { /** * Returns the react tag for the view. If no react tag has been set then {@link View#NO_ID} is * returned. - * - * @param view - * @return */ - public static int reactTagFrom(View view) { + public static int reactTagFor(View view) { return view == null || view.getTag() == null ? View.NO_ID : (int) view.getTag(); diff --git a/ReactAndroid/src/main/java/com/facebook/react/touch/JSResponderHandler.java b/ReactAndroid/src/main/java/com/facebook/react/touch/JSResponderHandler.java index bf1d56fdfd7372..72f0f3cc0c35ce 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/touch/JSResponderHandler.java +++ b/ReactAndroid/src/main/java/com/facebook/react/touch/JSResponderHandler.java @@ -15,7 +15,7 @@ import android.view.ViewGroup; import android.view.ViewParent; -import static com.facebook.react.common.ViewHelperMethods.reactTagFrom; +import static com.facebook.react.common.ViewMethodsUtil.reactTagFor; /** * This class coordinates JSResponder commands for {@link UIManagerModule}. It should be set as @@ -72,7 +72,7 @@ public boolean onInterceptTouchEvent(ViewGroup v, MotionEvent event) { // Therefore since "UP" event is the last event in a gesture, we should just let it reach the // original target that is a child view of {@param v}. // http://developer.android.com/reference/android/view/ViewGroup.html#onInterceptTouchEvent(android.view.MotionEvent) - return reactTagFrom(v) == currentJSResponder; + return reactTagFor(v) == currentJSResponder; } return false; } diff --git a/ReactAndroid/src/main/java/com/facebook/react/uimanager/NativeViewHierarchyManager.java b/ReactAndroid/src/main/java/com/facebook/react/uimanager/NativeViewHierarchyManager.java index c084312312d86a..c6d148b226650f 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/uimanager/NativeViewHierarchyManager.java +++ b/ReactAndroid/src/main/java/com/facebook/react/uimanager/NativeViewHierarchyManager.java @@ -31,7 +31,7 @@ import com.facebook.react.bridge.ReadableMap; import com.facebook.react.bridge.SoftAssertions; import com.facebook.react.bridge.UiThreadUtil; -import com.facebook.react.common.TestIdUtil; +import com.facebook.react.common.ViewMethodsUtil; import com.facebook.react.touch.JSResponderHandler; import com.facebook.react.uimanager.layoutanimation.LayoutAnimationController; import com.facebook.react.uimanager.layoutanimation.LayoutAnimationListener; @@ -41,7 +41,7 @@ import javax.annotation.Nullable; import javax.annotation.concurrent.NotThreadSafe; -import static com.facebook.react.common.ViewHelperMethods.reactTagFrom; +import static com.facebook.react.common.ViewMethodsUtil.reactTagFor; /** * Delegate of {@link UIManagerModule} that owns the native view hierarchy and mapping between @@ -207,15 +207,10 @@ private void updateLayout(View viewToUpdate, int x, int y, int width, int height * Creates a {@link View} and adds it to a corresponding {@link ViewManager}. * * The tag (a.k.a. React Tag) is saved with {@link View#setTag(Object)}. It is necessary to use - * {@link com.facebook.react.common.ViewHelperMethods#reactTagFrom(View)} wherever the original + * {@link ViewMethodsUtil#reactTagFor(View)} wherever the original * tag is needed e.g. when communicating with the Shadow DOM or with JS about a particular react * tag. - * - * @param themedContext - * @param tag - * @param className - * @param initialProps - */ + */ public void createView( ThemedReactContext themedContext, int tag, @@ -377,7 +372,7 @@ public void manageChildren( if (mLayoutAnimationEnabled && mLayoutAnimator.shouldAnimateLayout(viewToRemove) && - arrayContains(tagsToDelete, reactTagFrom(viewToRemove))) { + arrayContains(tagsToDelete, reactTagFor(viewToRemove))) { // The view will be removed and dropped by the 'delete' layout animation // instead, so do nothing } else { @@ -513,7 +508,7 @@ protected final void addRootViewGroup( ViewGroup view, ThemedReactContext themedContext) { UiThreadUtil.assertOnUiThread(); - if (reactTagFrom(view) != View.NO_ID) { + if (reactTagFor(view) != View.NO_ID) { throw new IllegalViewOperationException( "Trying to add a root view with an explicit id already set. React Native uses " + "the id field to track react tags and will overwrite this field. If that is fine, " + @@ -531,7 +526,7 @@ protected final void addRootViewGroup( */ protected void dropView(View view) { UiThreadUtil.assertOnUiThread(); - int originalReactTag = reactTagFrom(view); + int originalReactTag = reactTagFor(view); if (!mRootTags.get(originalReactTag)) { // For non-root views we notify viewmanager with {@link ViewManager#onDropInstance} resolveViewManager(originalReactTag).onDropViewInstance(view); @@ -542,7 +537,7 @@ protected void dropView(View view) { ViewGroupManager viewGroupManager = (ViewGroupManager) viewManager; for (int i = viewGroupManager.getChildCount(viewGroup) - 1; i >= 0; i--) { View child = viewGroupManager.getChildAt(viewGroup, i); - if (mTagsToViews.get(reactTagFrom(child)) != null) { + if (mTagsToViews.get(reactTagFor(child)) != null) { dropView(child); } } diff --git a/ReactAndroid/src/main/java/com/facebook/react/uimanager/TouchTargetHelper.java b/ReactAndroid/src/main/java/com/facebook/react/uimanager/TouchTargetHelper.java index 7358937eea4135..9662ba295d3260 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/uimanager/TouchTargetHelper.java +++ b/ReactAndroid/src/main/java/com/facebook/react/uimanager/TouchTargetHelper.java @@ -22,7 +22,7 @@ import com.facebook.react.bridge.UiThreadUtil; import com.facebook.react.touch.ReactHitSlopView; -import static com.facebook.react.common.ViewHelperMethods.reactTagFrom; +import static com.facebook.react.common.ViewMethodsUtil.reactTagFor; /** * Class responsible for identifying which react view should handle a given {@link MotionEvent}. @@ -89,7 +89,7 @@ public static int findTargetTagAndCoordinatesForTouch( float[] viewCoords, @Nullable int[] nativeViewTag) { UiThreadUtil.assertOnUiThread(); - int targetTag = reactTagFrom(viewGroup); + int targetTag = reactTagFor(viewGroup); // Store eventCoords in array so that they are modified to be relative to the targetView found. viewCoords[0] = eventX; viewCoords[1] = eventY; @@ -98,7 +98,7 @@ public static int findTargetTagAndCoordinatesForTouch( View reactTargetView = findClosestReactAncestor(nativeTargetView); if (reactTargetView != null) { if (nativeViewTag != null) { - nativeViewTag[0] = reactTagFrom(reactTargetView); + nativeViewTag[0] = reactTagFor(reactTargetView); } targetTag = getTouchTargetForView(reactTargetView, viewCoords[0], viewCoords[1]); } @@ -107,7 +107,7 @@ public static int findTargetTagAndCoordinatesForTouch( } private static View findClosestReactAncestor(View view) { - while (view != null && reactTagFrom(view) <= 0) { + while (view != null && reactTagFor(view) <= 0) { view = (View) view.getParent(); } return view; @@ -226,7 +226,7 @@ private static boolean isTransformedTouchPointInView( // ViewGroup). if (view instanceof ReactCompoundView) { int reactTag = ((ReactCompoundView)view).reactTagForTouch(eventCoords[0], eventCoords[1]); - if (reactTag != reactTagFrom(view)) { + if (reactTag != reactTagFor(view)) { // make sure we exclude the View itself because of the PointerEvents.BOX_NONE return view; } @@ -258,7 +258,7 @@ private static int getTouchTargetForView(View targetView, float eventX, float ev // {@link #findTouchTargetView()}. return ((ReactCompoundView) targetView).reactTagForTouch(eventX, eventY); } - return reactTagFrom(targetView); + return reactTagFor(targetView); } } 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 f63cf3cd838c37..05e88008ddf134 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 @@ -36,7 +36,7 @@ import com.facebook.react.views.drawer.events.DrawerSlideEvent; import com.facebook.react.views.drawer.events.DrawerStateChangedEvent; -import static com.facebook.react.common.ViewHelperMethods.reactTagFrom; +import static com.facebook.react.common.ViewMethodsUtil.reactTagFor; /** * View Manager for {@link ReactDrawerLayout} components. @@ -189,25 +189,25 @@ public DrawerEventEmitter(DrawerLayout drawerLayout, EventDispatcher eventDispat @Override public void onDrawerSlide(View view, float v) { mEventDispatcher.dispatchEvent( - new DrawerSlideEvent(reactTagFrom(mDrawerLayout), v)); + new DrawerSlideEvent(reactTagFor(mDrawerLayout), v)); } @Override public void onDrawerOpened(View view) { mEventDispatcher.dispatchEvent( - new DrawerOpenedEvent(reactTagFrom(mDrawerLayout))); + new DrawerOpenedEvent(reactTagFor(mDrawerLayout))); } @Override public void onDrawerClosed(View view) { mEventDispatcher.dispatchEvent( - new DrawerClosedEvent(reactTagFrom(mDrawerLayout))); + new DrawerClosedEvent(reactTagFor(mDrawerLayout))); } @Override public void onDrawerStateChanged(int i) { mEventDispatcher.dispatchEvent( - new DrawerStateChangedEvent(reactTagFrom(mDrawerLayout), i)); + new DrawerStateChangedEvent(reactTagFor(mDrawerLayout), 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 11891cd78b4d79..62b045d5f72dfb 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 @@ -59,7 +59,7 @@ import com.facebook.react.views.imagehelper.ResourceDrawableIdHelper; import com.facebook.react.views.imagehelper.MultiSourceHelper.MultiSourceResult; -import static com.facebook.react.common.ViewHelperMethods.reactTagFrom; +import static com.facebook.react.common.ViewMethodsUtil.reactTagFor; /** * Wrapper class around Fresco's GenericDraweeView, enabling persisting props across multiple view @@ -225,7 +225,7 @@ public void onFailure(String id, Throwable throwable) { } private int getReactTag() { - return reactTagFrom(this); + return reactTagFor(this); } public void setBorderColor(int borderColor) { 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 485099449fc80a..113701e3dfa5c0 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 @@ -22,7 +22,7 @@ import com.facebook.react.uimanager.annotations.ReactProp; import com.facebook.react.uimanager.events.EventDispatcher; -import static com.facebook.react.common.ViewHelperMethods.reactTagFrom; +import static com.facebook.react.common.ViewMethodsUtil.reactTagFor; /** * View manager for {@link ReactModalHostView} components. @@ -78,14 +78,14 @@ protected void addEventEmitters( new ReactModalHostView.OnRequestCloseListener() { @Override public void onRequestClose(DialogInterface dialog) { - dispatcher.dispatchEvent(new RequestCloseEvent(reactTagFrom(view))); + dispatcher.dispatchEvent(new RequestCloseEvent(reactTagFor(view))); } }); view.setOnShowListener( new DialogInterface.OnShowListener() { @Override public void onShow(DialogInterface dialog) { - dispatcher.dispatchEvent(new ShowEvent(reactTagFrom(view))); + dispatcher.dispatchEvent(new ShowEvent(reactTagFor(view))); } }); } diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/modal/ReactModalHostView.java b/ReactAndroid/src/main/java/com/facebook/react/views/modal/ReactModalHostView.java index 94f9ee90e6bf67..54b2a3978ab943 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/modal/ReactModalHostView.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/modal/ReactModalHostView.java @@ -36,7 +36,7 @@ import com.facebook.react.uimanager.events.EventDispatcher; import com.facebook.react.views.view.ReactViewGroup; -import static com.facebook.react.common.ViewHelperMethods.reactTagFrom; +import static com.facebook.react.common.ViewMethodsUtil.reactTagFor; /** * ReactModalHostView is a view that sits in the view hierarchy representing a Modal view. @@ -301,7 +301,7 @@ protected void onSizeChanged(final int w, final int h, int oldw, int oldh) { @Override public void run() { ((ReactContext) getContext()).getNativeModule(UIManagerModule.class) - .updateNodeSize(reactTagFrom(getChildAt(0)), w, h); + .updateNodeSize(reactTagFor(getChildAt(0)), w, h); } }); } 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 437213db82d33f..a6d2af492c3dce 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 @@ -30,7 +30,7 @@ import com.facebook.react.uimanager.events.EventDispatcher; import com.facebook.react.views.picker.events.PickerItemSelectEvent; -import static com.facebook.react.common.ViewHelperMethods.reactTagFrom; +import static com.facebook.react.common.ViewMethodsUtil.reactTagFor; /** * {@link ViewManager} for the {@link ReactPicker} view. This is abstract because the @@ -158,7 +158,7 @@ public PickerEventEmitter(ReactPicker reactPicker, EventDispatcher eventDispatch @Override public void onItemSelected(int position) { mEventDispatcher.dispatchEvent( new PickerItemSelectEvent( - reactTagFrom(mReactPicker), position)); + reactTagFor(mReactPicker), 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 88043e5d3e65a9..9d58d66396ecd3 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 @@ -22,7 +22,7 @@ import com.facebook.react.views.scroll.ScrollEvent; import com.facebook.react.views.scroll.ScrollEventType; -import static com.facebook.react.common.ViewHelperMethods.reactTagFrom; +import static com.facebook.react.common.ViewMethodsUtil.reactTagFor; /** * Wraps {@link RecyclerView} providing interface similar to `ScrollView.js` where each children @@ -298,7 +298,7 @@ public int getItemCount() { @Override public long getItemId(int position) { // this should return the view's actual ID to work properly with the view we're extending. - return reactTagFrom(mViews.get(position)); + return reactTagFor(mViews.get(position)); } public View getView(int index) { @@ -346,7 +346,7 @@ protected void onScrollChanged(int l, int t, int oldl, int oldt) { ((ReactContext) getContext()).getNativeModule(UIManagerModule.class).getEventDispatcher() .dispatchEvent(ScrollEvent.obtain( - reactTagFrom(this), + reactTagFor(this), ScrollEventType.SCROLL, 0, /* offsetX = 0, horizontal scrolling only */ calculateAbsoluteOffset(), @@ -360,7 +360,7 @@ private void onTotalChildrenHeightChange(int newTotalChildrenHeight) { if (mSendContentSizeChangeEvents) { ((ReactContext) getContext()).getNativeModule(UIManagerModule.class).getEventDispatcher() .dispatchEvent(new ContentSizeChangeEvent( - reactTagFrom(this), + reactTagFor(this), 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 839dbdaaf54e8a..5f955a0d9e2de2 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 @@ -15,7 +15,7 @@ import com.facebook.react.bridge.ReactContext; import com.facebook.react.uimanager.UIManagerModule; -import static com.facebook.react.common.ViewHelperMethods.reactTagFrom; +import static com.facebook.react.common.ViewMethodsUtil.reactTagFor; /** * Helper class that deals with emitting Scroll Events. @@ -57,7 +57,7 @@ private static void emitScrollEvent(ViewGroup scrollView, ScrollEventType scroll ReactContext reactContext = (ReactContext) scrollView.getContext(); reactContext.getNativeModule(UIManagerModule.class).getEventDispatcher().dispatchEvent( ScrollEvent.obtain( - reactTagFrom(scrollView), + reactTagFor(scrollView), 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 186a1455197d65..61df272940ee83 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 @@ -27,7 +27,7 @@ import com.facebook.react.uimanager.ViewProps; import com.facebook.react.uimanager.annotations.ReactProp; -import static com.facebook.react.common.ViewHelperMethods.reactTagFrom; +import static com.facebook.react.common.ViewMethodsUtil.reactTagFor; /** * Manages instances of {@code ReactSlider}. @@ -81,7 +81,7 @@ public void onProgressChanged(SeekBar seekbar, int progress, boolean fromUser) { ReactContext reactContext = (ReactContext) seekbar.getContext(); reactContext.getNativeModule(UIManagerModule.class).getEventDispatcher().dispatchEvent( new ReactSliderEvent( - reactTagFrom(seekbar), + reactTagFor(seekbar), ((ReactSlider)seekbar).toRealProgress(progress), fromUser)); } @@ -95,7 +95,7 @@ public void onStopTrackingTouch(SeekBar seekbar) { ReactContext reactContext = (ReactContext) seekbar.getContext(); reactContext.getNativeModule(UIManagerModule.class).getEventDispatcher().dispatchEvent( new ReactSlidingCompleteEvent( - reactTagFrom(seekbar), + reactTagFor(seekbar), ((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 dd9b987680a205..ae815bb08a5680 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 @@ -27,7 +27,7 @@ import com.facebook.react.uimanager.annotations.ReactProp; import static com.facebook.react.views.swiperefresh.SwipeRefreshLayoutManager.REACT_CLASS; -import static com.facebook.react.common.ViewHelperMethods.reactTagFrom; +import static com.facebook.react.common.ViewMethodsUtil.reactTagFor; /** * ViewManager for {@link ReactSwipeRefreshLayout} which allows the user to "pull to refresh" a @@ -95,7 +95,7 @@ protected void addEventEmitters( @Override public void onRefresh() { reactContext.getNativeModule(UIManagerModule.class).getEventDispatcher() - .dispatchEvent(new RefreshEvent(reactTagFrom(view))); + .dispatchEvent(new RefreshEvent(reactTagFor(view))); } }); } 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 1cba6222414641..8f52ca107de078 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 @@ -25,7 +25,7 @@ import com.facebook.react.uimanager.ViewProps; import com.facebook.react.uimanager.annotations.ReactProp; -import static com.facebook.react.common.ViewHelperMethods.reactTagFrom; +import static com.facebook.react.common.ViewMethodsUtil.reactTagFor; /** * View manager for {@link ReactSwitch} components. @@ -78,7 +78,7 @@ public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { ReactContext reactContext = (ReactContext) buttonView.getContext(); reactContext.getNativeModule(UIManagerModule.class).getEventDispatcher().dispatchEvent( new ReactSwitchEvent( - reactTagFrom(buttonView), + reactTagFor(buttonView), isChecked)); } }; diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactTextView.java b/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactTextView.java index 09a062720dec58..29d63f54d50379 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactTextView.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactTextView.java @@ -26,7 +26,7 @@ import com.facebook.react.uimanager.ViewDefaults; import com.facebook.react.views.view.ReactViewBackgroundDrawable; -import static com.facebook.react.common.ViewHelperMethods.reactTagFrom; +import static com.facebook.react.common.ViewMethodsUtil.reactTagFor; public class ReactTextView extends TextView implements ReactCompoundView { @@ -76,7 +76,7 @@ public void setText(ReactTextUpdate update) { @Override public int reactTagForTouch(float touchX, float touchY) { Spanned text = (Spanned) getText(); - int target = reactTagFrom(this); + int target = reactTagFor(this); int x = (int) touchX; int y = (int) touchY; 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 6ba6350a8a455a..dd510419b8ac44 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 @@ -50,10 +50,9 @@ import com.facebook.react.views.imagehelper.ResourceDrawableIdHelper; import com.facebook.react.views.text.DefaultStyleValuesUtil; import com.facebook.react.views.text.ReactTextUpdate; -import com.facebook.react.views.text.ReactTextView; import com.facebook.react.views.text.TextInlineImageSpan; -import static com.facebook.react.common.ViewHelperMethods.reactTagFrom; +import static com.facebook.react.common.ViewMethodsUtil.reactTagFor; /** * Manages instances of TextInput. @@ -647,7 +646,7 @@ public void onTextChanged(CharSequence s, int start, int before, int count) { // TODO: t7936714 merge these events mEventDispatcher.dispatchEvent( new ReactTextChangedEvent( - reactTagFrom(mEditText), + reactTagFor(mEditText), s.toString(), PixelUtil.toDIPFromPixel(contentWidth), PixelUtil.toDIPFromPixel(contentHeight), @@ -655,7 +654,7 @@ public void onTextChanged(CharSequence s, int start, int before, int count) { mEventDispatcher.dispatchEvent( new ReactTextInputEvent( - reactTagFrom(mEditText), + reactTagFor(mEditText), newText, oldText, start, @@ -680,15 +679,15 @@ public void onFocusChange(View v, boolean hasFocus) { if (hasFocus) { eventDispatcher.dispatchEvent( new ReactTextInputFocusEvent( - reactTagFrom(editText))); + reactTagFor(editText))); } else { eventDispatcher.dispatchEvent( new ReactTextInputBlurEvent( - reactTagFrom(editText))); + reactTagFor(editText))); eventDispatcher.dispatchEvent( new ReactTextInputEndEditingEvent( - reactTagFrom(editText), + reactTagFor(editText), editText.getText().toString())); } } @@ -705,7 +704,7 @@ public boolean onEditorAction(TextView v, int actionId, KeyEvent keyEvent) { reactContext.getNativeModule(UIManagerModule.class).getEventDispatcher(); eventDispatcher.dispatchEvent( new ReactTextInputSubmitEditingEvent( - reactTagFrom(editText), + reactTagFor(editText), editText.getText().toString())); } if (actionId == EditorInfo.IME_ACTION_NEXT || @@ -751,7 +750,7 @@ public void onLayout() { mEventDispatcher.dispatchEvent( new ReactContentSizeChangedEvent( - reactTagFrom(mEditText), + reactTagFor(mEditText), PixelUtil.toDIPFromPixel(contentWidth), PixelUtil.toDIPFromPixel(contentHeight))); } @@ -779,7 +778,7 @@ public void onSelectionChanged(int start, int end) { if (mPreviousSelectionStart != start || mPreviousSelectionEnd != end) { mEventDispatcher.dispatchEvent( new ReactTextInputSelectionEvent( - reactTagFrom(mReactEditText), + reactTagFor(mReactEditText), 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 e0e361d4102c11..264bfb0bb6ea8f 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 @@ -33,7 +33,7 @@ import com.facebook.react.uimanager.events.EventDispatcher; import com.facebook.react.views.toolbar.events.ToolbarClickEvent; -import static com.facebook.react.common.ViewHelperMethods.reactTagFrom; +import static com.facebook.react.common.ViewMethodsUtil.reactTagFor; /** * Manages instances of ReactToolbar. @@ -132,7 +132,7 @@ protected void addEventEmitters(final ThemedReactContext reactContext, final Rea @Override public void onClick(View v) { mEventDispatcher.dispatchEvent( - new ToolbarClickEvent(reactTagFrom(view), -1)); + new ToolbarClickEvent(reactTagFor(view), -1)); } }); @@ -142,7 +142,7 @@ public void onClick(View v) { public boolean onMenuItemClick(MenuItem menuItem) { mEventDispatcher.dispatchEvent( new ToolbarClickEvent( - reactTagFrom(view), + reactTagFor(view), 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 76417a3a3ad581..e542cdc6aea543 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 @@ -23,7 +23,7 @@ import com.facebook.react.uimanager.events.EventDispatcher; import com.facebook.react.uimanager.events.NativeGestureUtil; -import static com.facebook.react.common.ViewHelperMethods.reactTagFrom; +import static com.facebook.react.common.ViewMethodsUtil.reactTagFor; /** * Wrapper view for {@link ViewPager}. It's forwarding calls to {@link ViewGroup#addView} to add @@ -158,7 +158,7 @@ public void onPageScrollStateChanged(int state) { } private int getReactTag() { - return reactTagFrom(this); + return reactTagFor(this); } private final EventDispatcher mEventDispatcher; 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 096aad34f9c9a9..bd8475c7e3157d 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 @@ -57,7 +57,7 @@ import org.json.JSONObject; import org.json.JSONException; -import static com.facebook.react.common.ViewHelperMethods.reactTagFrom; +import static com.facebook.react.common.ViewMethodsUtil.reactTagFor; /** * Manages instances of {@link WebView} @@ -128,7 +128,7 @@ public void onPageStarted(WebView webView, String url, Bitmap favicon) { dispatchEvent( webView, new TopLoadingStartEvent( - reactTagFrom(webView), + reactTagFor(webView), createWebViewEvent(webView, url))); } @@ -164,7 +164,7 @@ public void onReceivedError( dispatchEvent( webView, - new TopLoadingErrorEvent(reactTagFrom(webView), eventData)); + new TopLoadingErrorEvent(reactTagFor(webView), eventData)); } @Override @@ -174,7 +174,7 @@ public void doUpdateVisitedHistory(WebView webView, String url, boolean isReload dispatchEvent( webView, new TopLoadingStartEvent( - reactTagFrom(webView), + reactTagFor(webView), createWebViewEvent(webView, url))); } @@ -182,13 +182,13 @@ private void emitFinishEvent(WebView webView, String url) { dispatchEvent( webView, new TopLoadingFinishEvent( - reactTagFrom(webView), + reactTagFor(webView), createWebViewEvent(webView, url))); } private WritableMap createWebViewEvent(WebView webView, String url) { WritableMap event = Arguments.createMap(); - event.putDouble("target", reactTagFrom(webView)); + event.putDouble("target", reactTagFor(webView)); // Don't use webView.getUrl() here, the URL isn't updated to the new value yet in callbacks // like onPageFinished event.putString("url", url); @@ -514,7 +514,7 @@ public void onNewPicture(WebView webView, Picture picture) { dispatchEvent( webView, new ContentSizeChangeEvent( - reactTagFrom(webView), + reactTagFor(webView), webView.getWidth(), webView.getContentHeight())); } diff --git a/ReactAndroid/src/test/java/com/facebook/react/animated/NativeAnimatedNodeTraversalTest.java b/ReactAndroid/src/test/java/com/facebook/react/animated/NativeAnimatedNodeTraversalTest.java index 6c46fb2089cbc7..95c3726e3ea6a6 100644 --- a/ReactAndroid/src/test/java/com/facebook/react/animated/NativeAnimatedNodeTraversalTest.java +++ b/ReactAndroid/src/test/java/com/facebook/react/animated/NativeAnimatedNodeTraversalTest.java @@ -39,7 +39,7 @@ import org.powermock.modules.junit4.rule.PowerMockRule; import org.robolectric.RobolectricTestRunner; -import static com.facebook.react.common.ViewHelperMethods.reactTagFrom; +import static com.facebook.react.common.ViewMethodsUtil.reactTagFor; import static org.fest.assertions.api.Assertions.assertThat; import static org.mockito.Matchers.any; import static org.mockito.Matchers.anyInt; @@ -82,7 +82,7 @@ private long nextFrameTime() { @Before public void setUp() { MockitoAnnotations.initMocks(this); - when(reactTagFrom(view)).thenReturn(viewTag); + when(reactTagFor(view)).thenReturn(viewTag); PowerMockito.mockStatic(Arguments.class); PowerMockito.when(Arguments.createArray()).thenAnswer(new Answer() { @Override @@ -738,7 +738,7 @@ public void testInterpolationNode() { } private Event createScrollEvent(final View view, final double value) { - return new Event(reactTagFrom(view)) { + return new Event(reactTagFor(view)) { @Override public String getEventName() { return "topScroll"; diff --git a/ReactAndroid/src/test/java/com/facebook/react/uimanager/UIManagerModuleTest.java b/ReactAndroid/src/test/java/com/facebook/react/uimanager/UIManagerModuleTest.java index aeb0da07289131..ec644032489556 100644 --- a/ReactAndroid/src/test/java/com/facebook/react/uimanager/UIManagerModuleTest.java +++ b/ReactAndroid/src/test/java/com/facebook/react/uimanager/UIManagerModuleTest.java @@ -48,7 +48,7 @@ import org.robolectric.RobolectricTestRunner; import org.robolectric.RuntimeEnvironment; -import static com.facebook.react.common.ViewHelperMethods.reactTagFrom; +import static com.facebook.react.common.ViewMethodsUtil.reactTagFor; import static org.fest.assertions.api.Assertions.assertThat; import static org.mockito.Matchers.any; import static org.mockito.Mockito.doAnswer; @@ -484,22 +484,22 @@ public void testTagsAssignment() { TestMoveDeleteHierarchy hierarchy = createMoveDeleteHierarchy(uiManager); View view0 = hierarchy.nativeRootView.getChildAt(0); - assertThat(reactTagFrom(view0)).isEqualTo(hierarchy.view0); + assertThat(reactTagFor(view0)).isEqualTo(hierarchy.view0); View viewWithChildren1 = hierarchy.nativeRootView.getChildAt(1); - assertThat(reactTagFrom(viewWithChildren1)).isEqualTo(hierarchy.viewWithChildren1); + assertThat(reactTagFor(viewWithChildren1)).isEqualTo(hierarchy.viewWithChildren1); View childView0 = ((ViewGroup) viewWithChildren1).getChildAt(0); - assertThat(reactTagFrom(childView0)).isEqualTo(hierarchy.childView0); + assertThat(reactTagFor(childView0)).isEqualTo(hierarchy.childView0); View childView1 = ((ViewGroup) viewWithChildren1).getChildAt(1); - assertThat(reactTagFrom(childView1)).isEqualTo(hierarchy.childView1); + assertThat(reactTagFor(childView1)).isEqualTo(hierarchy.childView1); View view2 = hierarchy.nativeRootView.getChildAt(2); - assertThat(reactTagFrom(view2)).isEqualTo(hierarchy.view2); + assertThat(reactTagFor(view2)).isEqualTo(hierarchy.view2); View view3 = hierarchy.nativeRootView.getChildAt(3); - assertThat(reactTagFrom(view3)).isEqualTo(hierarchy.view3); + assertThat(reactTagFor(view3)).isEqualTo(hierarchy.view3); } @Test From 650fe689cef19811b983afeaaa63048b6694400b Mon Sep 17 00:00:00 2001 From: jsdevel Date: Wed, 26 Oct 2016 10:01:39 -0700 Subject: [PATCH 6/6] PR feedback. * Renaming some methods. * Adjusting comments. --- .../com/facebook/react/common/TestIdUtil.java | 12 +++++----- .../react/common/ViewMethodsUtil.java | 3 --- .../uimanager/NativeViewHierarchyManager.java | 24 +++++++++++-------- .../RecyclerViewBackedScrollView.java | 1 - .../react/uimanager/BaseViewManagerTest.java | 4 ++-- 5 files changed, 22 insertions(+), 22 deletions(-) diff --git a/ReactAndroid/src/main/java/com/facebook/react/common/TestIdUtil.java b/ReactAndroid/src/main/java/com/facebook/react/common/TestIdUtil.java index ab3b9cf3392614..38b8010b4fcfc9 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/common/TestIdUtil.java +++ b/ReactAndroid/src/main/java/com/facebook/react/common/TestIdUtil.java @@ -9,15 +9,15 @@ public class TestIdUtil { private static final ConcurrentHashMap mTestIds = new ConcurrentHashMap<>(); - // Integer values in R.class are typically great in value. Ids need to be greater than 0 to be - // useful, so setting this to 10. - private static final int mStartingInternalId = 10; + // Integer values in R.class are typically large. To avoid colliding with R.class we + // use smaller values for ids when no resource id exists. + private static final int mStartingInternalId = 1; private static final AtomicInteger mInternalId = new AtomicInteger(mStartingInternalId); /** * Looks for defined resource IDs in R.class by the name of testId and if a matching resource ID is * found it is passed to the view's setId method. If the given testId cannot be found in R.class, - * an internal increment value is assigned instead. + * an increment value is assigned instead. */ public static void setTestId(T view, String testId) { int mappedTestId; @@ -38,7 +38,7 @@ public static void setTestId(T view, String testId) { } /** - * Used for internal e2e tests that do not yet have testIDs stored in ids.xml. It is strongly + * Used for e2e tests that do not yet have testIDs stored in ids.xml. It is strongly * advised that you reference ids that have been generated in R.class to avoid collisions and * to properly support UIAutomatorViewer. */ @@ -48,7 +48,7 @@ public static int getTestId(String testId) { } @VisibleForTesting - public static void resetTestState() { + public static void resetStateInTest() { mTestIds.clear(); mInternalId.set(mStartingInternalId); } diff --git a/ReactAndroid/src/main/java/com/facebook/react/common/ViewMethodsUtil.java b/ReactAndroid/src/main/java/com/facebook/react/common/ViewMethodsUtil.java index 07f01191df4cc2..24f4794bbc1392 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/common/ViewMethodsUtil.java +++ b/ReactAndroid/src/main/java/com/facebook/react/common/ViewMethodsUtil.java @@ -2,9 +2,6 @@ import android.view.View; -/** - * Various utility methods for {@link View}. - */ public class ViewMethodsUtil { /** diff --git a/ReactAndroid/src/main/java/com/facebook/react/uimanager/NativeViewHierarchyManager.java b/ReactAndroid/src/main/java/com/facebook/react/uimanager/NativeViewHierarchyManager.java index c6d148b226650f..4b64dde817a2ca 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/uimanager/NativeViewHierarchyManager.java +++ b/ReactAndroid/src/main/java/com/facebook/react/uimanager/NativeViewHierarchyManager.java @@ -204,9 +204,9 @@ private void updateLayout(View viewToUpdate, int x, int y, int width, int height } /** - * Creates a {@link View} and adds it to a corresponding {@link ViewManager}. + * Creates a view and adds it to a corresponding {@link ViewManager}. * - * The tag (a.k.a. React Tag) is saved with {@link View#setTag(Object)}. It is necessary to use + * The tag (a.k.a. React Tag) is stored with {@link View#setTag(Object)}. It is necessary to use * {@link ViewMethodsUtil#reactTagFor(View)} wherever the original * tag is needed e.g. when communicating with the Shadow DOM or with JS about a particular react * tag. @@ -229,6 +229,10 @@ public void createView( View view = viewManager.createView(themedContext, mJSResponderHandler); mTagsToViews.put(tag, view); mTagsToViewManagers.put(tag, viewManager); + + // Use android View tag field to store React tag. This is possible since we don't inflate + // React views from layout xmls. Thus it is easier to just reuse that field instead of + // creating another (potentially much more expensive) mapping from view to React tag view.setTag(tag); if (initialProps != null) { viewManager.updateProperties(view, initialProps); @@ -247,13 +251,13 @@ private static String constructManageChildrenErrorMessage( StringBuilder stringBuilder = new StringBuilder(); if (null != viewToManage) { - stringBuilder.append("View tag:" + viewToManage.getTag() + "\n"); + stringBuilder.append("View tag:" + reactTagFor(viewToManage) + "\n"); stringBuilder.append(" children(" + viewManager.getChildCount(viewToManage) + "): [\n"); for (int index=0; index