From fe28118a48f2677395fb209feaa21626143c3164 Mon Sep 17 00:00:00 2001 From: Denis Koroskin Date: Mon, 30 Nov 2015 16:47:12 -0800 Subject: [PATCH] When creating a View using NativeViewHierarchyManager, pass ThemedReactContext instead of root view tag Summary: public NativeViewHierarchyManager.createView() takes int rootViewTag which is only used to resolve ThemedReactContext, but we already have it resolved before we enqueueCreateView, so we can just pass it directly. This makes mRootViewsContext tag -> to ThemedReactContext mapping unnecessary in NativeViewHierarchyManager. Makes the class simpler. Reviewed By: kmagiera, astreet Differential Revision: D2460280 fb-gh-sync-id: 68c503f4fb37ca0b1dcb2abc9e0c33a5225d1f6a --- .../uimanager/NativeViewHierarchyManager.java | 15 +++------------ .../uimanager/NativeViewHierarchyOptimizer.java | 12 ++++++++---- .../react/uimanager/UIImplementation.java | 2 +- .../react/uimanager/UIViewOperationQueue.java | 12 ++++++------ 4 files changed, 18 insertions(+), 23 deletions(-) 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 fddd70478..3be9a92e1 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/uimanager/NativeViewHierarchyManager.java +++ b/ReactAndroid/src/main/java/com/facebook/react/uimanager/NativeViewHierarchyManager.java @@ -62,7 +62,6 @@ import com.facebook.react.touch.JSResponderHandler; private final SparseArray mTagsToViews; private final SparseArray mTagsToViewManagers; private final SparseBooleanArray mRootTags; - private final SparseArray mRootViewsContext; private final ViewManagerRegistry mViewManagers; private final JSResponderHandler mJSResponderHandler = new JSResponderHandler(); private final RootViewManager mRootViewManager = new RootViewManager(); @@ -73,7 +72,6 @@ import com.facebook.react.touch.JSResponderHandler; mTagsToViews = new SparseArray<>(); mTagsToViewManagers = new SparseArray<>(); mRootTags = new SparseBooleanArray(); - mRootViewsContext = new SparseArray<>(); } public AnimationRegistry getAnimationRegistry() { @@ -162,15 +160,14 @@ import com.facebook.react.touch.JSResponderHandler; } public void createView( - int rootViewTagForContext, + ThemedReactContext themedContext, int tag, String className, @Nullable CatalystStylesDiffMap initialProps) { UiThreadUtil.assertOnUiThread(); ViewManager viewManager = mViewManagers.get(className); - View view = - viewManager.createView(mRootViewsContext.get(rootViewTagForContext), mJSResponderHandler); + View view = viewManager.createView(themedContext, mJSResponderHandler); mTagsToViews.put(tag, view); mTagsToViewManagers.put(tag, viewManager); @@ -376,7 +373,6 @@ import com.facebook.react.touch.JSResponderHandler; mTagsToViews.put(tag, view); mTagsToViewManagers.put(tag, mRootViewManager); mRootTags.put(tag, true); - mRootViewsContext.put(tag, themedContext); view.setId(tag); } @@ -416,7 +412,6 @@ import com.facebook.react.touch.JSResponderHandler; View rootView = mTagsToViews.get(rootViewTag); dropView(rootView); mRootTags.delete(rootViewTag); - mRootViewsContext.remove(rootViewTag); } /** @@ -585,14 +580,10 @@ import com.facebook.react.touch.JSResponderHandler; } /** - * @return Themed React context for view with a given {@param reactTag} - in the case of root - * view it returns the context from {@link #mRootViewsContext} and all the other cases it gets the + * @return Themed React context for view with a given {@param reactTag} - it gets the * context directly from the view using {@link View#getContext}. */ private ThemedReactContext getReactContextForView(int reactTag) { - if (mRootTags.get(reactTag)) { - return Assertions.assertNotNull(mRootViewsContext.get(reactTag)); - } View view = mTagsToViews.get(reactTag); if (view == null) { throw new JSApplicationIllegalArgumentException("Could not find view with tag " + reactTag); diff --git a/ReactAndroid/src/main/java/com/facebook/react/uimanager/NativeViewHierarchyOptimizer.java b/ReactAndroid/src/main/java/com/facebook/react/uimanager/NativeViewHierarchyOptimizer.java index fd3946eeb..ef3c2c848 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/uimanager/NativeViewHierarchyOptimizer.java +++ b/ReactAndroid/src/main/java/com/facebook/react/uimanager/NativeViewHierarchyOptimizer.java @@ -69,11 +69,15 @@ public class NativeViewHierarchyOptimizer { */ public void handleCreateView( ReactShadowNode node, - int rootViewTag, + ThemedReactContext themedContext, @Nullable CatalystStylesDiffMap initialProps) { if (!ENABLED) { int tag = node.getReactTag(); - mUIViewOperationQueue.enqueueCreateView(rootViewTag, tag, node.getViewClass(), initialProps); + mUIViewOperationQueue.enqueueCreateView( + themedContext, + tag, + node.getViewClass(), + initialProps); return; } @@ -83,7 +87,7 @@ public class NativeViewHierarchyOptimizer { if (!isLayoutOnly) { mUIViewOperationQueue.enqueueCreateView( - rootViewTag, + themedContext, node.getReactTag(), node.getViewClass(), initialProps); @@ -391,7 +395,7 @@ public class NativeViewHierarchyOptimizer { // Create the view since it doesn't exist in the native hierarchy yet mUIViewOperationQueue.enqueueCreateView( - node.getRootNode().getReactTag(), + node.getRootNode().getThemedContext(), node.getReactTag(), node.getViewClass(), props); diff --git a/ReactAndroid/src/main/java/com/facebook/react/uimanager/UIImplementation.java b/ReactAndroid/src/main/java/com/facebook/react/uimanager/UIImplementation.java index 94b2307b1..369ffda90 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/uimanager/UIImplementation.java +++ b/ReactAndroid/src/main/java/com/facebook/react/uimanager/UIImplementation.java @@ -121,7 +121,7 @@ public class UIImplementation { } if (!cssNode.isVirtual()) { - mNativeViewHierarchyOptimizer.handleCreateView(cssNode, rootViewTag, styles); + mNativeViewHierarchyOptimizer.handleCreateView(cssNode, rootNode.getThemedContext(), styles); } } diff --git a/ReactAndroid/src/main/java/com/facebook/react/uimanager/UIViewOperationQueue.java b/ReactAndroid/src/main/java/com/facebook/react/uimanager/UIViewOperationQueue.java index f26a295ee..6f0ebdcc9 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/uimanager/UIViewOperationQueue.java +++ b/ReactAndroid/src/main/java/com/facebook/react/uimanager/UIViewOperationQueue.java @@ -122,17 +122,17 @@ public class UIViewOperationQueue { private final class CreateViewOperation extends ViewOperation { - private final int mRootViewTagForContext; + private final ThemedReactContext mThemedContext; private final String mClassName; private final @Nullable CatalystStylesDiffMap mInitialProps; public CreateViewOperation( - int rootViewTagForContext, + ThemedReactContext themedContext, int tag, String className, @Nullable CatalystStylesDiffMap initialProps) { super(tag); - mRootViewTagForContext = rootViewTagForContext; + mThemedContext = themedContext; mClassName = className; mInitialProps = initialProps; } @@ -140,7 +140,7 @@ public class UIViewOperationQueue { @Override public void execute() { mNativeViewHierarchyManager.createView( - mRootViewTagForContext, + mThemedContext, mTag, mClassName, mInitialProps); @@ -533,13 +533,13 @@ public class UIViewOperationQueue { } public void enqueueCreateView( - int rootViewTagForContext, + ThemedReactContext themedContext, int viewReactTag, String viewClassName, @Nullable CatalystStylesDiffMap initialProps) { mOperations.add( new CreateViewOperation( - rootViewTagForContext, + themedContext, viewReactTag, viewClassName, initialProps));