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
This commit is contained in:
Denis Koroskin
2015-11-30 16:47:12 -08:00
committed by facebook-github-bot-4
parent c4c74215fa
commit fe28118a48
4 changed files with 18 additions and 23 deletions

View File

@@ -62,7 +62,6 @@ import com.facebook.react.touch.JSResponderHandler;
private final SparseArray<View> mTagsToViews;
private final SparseArray<ViewManager> mTagsToViewManagers;
private final SparseBooleanArray mRootTags;
private final SparseArray<ThemedReactContext> 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);

View File

@@ -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);

View File

@@ -121,7 +121,7 @@ public class UIImplementation {
}
if (!cssNode.isVirtual()) {
mNativeViewHierarchyOptimizer.handleCreateView(cssNode, rootViewTag, styles);
mNativeViewHierarchyOptimizer.handleCreateView(cssNode, rootNode.getThemedContext(), styles);
}
}

View File

@@ -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));