From fd0d9877685b5135c73fe5f6ba8fbed0722a81ab Mon Sep 17 00:00:00 2001 From: Denis Koroskin Date: Sat, 28 Nov 2015 11:00:43 -0800 Subject: [PATCH] ShadowNodeHierarchyManager should be supplied externally to UIManagerModule Summary: public UIManagerModule should not be creating UIImplementation. Instead, UIImplementation instance should be supplied to it to allow plugging in different implementations. No functional changes. Reviewed By: astreet Differential Revision: D2464632 fb-gh-sync-id: e7372977c93ceb7ef5e8658e5ee7e8e87f52d851 --- .../facebook/react/CoreModulesPackage.java | 6 ++++- .../react/uimanager/UIImplementation.java | 7 +++--- .../react/uimanager/UIManagerModule.java | 22 ++++++++++++++----- 3 files changed, 25 insertions(+), 10 deletions(-) diff --git a/ReactAndroid/src/main/java/com/facebook/react/CoreModulesPackage.java b/ReactAndroid/src/main/java/com/facebook/react/CoreModulesPackage.java index 02bd96d0d..5dd7b1959 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/CoreModulesPackage.java +++ b/ReactAndroid/src/main/java/com/facebook/react/CoreModulesPackage.java @@ -28,6 +28,7 @@ import com.facebook.react.modules.debug.SourceCodeModule; import com.facebook.react.modules.systeminfo.AndroidInfoModule; import com.facebook.react.uimanager.AppRegistry; import com.facebook.react.uimanager.ReactNative; +import com.facebook.react.uimanager.UIImplementation; import com.facebook.react.uimanager.UIManagerModule; import com.facebook.react.uimanager.ViewManager; import com.facebook.react.uimanager.debug.DebugComponentOwnershipModule; @@ -57,9 +58,12 @@ import com.facebook.systrace.Systrace; Systrace.beginSection(Systrace.TRACE_TAG_REACT_JAVA_BRIDGE, "createUIManagerModule"); UIManagerModule uiManagerModule; try { + List viewManagersList = mReactInstanceManager.createAllViewManagers( + catalystApplicationContext); uiManagerModule = new UIManagerModule( catalystApplicationContext, - mReactInstanceManager.createAllViewManagers(catalystApplicationContext)); + viewManagersList, + new UIImplementation(catalystApplicationContext, viewManagersList)); } finally { Systrace.endSection(Systrace.TRACE_TAG_REACT_JAVA_BRIDGE); } 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 1718fe2bb..94b2307b1 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/uimanager/UIImplementation.java +++ b/ReactAndroid/src/main/java/com/facebook/react/uimanager/UIImplementation.java @@ -11,6 +11,7 @@ package com.facebook.react.uimanager; import javax.annotation.Nullable; import java.util.Arrays; +import java.util.List; import com.facebook.csslayout.CSSLayoutContext; import com.facebook.infer.annotation.Assertions; @@ -39,11 +40,11 @@ public class UIImplementation { private final NativeViewHierarchyOptimizer mNativeViewHierarchyOptimizer; private final int[] mMeasureBuffer = new int[4]; - public UIImplementation(ReactApplicationContext reactContext, ViewManagerRegistry viewManagers) { + public UIImplementation(ReactApplicationContext reactContext, List viewManagers) { + mViewManagers = new ViewManagerRegistry(viewManagers); mOperationsQueue = new UIViewOperationQueue( reactContext, - new NativeViewHierarchyManager(viewManagers)); - mViewManagers = viewManagers; + new NativeViewHierarchyManager(mViewManagers)); mNativeViewHierarchyOptimizer = new NativeViewHierarchyOptimizer( mOperationsQueue, mShadowNodeRegistry); diff --git a/ReactAndroid/src/main/java/com/facebook/react/uimanager/UIManagerModule.java b/ReactAndroid/src/main/java/com/facebook/react/uimanager/UIManagerModule.java index 04724229b..59fd688e3 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/uimanager/UIManagerModule.java +++ b/ReactAndroid/src/main/java/com/facebook/react/uimanager/UIManagerModule.java @@ -1,4 +1,4 @@ -/** + /** * Copyright (c) 2015-present, Facebook, Inc. * All rights reserved. * @@ -78,17 +78,27 @@ public class UIManagerModule extends ReactContextBaseJavaModule implements private int mNextRootViewTag = 1; private int mBatchId = 0; - public UIManagerModule(ReactApplicationContext reactContext, List viewManagerList) { + /** + * This contructor is temporarily here to workaround Sandcastle error. + */ + public UIManagerModule( + ReactApplicationContext reactContext, + List viewManagerList) { + this(reactContext, viewManagerList, new UIImplementation(reactContext, viewManagerList)); + } + + public UIManagerModule( + ReactApplicationContext reactContext, + List viewManagerList, + UIImplementation uiImplementation) { super(reactContext); mEventDispatcher = new EventDispatcher(reactContext); DisplayMetrics displayMetrics = reactContext.getResources().getDisplayMetrics(); DisplayMetricsHolder.setDisplayMetrics(displayMetrics); mModuleConstants = createConstants(displayMetrics, viewManagerList); - reactContext.addLifecycleEventListener(this); + mUIImplementation = uiImplementation; - mUIImplementation = new UIImplementation( - reactContext, - new ViewManagerRegistry(viewManagerList)); + reactContext.addLifecycleEventListener(this); } @Override