diff --git a/ReactAndroid/src/main/java/com/facebook/react/bridge/ReadableNativeMap.java b/ReactAndroid/src/main/java/com/facebook/react/bridge/ReadableNativeMap.java index ef661c06d94..422f4995587 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/bridge/ReadableNativeMap.java +++ b/ReactAndroid/src/main/java/com/facebook/react/bridge/ReadableNativeMap.java @@ -47,7 +47,7 @@ public class ReadableNativeMap extends NativeMap implements ReadableMap { if (mLocalMap != null) { return mLocalMap; } - // Check and when necessary get keys atomicaly + // Check and when necessary get keys atomically synchronized (this) { if (mKeys == null) { mKeys = Assertions.assertNotNull(importKeys()); diff --git a/ReactAndroid/src/main/java/com/facebook/react/fabric/FabricUIManager.java b/ReactAndroid/src/main/java/com/facebook/react/fabric/FabricUIManager.java index 4501bb9b169..3bae4836e4b 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/fabric/FabricUIManager.java +++ b/ReactAndroid/src/main/java/com/facebook/react/fabric/FabricUIManager.java @@ -29,7 +29,7 @@ import com.facebook.react.bridge.NativeMap; import com.facebook.react.bridge.ReactApplicationContext; import com.facebook.react.bridge.ReactContext; import com.facebook.react.bridge.ReadableArray; -import com.facebook.react.bridge.ReadableNativeMap; +import com.facebook.react.bridge.ReadableMap; import com.facebook.react.bridge.UIManager; import com.facebook.react.bridge.UiThreadUtil; import com.facebook.react.bridge.WritableMap; @@ -52,7 +52,6 @@ import com.facebook.react.fabric.mounting.mountitems.UpdateLayoutMountItem; import com.facebook.react.fabric.mounting.mountitems.UpdateLocalDataMountItem; import com.facebook.react.fabric.mounting.mountitems.UpdatePropsMountItem; import com.facebook.react.modules.core.ReactChoreographer; -import com.facebook.react.uimanager.IllegalViewOperationException; import com.facebook.react.uimanager.ReactRootViewTagGenerator; import com.facebook.react.uimanager.ThemedReactContext; import com.facebook.react.uimanager.ViewManagerPropertyUpdater; @@ -230,13 +229,13 @@ public class FabricUIManager implements UIManager, LifecycleEventListener { @DoNotStrip @SuppressWarnings("unused") - private MountItem updatePropsMountItem(int reactTag, ReadableNativeMap map) { + private MountItem updatePropsMountItem(int reactTag, ReadableMap map) { return new UpdatePropsMountItem(reactTag, map); } @DoNotStrip @SuppressWarnings("unused") - private MountItem updateLocalDataMountItem(int reactTag, ReadableNativeMap newLocalData) { + private MountItem updateLocalDataMountItem(int reactTag, ReadableMap newLocalData) { return new UpdateLocalDataMountItem(reactTag, newLocalData); } @@ -256,8 +255,8 @@ public class FabricUIManager implements UIManager, LifecycleEventListener { @SuppressWarnings("unused") private long measure( String componentName, - ReadableNativeMap localData, - ReadableNativeMap props, + ReadableMap localData, + ReadableMap props, int minWidth, int maxWidth, int minHeight, diff --git a/ReactAndroid/src/main/java/com/facebook/react/fabric/jsi/jni/Binding.cpp b/ReactAndroid/src/main/java/com/facebook/react/fabric/jsi/jni/Binding.cpp index ed661ed50cb..0a89c4c479e 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/fabric/jsi/jni/Binding.cpp +++ b/ReactAndroid/src/main/java/com/facebook/react/fabric/jsi/jni/Binding.cpp @@ -121,6 +121,10 @@ void Binding::uninstallFabricUIManager() { javaUIManager_ = nullptr; } +inline local_ref castReadableMap(local_ref nativeMap) { + return make_local(reinterpret_cast(nativeMap.get())); +} + //TODO: this method will be removed when binding for components are code-gen local_ref getPlatformComponentName(const ShadowView &shadowView) { local_ref componentName; @@ -173,11 +177,10 @@ local_ref createUpdatePropsMountItem(const jni::global_r // TODO: move props from map to a typed object. auto newProps = shadowView.props->rawProps; - local_ref readableMap = ReadableNativeMap::newObjectCxxArgs(newProps); - + local_ref readableMap = castReadableMap(ReadableNativeMap::newObjectCxxArgs(newProps)); static auto updatePropsInstruction = jni::findClassStatic(UIManagerJavaDescriptor) - ->getMethod(jint,ReadableNativeMap::javaobject)>("updatePropsMountItem"); + ->getMethod(jint,ReadableMap::javaobject)>("updatePropsMountItem"); return updatePropsInstruction(javaUIManager, mutation.newChildShadowView.tag, @@ -217,7 +220,7 @@ local_ref createInsertMountItem(const jni::global_ref createUpdateLocalData(const jni::global_ref &javaUIManager, const ShadowViewMutation &mutation) { static auto updateLocalDataInstruction = jni::findClassStatic(UIManagerJavaDescriptor) - ->getMethod(jint, ReadableNativeMap::javaobject)>("updateLocalDataMountItem"); + ->getMethod(jint, ReadableMap::javaobject)>("updateLocalDataMountItem"); auto localData = mutation.newChildShadowView.localData; @@ -225,9 +228,9 @@ local_ref createUpdateLocalData(const jni::global_refgetDynamic(); } - local_ref readableMap = ReadableNativeMap::newObjectCxxArgs(newLocalData); - return updateLocalDataInstruction(javaUIManager, mutation.newChildShadowView.tag, readableMap.get()); + local_ref readableNativeMap = ReadableNativeMap::newObjectCxxArgs(newLocalData); + return updateLocalDataInstruction(javaUIManager, mutation.newChildShadowView.tag, castReadableMap(readableNativeMap).get()); } local_ref createRemoveMountItem(const jni::global_ref &javaUIManager, const ShadowViewMutation &mutation) { diff --git a/ReactAndroid/src/main/java/com/facebook/react/fabric/mounting/MountingManager.java b/ReactAndroid/src/main/java/com/facebook/react/fabric/mounting/MountingManager.java index 3c1459f76a8..94e23bf5cbf 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/fabric/mounting/MountingManager.java +++ b/ReactAndroid/src/main/java/com/facebook/react/fabric/mounting/MountingManager.java @@ -13,16 +13,15 @@ import android.support.annotation.UiThread; import android.view.View; import android.view.ViewGroup; import android.view.ViewParent; -import com.facebook.react.fabric.FabricUIManager; -import com.facebook.react.fabric.jsi.EventEmitterWrapper; -import com.facebook.react.fabric.mounting.mountitems.MountItem; import com.facebook.infer.annotation.Assertions; import com.facebook.react.bridge.ReactContext; import com.facebook.react.bridge.ReadableArray; import com.facebook.react.bridge.ReadableMap; -import com.facebook.react.bridge.ReadableNativeMap; import com.facebook.react.bridge.SoftAssertions; import com.facebook.react.bridge.UiThreadUtil; +import com.facebook.react.fabric.FabricUIManager; +import com.facebook.react.fabric.jsi.EventEmitterWrapper; +import com.facebook.react.fabric.mounting.mountitems.MountItem; import com.facebook.react.uimanager.IllegalViewOperationException; import com.facebook.react.uimanager.ReactStylesDiffMap; import com.facebook.react.uimanager.RootView; @@ -288,8 +287,8 @@ public class MountingManager { public long measure( ReactContext context, String componentName, - ReadableNativeMap localData, - ReadableNativeMap props, + ReadableMap localData, + ReadableMap props, float width, YogaMeasureMode widthMode, float height, diff --git a/ReactAndroid/src/main/java/com/facebook/react/fabric/mounting/mountitems/UpdateLocalDataMountItem.java b/ReactAndroid/src/main/java/com/facebook/react/fabric/mounting/mountitems/UpdateLocalDataMountItem.java index c54bfba8f05..b6f334a9153 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/fabric/mounting/mountitems/UpdateLocalDataMountItem.java +++ b/ReactAndroid/src/main/java/com/facebook/react/fabric/mounting/mountitems/UpdateLocalDataMountItem.java @@ -15,7 +15,7 @@ public class UpdateLocalDataMountItem implements MountItem { private final int mReactTag; private final ReadableMap mNewLocalData; - public UpdateLocalDataMountItem(int reactTag, ReadableNativeMap newLocalData) { + public UpdateLocalDataMountItem(int reactTag, ReadableMap newLocalData) { mReactTag = reactTag; mNewLocalData = newLocalData; } diff --git a/ReactAndroid/src/main/java/com/facebook/react/uimanager/ViewManager.java b/ReactAndroid/src/main/java/com/facebook/react/uimanager/ViewManager.java index 75087c755aa..0fab09ccfbb 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/uimanager/ViewManager.java +++ b/ReactAndroid/src/main/java/com/facebook/react/uimanager/ViewManager.java @@ -12,7 +12,7 @@ import com.facebook.react.bridge.BaseJavaModule; import com.facebook.react.bridge.ReactApplicationContext; import com.facebook.react.bridge.ReactContext; import com.facebook.react.bridge.ReadableArray; -import com.facebook.react.bridge.ReadableNativeMap; +import com.facebook.react.bridge.ReadableMap; import com.facebook.react.touch.JSResponderHandler; import com.facebook.react.touch.ReactInterceptingViewGroup; import com.facebook.react.uimanager.annotations.ReactProp; @@ -215,8 +215,8 @@ public abstract class ViewManager public long measure( ReactContext context, - ReadableNativeMap localData, - ReadableNativeMap props, + ReadableMap localData, + ReadableMap props, float width, YogaMeasureMode widthMode, float height, diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactTextViewManager.java b/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactTextViewManager.java index 226776b7dd6..eb0e9f9c0ce 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactTextViewManager.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactTextViewManager.java @@ -1,18 +1,15 @@ /** * Copyright (c) Facebook, Inc. and its affiliates. * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. + *

This source code is licensed under the MIT license found in the LICENSE file in the root + * directory of this source tree. */ - package com.facebook.react.views.text; import android.text.Layout; import android.text.Spannable; import com.facebook.react.bridge.ReactContext; -import com.facebook.react.bridge.ReadableArray; import com.facebook.react.bridge.ReadableMap; -import com.facebook.react.bridge.ReadableNativeMap; import com.facebook.react.common.MapBuilder; import com.facebook.react.common.annotations.VisibleForTesting; import com.facebook.react.module.annotations.ReactModule; @@ -30,8 +27,7 @@ import javax.annotation.Nullable; public class ReactTextViewManager extends ReactTextAnchorViewManager { - @VisibleForTesting - public static final String REACT_CLASS = "RCTText"; + @VisibleForTesting public static final String REACT_CLASS = "RCTText"; @Override public String getName() { @@ -70,11 +66,12 @@ public class ReactTextViewManager } @Override - public Object updateLocalData(ReactTextView view, ReactStylesDiffMap props, ReactStylesDiffMap localData) { + public Object updateLocalData( + ReactTextView view, ReactStylesDiffMap props, ReactStylesDiffMap localData) { ReadableMap attributedString = localData.getMap("attributedString"); - Spannable spanned = TextLayoutManager.getOrCreateSpannableForText(view.getContext(), - attributedString); + Spannable spanned = + TextLayoutManager.getOrCreateSpannableForText(view.getContext(), attributedString); view.setSpanned(spanned); TextAttributeProps textViewProps = new TextAttributeProps(props); @@ -82,18 +79,16 @@ public class ReactTextViewManager // TODO add textBreakStrategy prop into local Data int textBreakStrategy = Layout.BREAK_STRATEGY_HIGH_QUALITY; - return - new ReactTextUpdate( + return new ReactTextUpdate( spanned, - -1, // TODO add this into local Data? - false, // TODO add this into local Data + -1, // TODO add this into local Data? + false, // TODO add this into local Data textViewProps.getStartPadding(), textViewProps.getTopPadding(), textViewProps.getEndPadding(), textViewProps.getBottomPadding(), textViewProps.getTextAlign(), - textBreakStrategy - ); + textBreakStrategy); } @Override @@ -102,20 +97,15 @@ public class ReactTextViewManager } public long measure( - ReactContext context, - ReadableNativeMap localData, - ReadableNativeMap props, - float width, - YogaMeasureMode widthMode, - float height, - YogaMeasureMode heightMode) { + ReactContext context, + ReadableMap localData, + ReadableMap props, + float width, + YogaMeasureMode widthMode, + float height, + YogaMeasureMode heightMode) { - return TextLayoutManager.measureText(context, - localData, - props, - width, - widthMode, - height, - heightMode); + return TextLayoutManager.measureText( + context, localData, props, width, widthMode, height, heightMode); } } diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/text/TextLayoutManager.java b/ReactAndroid/src/main/java/com/facebook/react/views/text/TextLayoutManager.java index 4d0df513e74..23c7778d683 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/text/TextLayoutManager.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/text/TextLayoutManager.java @@ -22,7 +22,6 @@ import android.util.LruCache; import com.facebook.react.bridge.ReactContext; import com.facebook.react.bridge.ReadableArray; import com.facebook.react.bridge.ReadableMap; -import com.facebook.react.bridge.ReadableNativeMap; import com.facebook.react.uimanager.PixelUtil; import com.facebook.react.uimanager.ReactStylesDiffMap; import com.facebook.yoga.YogaConstants; @@ -208,8 +207,8 @@ public class TextLayoutManager { public static long measureText( ReactContext context, - ReadableNativeMap attributedString, - ReadableNativeMap paragraphAttributes, + ReadableMap attributedString, + ReadableMap paragraphAttributes, float width, YogaMeasureMode widthYogaMeasureMode, float height, diff --git a/ReactCommon/fabric/textlayoutmanager/platform/android/TextLayoutManager.cpp b/ReactCommon/fabric/textlayoutmanager/platform/android/TextLayoutManager.cpp index fd18e47698a..32977538ca2 100644 --- a/ReactCommon/fabric/textlayoutmanager/platform/android/TextLayoutManager.cpp +++ b/ReactCommon/fabric/textlayoutmanager/platform/android/TextLayoutManager.cpp @@ -34,8 +34,8 @@ Size TextLayoutManager::measure( jni::findClassStatic("com/facebook/react/fabric/FabricUIManager") ->getMethod componentName = make_jstring("RCTText"); + local_ref attributedStringRNM = + ReadableNativeMap::newObjectCxxArgs(toDynamic(attributedString)); + local_ref paragraphAttributesRNM = + ReadableNativeMap::newObjectCxxArgs(toDynamic(paragraphAttributes)); + + local_ref attributedStringRM = make_local( + reinterpret_cast(attributedStringRNM.get())); + local_ref paragraphAttributesRM = make_local( + reinterpret_cast(paragraphAttributesRNM.get())); return yogaMeassureToSize(measure( fabricUIManager, componentName.get(), - ReadableNativeMap::newObjectCxxArgs(toDynamic(attributedString)).get(), - ReadableNativeMap::newObjectCxxArgs(toDynamic(paragraphAttributes)).get(), + attributedStringRM.get(), + paragraphAttributesRM.get(), minWidth, maxWidth, minHeight,