From c8bb42288292e9c08ed208aae4a700fb4d05c464 Mon Sep 17 00:00:00 2001 From: Seth Kirby Date: Thu, 27 Apr 2017 15:35:24 -0700 Subject: [PATCH] Fix Nodes not having correct view managers externally Reviewed By: ahmedre Differential Revision: D4927963 fbshipit-source-id: f4993aa45f6313e814d03141f828d37eafade059 --- .../react/flat/FlatARTSurfaceViewManager.java | 20 +- .../react/flat/FlatUIImplementation.java | 176 +++++++++++------- .../react/flat/NativeViewWrapper.java | 13 +- .../react/flat/RCTImageViewManager.java | 8 +- .../react/flat/RCTModalHostManager.java | 2 + .../react/flat/RCTRawTextManager.java | 4 +- .../react/flat/RCTTextInlineImageManager.java | 4 +- .../react/flat/RCTTextInputManager.java | 2 + .../facebook/react/flat/RCTTextManager.java | 4 +- .../facebook/react/flat/RCTViewManager.java | 38 ++-- .../react/flat/RCTViewPagerManager.java | 7 +- .../react/flat/RCTVirtualTextManager.java | 4 +- .../react/shell/MainReactPackage.java | 61 +++--- .../react/uimanager/ViewManagerRegistry.java | 7 +- 14 files changed, 207 insertions(+), 143 deletions(-) diff --git a/ReactAndroid/src/main/java/com/facebook/react/flat/FlatARTSurfaceViewManager.java b/ReactAndroid/src/main/java/com/facebook/react/flat/FlatARTSurfaceViewManager.java index a3fad3aba..c8afc3e54 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/flat/FlatARTSurfaceViewManager.java +++ b/ReactAndroid/src/main/java/com/facebook/react/flat/FlatARTSurfaceViewManager.java @@ -9,26 +9,26 @@ package com.facebook.react.flat; -import com.facebook.yoga.YogaMeasureMode; -import com.facebook.yoga.YogaMeasureFunction; -import com.facebook.yoga.YogaNode; import com.facebook.react.uimanager.BaseViewManager; import com.facebook.react.uimanager.ThemedReactContext; import com.facebook.react.views.art.ARTSurfaceView; +import com.facebook.yoga.YogaMeasureFunction; +import com.facebook.yoga.YogaMeasureMode; +import com.facebook.yoga.YogaNode; public class FlatARTSurfaceViewManager extends - BaseViewManager { + BaseViewManager { - private static final String REACT_CLASS = "ARTSurfaceView"; + /* package */ static final String REACT_CLASS = "ARTSurfaceView"; private static final YogaMeasureFunction MEASURE_FUNCTION = new YogaMeasureFunction() { @Override public long measure( - YogaNode node, - float width, - YogaMeasureMode widthMode, - float height, - YogaMeasureMode heightMode) { + YogaNode node, + float width, + YogaMeasureMode widthMode, + float height, + YogaMeasureMode heightMode) { throw new IllegalStateException("SurfaceView should have explicit width and height set"); } }; diff --git a/ReactAndroid/src/main/java/com/facebook/react/flat/FlatUIImplementation.java b/ReactAndroid/src/main/java/com/facebook/react/flat/FlatUIImplementation.java index add945cbb..00cd9e103 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/flat/FlatUIImplementation.java +++ b/ReactAndroid/src/main/java/com/facebook/react/flat/FlatUIImplementation.java @@ -9,11 +9,6 @@ package com.facebook.react.flat; -import javax.annotation.Nullable; - -import java.util.Arrays; -import java.util.List; - import com.facebook.infer.annotation.Assertions; import com.facebook.react.bridge.Callback; import com.facebook.react.bridge.ReactApplicationContext; @@ -28,6 +23,12 @@ import com.facebook.react.uimanager.ViewManagerRegistry; import com.facebook.react.uimanager.events.EventDispatcher; import com.facebook.yoga.YogaDirection; +import javax.annotation.Nullable; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + /** * FlatUIImplementation builds on top of UIImplementation and allows pre-creating everything * required for drawing (DrawCommands) and touching (NodeRegions) views in background thread @@ -35,15 +36,66 @@ import com.facebook.yoga.YogaDirection; */ public class FlatUIImplementation extends UIImplementation { + private static final Map> flatManagerClassMap; + + static { + flatManagerClassMap = new HashMap<>(); + flatManagerClassMap.put(RCTViewManager.REACT_CLASS, RCTViewManager.class); + flatManagerClassMap.put(RCTTextManager.REACT_CLASS, RCTTextManager.class); + flatManagerClassMap.put(RCTRawTextManager.REACT_CLASS, RCTRawTextManager.class); + flatManagerClassMap.put(RCTVirtualTextManager.REACT_CLASS, RCTVirtualTextManager.class); + flatManagerClassMap.put(RCTTextInlineImageManager.REACT_CLASS, RCTTextInlineImageManager.class); + flatManagerClassMap.put(RCTImageViewManager.REACT_CLASS, RCTImageViewManager.class); + flatManagerClassMap.put(RCTTextInputManager.REACT_CLASS, RCTTextInputManager.class); + flatManagerClassMap.put(RCTViewPagerManager.REACT_CLASS, RCTViewPagerManager.class); + flatManagerClassMap.put(FlatARTSurfaceViewManager.REACT_CLASS, FlatARTSurfaceViewManager.class); + flatManagerClassMap.put(RCTModalHostManager.REACT_CLASS, RCTModalHostManager.class); + } + + /** + * Build the map of view managers, checking that the managers FlatUI requires are correctly + * overriden. + */ + private static Map buildViewManagerMap(List viewManagers) { + Map viewManagerMap = new HashMap<>(); + for (ViewManager viewManager : viewManagers) { + viewManagerMap.put(viewManager.getName(), viewManager); + } + for (Map.Entry> entry : flatManagerClassMap.entrySet()) { + String name = entry.getKey(); + ViewManager maybeFlatViewManager = viewManagerMap.get(name); + if (maybeFlatViewManager == null) { + // We don't have a view manager for this name in the package, no need to add one. + continue; + } + + Class flatClazz = entry.getValue(); + if (maybeFlatViewManager.getClass() != flatClazz) { + // If we have instances that have flat equivalents, override them. + try { + viewManagerMap.put(name, flatClazz.newInstance()); + } catch (IllegalAccessException e) { + throw new RuntimeException("Unable to access flat class for " + name, e); + } catch (InstantiationException e) { + throw new RuntimeException("Unable to instantiate flat class for " + name, e); + } + } + } + return viewManagerMap; + } + public static FlatUIImplementation createInstance( ReactApplicationContext reactContext, List viewManagers, EventDispatcher eventDispatcher, boolean memoryImprovementEnabled) { - RCTImageViewManager rctImageViewManager = findRCTImageManager(viewManagers); - if (rctImageViewManager != null) { - Object callerContext = rctImageViewManager.getCallerContext(); + Map viewManagerMap = buildViewManagerMap(viewManagers); + + RCTImageViewManager imageViewManager = + (RCTImageViewManager) viewManagerMap.get(RCTImageViewManager.REACT_CLASS); + if (imageViewManager != null) { + Object callerContext = imageViewManager.getCallerContext(); if (callerContext != null) { RCTImageView.setCallerContext(callerContext); } @@ -52,15 +104,15 @@ public class FlatUIImplementation extends UIImplementation { TypefaceCache.setAssetManager(reactContext.getAssets()); - ViewManagerRegistry viewManagerRegistry = new ViewManagerRegistry(viewManagers); + ViewManagerRegistry viewManagerRegistry = new ViewManagerRegistry(viewManagerMap); FlatNativeViewHierarchyManager nativeViewHierarchyManager = new FlatNativeViewHierarchyManager( - viewManagerRegistry); + viewManagerRegistry); FlatUIViewOperationQueue operationsQueue = new FlatUIViewOperationQueue( - reactContext, - nativeViewHierarchyManager); + reactContext, + nativeViewHierarchyManager); return new FlatUIImplementation( reactContext, - rctImageViewManager, + imageViewManager, viewManagerRegistry, operationsQueue, eventDispatcher, @@ -126,9 +178,9 @@ public class FlatUIImplementation extends UIImplementation { @Override protected void handleCreateView( - ReactShadowNode cssNode, - int rootViewTag, - @Nullable ReactStylesDiffMap styles) { + ReactShadowNode cssNode, + int rootViewTag, + @Nullable ReactStylesDiffMap styles) { if (cssNode instanceof FlatShadowNode) { FlatShadowNode node = (FlatShadowNode) cssNode; @@ -146,9 +198,9 @@ public class FlatUIImplementation extends UIImplementation { @Override protected void handleUpdateView( - ReactShadowNode cssNode, - String className, - ReactStylesDiffMap styles) { + ReactShadowNode cssNode, + String className, + ReactStylesDiffMap styles) { if (cssNode instanceof FlatShadowNode) { FlatShadowNode node = (FlatShadowNode) cssNode; @@ -164,12 +216,12 @@ public class FlatUIImplementation extends UIImplementation { @Override public void manageChildren( - int viewTag, - @Nullable ReadableArray moveFrom, - @Nullable ReadableArray moveTo, - @Nullable ReadableArray addChildTags, - @Nullable ReadableArray addAtIndices, - @Nullable ReadableArray removeFrom) { + int viewTag, + @Nullable ReadableArray moveFrom, + @Nullable ReadableArray moveTo, + @Nullable ReadableArray addChildTags, + @Nullable ReadableArray addAtIndices, + @Nullable ReadableArray removeFrom) { ReactShadowNode parentNode = resolveShadowNode(viewTag); @@ -182,8 +234,8 @@ public class FlatUIImplementation extends UIImplementation { @Override public void setChildren( - int viewTag, - ReadableArray children) { + int viewTag, + ReadableArray children) { ReactShadowNode parentNode = resolveShadowNode(viewTag); @@ -244,13 +296,13 @@ public class FlatUIImplementation extends UIImplementation { FlatUIViewOperationQueue operationsQueue = mStateBuilder.getOperationsQueue(); operationsQueue.enqueueMeasureVirtualView( - node.getReactTag(), - xInParent / parentWidth, - yInParent / parentHeight, - width / parentWidth, - height / parentHeight, - relativeToWindow, - callback); + node.getReactTag(), + xInParent / parentWidth, + yInParent / parentHeight, + width / parentWidth, + height / parentHeight, + relativeToWindow, + callback); } private void ensureMountsToViewAndBackingViewIsCreated(int reactTag) { @@ -304,10 +356,10 @@ public class FlatUIImplementation extends UIImplementation { * preparing elements in moveFrom to be re-added at proper index. */ private void removeChildren( - ReactShadowNode parentNode, - @Nullable ReadableArray moveFrom, - @Nullable ReadableArray moveTo, - @Nullable ReadableArray removeFrom) { + ReactShadowNode parentNode, + @Nullable ReadableArray moveFrom, + @Nullable ReadableArray moveTo, + @Nullable ReadableArray removeFrom) { int prevIndex = Integer.MAX_VALUE; @@ -388,7 +440,7 @@ public class FlatUIImplementation extends UIImplementation { if (tmpNode instanceof FlatShadowNode) { FlatShadowNode flatTmpNode = (FlatShadowNode) tmpNode; if (flatTmpNode.mountsToView() && flatTmpNode.isBackingViewCreated() && - flatTmpNode.getParent() != null) { + flatTmpNode.getParent() != null) { tag = flatTmpNode.getReactTag(); break; } @@ -418,9 +470,9 @@ public class FlatUIImplementation extends UIImplementation { * Adds all children from addChildTags and moveFrom/moveTo. */ private void addChildren( - ReactShadowNode parentNode, - @Nullable ReadableArray addChildTags, - @Nullable ReadableArray addAtIndices) { + ReactShadowNode parentNode, + @Nullable ReadableArray addChildTags, + @Nullable ReadableArray addAtIndices) { int prevIndex = -1; @@ -485,12 +537,12 @@ public class FlatUIImplementation extends UIImplementation { * Removes a child from parent, verifying that we are removing in descending order. */ private static ReactShadowNode removeChildAt( - ReactShadowNode parentNode, - int index, - int prevIndex) { + ReactShadowNode parentNode, + int index, + int prevIndex) { if (index >= prevIndex) { throw new RuntimeException( - "Invariant failure, needs sorting! " + index + " >= " + prevIndex); + "Invariant failure, needs sorting! " + index + " >= " + prevIndex); } return parentNode.removeChildAt(index); @@ -500,13 +552,13 @@ public class FlatUIImplementation extends UIImplementation { * Adds a child to parent, verifying that we are adding in ascending order. */ private static void addChildAt( - ReactShadowNode parentNode, - ReactShadowNode childNode, - int index, - int prevIndex) { + ReactShadowNode parentNode, + ReactShadowNode childNode, + int index, + int prevIndex) { if (index <= prevIndex) { throw new RuntimeException( - "Invariant failure, needs sorting! " + index + " <= " + prevIndex); + "Invariant failure, needs sorting! " + index + " <= " + prevIndex); } parentNode.addChildAt(childNode, index); @@ -520,9 +572,9 @@ public class FlatUIImplementation extends UIImplementation { @Override protected void applyUpdatesRecursive( - ReactShadowNode cssNode, - float absoluteX, - float absoluteY) { + ReactShadowNode cssNode, + float absoluteX, + float absoluteY) { mStateBuilder.applyUpdates((FlatRootShadowNode) cssNode); } @@ -551,18 +603,8 @@ public class FlatUIImplementation extends UIImplementation { FlatUIViewOperationQueue operationsQueue = mStateBuilder.getOperationsQueue(); operationsQueue.enqueueSetJSResponder( - node == null ? tag : node.getReactTag(), - possiblyVirtualReactTag, - blockNativeResponder); - } - - private static @Nullable RCTImageViewManager findRCTImageManager(List viewManagers) { - for (int i = 0, size = viewManagers.size(); i != size; ++i) { - if (viewManagers.get(i) instanceof RCTImageViewManager) { - return (RCTImageViewManager) viewManagers.get(i); - } - } - - return null; + node == null ? tag : node.getReactTag(), + possiblyVirtualReactTag, + blockNativeResponder); } } diff --git a/ReactAndroid/src/main/java/com/facebook/react/flat/NativeViewWrapper.java b/ReactAndroid/src/main/java/com/facebook/react/flat/NativeViewWrapper.java index b5b23913d..5ef0cb8e0 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/flat/NativeViewWrapper.java +++ b/ReactAndroid/src/main/java/com/facebook/react/flat/NativeViewWrapper.java @@ -9,21 +9,22 @@ package com.facebook.react.flat; -import javax.annotation.Nullable; - -import com.facebook.yoga.YogaMeasureFunction; -import com.facebook.react.uimanager.ReactStylesDiffMap; import com.facebook.react.uimanager.ReactShadowNode; +import com.facebook.react.uimanager.ReactStylesDiffMap; import com.facebook.react.uimanager.ThemedReactContext; import com.facebook.react.uimanager.UIViewOperationQueue; import com.facebook.react.uimanager.ViewGroupManager; import com.facebook.react.uimanager.ViewManager; -import com.facebook.yoga.YogaValue; +import com.facebook.yoga.YogaMeasureFunction; import com.facebook.yoga.YogaUnit; +import com.facebook.yoga.YogaValue; + +import javax.annotation.Nullable; /* package */ final class NativeViewWrapper extends FlatShadowNode implements AndroidView { - @Nullable private final ReactShadowNode mReactShadowNode; + @Nullable + private final ReactShadowNode mReactShadowNode; private final boolean mNeedsCustomLayoutForChildren; private boolean mPaddingChanged = false; private boolean mForceMountGrandChildrenToView; diff --git a/ReactAndroid/src/main/java/com/facebook/react/flat/RCTImageViewManager.java b/ReactAndroid/src/main/java/com/facebook/react/flat/RCTImageViewManager.java index 9b06476d2..2e504a11b 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/flat/RCTImageViewManager.java +++ b/ReactAndroid/src/main/java/com/facebook/react/flat/RCTImageViewManager.java @@ -9,13 +9,15 @@ package com.facebook.react.flat; -import javax.annotation.Nullable; - import com.facebook.drawee.backends.pipeline.Fresco; import com.facebook.drawee.controller.AbstractDraweeControllerBuilder; +import javax.annotation.Nullable; + public final class RCTImageViewManager extends FlatViewManager { + /* package */ static final String REACT_CLASS = "RCTImageView"; + private @Nullable AbstractDraweeControllerBuilder mDraweeControllerBuilder; private final @Nullable Object mCallerContext; @@ -32,7 +34,7 @@ public final class RCTImageViewManager extends FlatViewManager { @Override public String getName() { - return "RCTImageView"; + return REACT_CLASS; } @Override diff --git a/ReactAndroid/src/main/java/com/facebook/react/flat/RCTModalHostManager.java b/ReactAndroid/src/main/java/com/facebook/react/flat/RCTModalHostManager.java index 37b9eab67..f9f7b4d66 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/flat/RCTModalHostManager.java +++ b/ReactAndroid/src/main/java/com/facebook/react/flat/RCTModalHostManager.java @@ -14,6 +14,8 @@ import com.facebook.react.views.modal.ReactModalHostManager; public class RCTModalHostManager extends ReactModalHostManager { + /* package */ static final String REACT_CLASS = ReactModalHostManager.REACT_CLASS; + @Override public LayoutShadowNode createShadowNodeInstance() { return new FlatReactModalShadowNode(); diff --git a/ReactAndroid/src/main/java/com/facebook/react/flat/RCTRawTextManager.java b/ReactAndroid/src/main/java/com/facebook/react/flat/RCTRawTextManager.java index 6cc82f922..b50dd7a1a 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/flat/RCTRawTextManager.java +++ b/ReactAndroid/src/main/java/com/facebook/react/flat/RCTRawTextManager.java @@ -14,9 +14,11 @@ package com.facebook.react.flat; */ public final class RCTRawTextManager extends VirtualViewManager { + /* package */ static final String REACT_CLASS = "RCTRawText"; + @Override public String getName() { - return "RCTRawText"; + return REACT_CLASS; } @Override diff --git a/ReactAndroid/src/main/java/com/facebook/react/flat/RCTTextInlineImageManager.java b/ReactAndroid/src/main/java/com/facebook/react/flat/RCTTextInlineImageManager.java index 3bd0f9fe3..f4c73e586 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/flat/RCTTextInlineImageManager.java +++ b/ReactAndroid/src/main/java/com/facebook/react/flat/RCTTextInlineImageManager.java @@ -14,9 +14,11 @@ package com.facebook.react.flat; */ public final class RCTTextInlineImageManager extends VirtualViewManager { + /* package */ static final String REACT_CLASS = "RCTTextInlineImage"; + @Override public String getName() { - return "RCTTextInlineImage"; + return REACT_CLASS; } @Override diff --git a/ReactAndroid/src/main/java/com/facebook/react/flat/RCTTextInputManager.java b/ReactAndroid/src/main/java/com/facebook/react/flat/RCTTextInputManager.java index 7ef8fb8e1..c641acd75 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/flat/RCTTextInputManager.java +++ b/ReactAndroid/src/main/java/com/facebook/react/flat/RCTTextInputManager.java @@ -13,6 +13,8 @@ import com.facebook.react.views.textinput.ReactTextInputManager; public class RCTTextInputManager extends ReactTextInputManager { + /* package */ static final String REACT_CLASS = ReactTextInputManager.REACT_CLASS; + @Override public RCTTextInput createShadowNodeInstance() { return new RCTTextInput(); diff --git a/ReactAndroid/src/main/java/com/facebook/react/flat/RCTTextManager.java b/ReactAndroid/src/main/java/com/facebook/react/flat/RCTTextManager.java index 0563426c7..fc94166c6 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/flat/RCTTextManager.java +++ b/ReactAndroid/src/main/java/com/facebook/react/flat/RCTTextManager.java @@ -14,9 +14,11 @@ package com.facebook.react.flat; */ public final class RCTTextManager extends FlatViewManager { + /* package */ static final String REACT_CLASS = "RCTText"; + @Override public String getName() { - return "RCTText"; + return REACT_CLASS; } @Override diff --git a/ReactAndroid/src/main/java/com/facebook/react/flat/RCTViewManager.java b/ReactAndroid/src/main/java/com/facebook/react/flat/RCTViewManager.java index d27d32c75..98f861e61 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/flat/RCTViewManager.java +++ b/ReactAndroid/src/main/java/com/facebook/react/flat/RCTViewManager.java @@ -9,29 +9,29 @@ package com.facebook.react.flat; -import javax.annotation.Nullable; - -import java.util.Map; - import android.graphics.Rect; import android.os.Build; - import com.facebook.react.bridge.JSApplicationIllegalArgumentException; import com.facebook.react.bridge.ReadableArray; import com.facebook.react.bridge.ReadableMap; import com.facebook.react.common.MapBuilder; import com.facebook.react.uimanager.PixelUtil; import com.facebook.react.uimanager.PointerEvents; +import com.facebook.react.uimanager.ReactClippingViewGroupHelper; import com.facebook.react.uimanager.ViewProps; import com.facebook.react.uimanager.annotations.ReactProp; -import com.facebook.react.uimanager.ReactClippingViewGroupHelper; import com.facebook.react.views.view.ReactDrawableHelper; +import javax.annotation.Nullable; +import java.util.Map; + /** * ViewManager that creates instances of RCTView. */ public final class RCTViewManager extends FlatViewManager { + /* package */ static final String REACT_CLASS = ViewProps.VIEW_CLASS_NAME; + private static final int[] TMP_INT_ARRAY = new int[2]; private static final int CMD_HOTSPOT_UPDATE = 1; @@ -39,7 +39,7 @@ public final class RCTViewManager extends FlatViewManager { @Override public String getName() { - return ViewProps.VIEW_CLASS_NAME; + return REACT_CLASS; } public Map getCommandsMap() { @@ -59,19 +59,19 @@ public final class RCTViewManager extends FlatViewManager { @ReactProp(name = "nativeBackgroundAndroid") public void setHotspot(FlatViewGroup view, @Nullable ReadableMap bg) { view.setHotspot(bg == null ? - null : ReactDrawableHelper.createDrawableFromJSDescription(view.getContext(), bg)); + null : ReactDrawableHelper.createDrawableFromJSDescription(view.getContext(), bg)); } @Override public void receiveCommand( - FlatViewGroup view, - int commandId, - @Nullable ReadableArray args) { + FlatViewGroup view, + int commandId, + @Nullable ReadableArray args) { switch (commandId) { case CMD_HOTSPOT_UPDATE: { if (args == null || args.size() != 2) { throw new JSApplicationIllegalArgumentException( - "Illegal number of arguments for 'updateHotspot' command"); + "Illegal number of arguments for 'updateHotspot' command"); } if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { view.getLocationOnScreen(TMP_INT_ARRAY); @@ -84,7 +84,7 @@ public final class RCTViewManager extends FlatViewManager { case CMD_SET_PRESSED: { if (args == null || args.size() != 1) { throw new JSApplicationIllegalArgumentException( - "Illegal number of arguments for 'setPressed' command"); + "Illegal number of arguments for 'setPressed' command"); } view.setPressed(args.getBoolean(0)); break; @@ -94,8 +94,8 @@ public final class RCTViewManager extends FlatViewManager { @ReactProp(name = ViewProps.NEEDS_OFFSCREEN_ALPHA_COMPOSITING) public void setNeedsOffscreenAlphaCompositing( - FlatViewGroup view, - boolean needsOffscreenAlphaCompositing) { + FlatViewGroup view, + boolean needsOffscreenAlphaCompositing) { view.setNeedsOffscreenAlphaCompositing(needsOffscreenAlphaCompositing); } @@ -132,10 +132,10 @@ public final class RCTViewManager extends FlatViewManager { view.setHitSlopRect(null); } else { view.setHitSlopRect(new Rect( - (int) PixelUtil.toPixelFromDIP(hitSlop.getDouble("left")), - (int) PixelUtil.toPixelFromDIP(hitSlop.getDouble("top")), - (int) PixelUtil.toPixelFromDIP(hitSlop.getDouble("right")), - (int) PixelUtil.toPixelFromDIP(hitSlop.getDouble("bottom")) + (int) PixelUtil.toPixelFromDIP(hitSlop.getDouble("left")), + (int) PixelUtil.toPixelFromDIP(hitSlop.getDouble("top")), + (int) PixelUtil.toPixelFromDIP(hitSlop.getDouble("right")), + (int) PixelUtil.toPixelFromDIP(hitSlop.getDouble("bottom")) )); } } diff --git a/ReactAndroid/src/main/java/com/facebook/react/flat/RCTViewPagerManager.java b/ReactAndroid/src/main/java/com/facebook/react/flat/RCTViewPagerManager.java index 5558b75ec..ea6ef191e 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/flat/RCTViewPagerManager.java +++ b/ReactAndroid/src/main/java/com/facebook/react/flat/RCTViewPagerManager.java @@ -9,15 +9,16 @@ package com.facebook.react.flat; -import java.util.List; - import android.view.View; - import com.facebook.react.views.viewpager.ReactViewPager; import com.facebook.react.views.viewpager.ReactViewPagerManager; +import java.util.List; + public class RCTViewPagerManager extends ReactViewPagerManager { + /* package */ static final String REACT_CLASS = ReactViewPagerManager.REACT_CLASS; + @Override public void addViews(ReactViewPager parent, List views) { parent.setViews(views); diff --git a/ReactAndroid/src/main/java/com/facebook/react/flat/RCTVirtualTextManager.java b/ReactAndroid/src/main/java/com/facebook/react/flat/RCTVirtualTextManager.java index 57d351610..d32cf8eca 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/flat/RCTVirtualTextManager.java +++ b/ReactAndroid/src/main/java/com/facebook/react/flat/RCTVirtualTextManager.java @@ -14,9 +14,11 @@ package com.facebook.react.flat; */ public final class RCTVirtualTextManager extends VirtualViewManager { + /* package */ static final String REACT_CLASS = "RCTVirtualText"; + @Override public String getName() { - return "RCTVirtualText"; + return REACT_CLASS; } @Override diff --git a/ReactAndroid/src/main/java/com/facebook/react/shell/MainReactPackage.java b/ReactAndroid/src/main/java/com/facebook/react/shell/MainReactPackage.java index 7d076813a..cb35735d7 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/shell/MainReactPackage.java +++ b/ReactAndroid/src/main/java/com/facebook/react/shell/MainReactPackage.java @@ -9,16 +9,8 @@ package com.facebook.react.shell; -import javax.inject.Provider; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; -import java.util.List; - import android.content.SharedPreferences; import android.preference.PreferenceManager; - import com.facebook.react.LazyReactPackage; import com.facebook.react.animated.NativeAnimatedModule; import com.facebook.react.bridge.JavaScriptModule; @@ -83,6 +75,12 @@ import com.facebook.react.views.view.ReactViewManager; import com.facebook.react.views.viewpager.ReactViewPagerManager; import com.facebook.react.views.webview.ReactWebViewManager; +import javax.inject.Provider; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; + /** * Package defining basic modules and view managers. */ @@ -261,41 +259,44 @@ public class MainReactPackage extends LazyReactPackage { viewManagers.add(ARTRenderableViewManager.createARTGroupViewManager()); viewManagers.add(ARTRenderableViewManager.createARTShapeViewManager()); viewManagers.add(ARTRenderableViewManager.createARTTextViewManager()); - viewManagers.add(new ARTSurfaceViewManager()); viewManagers.add(new ReactDialogPickerManager()); viewManagers.add(new ReactDrawerLayoutManager()); viewManagers.add(new ReactDropdownPickerManager()); viewManagers.add(new ReactHorizontalScrollViewManager()); - viewManagers.add(new ReactImageManager()); - viewManagers.add(new ReactModalHostManager()); viewManagers.add(new ReactProgressBarViewManager()); - viewManagers.add(new ReactRawTextManager()); viewManagers.add(new ReactScrollViewManager()); viewManagers.add(new ReactSliderManager()); viewManagers.add(new ReactSwitchManager()); - viewManagers.add(new FrescoBasedReactTextInlineImageViewManager()); - viewManagers.add(new ReactTextInputManager()); - viewManagers.add(new ReactTextViewManager()); viewManagers.add(new ReactToolbarManager()); - viewManagers.add(new ReactViewManager()); - viewManagers.add(new ReactViewPagerManager()); - viewManagers.add(new ReactVirtualTextViewManager()); viewManagers.add(new ReactWebViewManager()); viewManagers.add(new SwipeRefreshLayoutManager()); SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(reactContext); - if (preferences.getBoolean("flat_uiimplementation", false)) { - viewManagers.addAll(Arrays.asList( - new RCTViewManager(), - new RCTTextManager(), - new RCTRawTextManager(), - new RCTVirtualTextManager(), - new RCTTextInlineImageManager(), - new RCTImageViewManager(), - new RCTTextInputManager(), - new RCTViewPagerManager(), - new FlatARTSurfaceViewManager(), - new RCTModalHostManager())); + boolean useFlatUi = preferences.getBoolean("flat_uiimplementation", false); + if (useFlatUi) { + // Flat managers + viewManagers.add(new FlatARTSurfaceViewManager()); + viewManagers.add(new RCTTextInlineImageManager()); + viewManagers.add(new RCTImageViewManager()); + viewManagers.add(new RCTModalHostManager()); + viewManagers.add(new RCTRawTextManager()); + viewManagers.add(new RCTTextInputManager()); + viewManagers.add(new RCTTextManager()); + viewManagers.add(new RCTViewManager()); + viewManagers.add(new RCTViewPagerManager()); + viewManagers.add(new RCTVirtualTextManager()); + } else { + // Native equivalents + viewManagers.add(new ARTSurfaceViewManager()); + viewManagers.add(new FrescoBasedReactTextInlineImageViewManager()); + viewManagers.add(new ReactImageManager()); + viewManagers.add(new ReactModalHostManager()); + viewManagers.add(new ReactRawTextManager()); + viewManagers.add(new ReactTextInputManager()); + viewManagers.add(new ReactTextViewManager()); + viewManagers.add(new ReactViewManager()); + viewManagers.add(new ReactViewPagerManager()); + viewManagers.add(new ReactVirtualTextViewManager()); } return viewManagers; diff --git a/ReactAndroid/src/main/java/com/facebook/react/uimanager/ViewManagerRegistry.java b/ReactAndroid/src/main/java/com/facebook/react/uimanager/ViewManagerRegistry.java index 3dfacf1b3..e8eb822eb 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/uimanager/ViewManagerRegistry.java +++ b/ReactAndroid/src/main/java/com/facebook/react/uimanager/ViewManagerRegistry.java @@ -19,14 +19,19 @@ import java.util.Map; */ public class ViewManagerRegistry { - private final Map mViewManagers = new HashMap<>(); + private final Map mViewManagers; public ViewManagerRegistry(List viewManagerList) { + mViewManagers = new HashMap<>(); for (ViewManager viewManager : viewManagerList) { mViewManagers.put(viewManager.getName(), viewManager); } } + public ViewManagerRegistry(Map viewManagerMap) { + mViewManagers = viewManagerMap; + } + public ViewManager get(String className) { ViewManager viewManager = mViewManagers.get(className); if (viewManager != null) {