Skip to content

Commit 6b45fb2

Browse files
mdvaccafacebook-github-bot
authored andcommitted
Create UIManager interface and extract common classes in uimanager/common
Reviewed By: achen1 Differential Revision: D7102674 fbshipit-source-id: e14b6782ad102ec1c3d37988df4bbd4190511f09
1 parent b181b77 commit 6b45fb2

19 files changed

+69
-71
lines changed

ReactAndroid/src/main/java/com/facebook/react/ReactInstanceManager.java

+7-39
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@
5858
import com.facebook.react.bridge.ReactContext;
5959
import com.facebook.react.bridge.ReactMarker;
6060
import com.facebook.react.bridge.ReactMarkerConstants;
61+
import com.facebook.react.bridge.UIManager;
6162
import com.facebook.react.bridge.UiThreadUtil;
6263
import com.facebook.react.bridge.queue.ReactQueueConfigurationSpec;
6364
import com.facebook.react.common.LifecycleState;
@@ -328,40 +329,6 @@ public void createReactContextInBackground() {
328329
recreateReactContextInBackgroundInner();
329330
}
330331

331-
@ThreadConfined(UI)
332-
public void registerAdditionalPackages(List<ReactPackage> packages) {
333-
if (packages == null || packages.isEmpty()) {
334-
return;
335-
}
336-
337-
// CatalystInstance hasn't been created, so add packages for later evaluation
338-
if (!hasStartedCreatingInitialContext()) {
339-
synchronized (mPackages) {
340-
for (ReactPackage p : packages) {
341-
if (!mPackages.contains(p)) {
342-
mPackages.add(p);
343-
}
344-
}
345-
}
346-
return;
347-
}
348-
349-
ReactContext context = getCurrentReactContext();
350-
CatalystInstance catalystInstance = context != null ? context.getCatalystInstance() : null;
351-
352-
Assertions.assertNotNull(catalystInstance, "CatalystInstance null after hasStartedCreatingInitialContext true.");
353-
354-
final ReactApplicationContext reactContext = getReactApplicationContext();
355-
356-
NativeModuleRegistry nativeModuleRegistry = processPackages(reactContext, packages, true);
357-
catalystInstance.extendNativeModules(nativeModuleRegistry);
358-
}
359-
360-
@VisibleForTesting
361-
public @Nullable ReactApplicationContext getReactApplicationContext() {
362-
return new ReactApplicationContext(mApplicationContext);
363-
}
364-
365332
/**
366333
* Recreate the react application and context. This should be called if configuration has changed
367334
* or the developer has requested the app to be reloaded. It should only be called after an
@@ -1040,8 +1007,7 @@ private void attachRootViewToInstance(
10401007
CatalystInstance catalystInstance) {
10411008
Log.d(ReactConstants.TAG, "ReactInstanceManager.attachRootViewToInstance()");
10421009
Systrace.beginSection(TRACE_TAG_REACT_JAVA_BRIDGE, "attachRootViewToInstance");
1043-
UIManagerModule uiManagerModule = catalystInstance.getNativeModule(UIManagerModule.class);
1044-
final int rootTag = uiManagerModule.addRootView(rootView);
1010+
final int rootTag = catalystInstance.getNativeModule(UIManagerModule.class).addRootView(rootView);
10451011
rootView.setRootViewTag(rootTag);
10461012
rootView.invokeJSEntryPoint();
10471013
Systrace.beginAsyncSection(
@@ -1097,7 +1063,7 @@ private ReactApplicationContext createReactContext(
10971063
JSBundleLoader jsBundleLoader) {
10981064
Log.d(ReactConstants.TAG, "ReactInstanceManager.createReactContext()");
10991065
ReactMarker.logMarker(CREATE_REACT_CONTEXT_START);
1100-
final ReactApplicationContext reactContext = getReactApplicationContext();
1066+
final ReactApplicationContext reactContext = new ReactApplicationContext(mApplicationContext);
11011067

11021068
if (mUseDeveloperSupport) {
11031069
reactContext.setNativeModuleCallExceptionHandler(mDevSupportManager);
@@ -1113,8 +1079,7 @@ private ReactApplicationContext createReactContext(
11131079
.setJSExecutor(jsExecutor)
11141080
.setRegistry(nativeModuleRegistry)
11151081
.setJSBundleLoader(jsBundleLoader)
1116-
.setNativeModuleCallExceptionHandler(exceptionHandler)
1117-
.setBridgeListener(mBridgeListener);
1082+
.setNativeModuleCallExceptionHandler(exceptionHandler);
11181083

11191084
ReactMarker.logMarker(CREATE_CATALYST_INSTANCE_START);
11201085
// CREATE_CATALYST_INSTANCE_END is in JSCExecutor.cpp
@@ -1126,6 +1091,9 @@ private ReactApplicationContext createReactContext(
11261091
Systrace.endSection(TRACE_TAG_REACT_JAVA_BRIDGE);
11271092
ReactMarker.logMarker(CREATE_CATALYST_INSTANCE_END);
11281093
}
1094+
if (mBridgeListener != null) {
1095+
mBridgeListener.onBridgeStarted(reactContext, catalystInstance);
1096+
}
11291097

11301098
if (mBridgeIdleDebugListener != null) {
11311099
catalystInstance.addBridgeIdleDebugListener(mBridgeIdleDebugListener);

ReactAndroid/src/main/java/com/facebook/react/ReactRootView.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -41,10 +41,10 @@
4141
import com.facebook.react.uimanager.DisplayMetricsHolder;
4242
import com.facebook.react.uimanager.IllegalViewOperationException;
4343
import com.facebook.react.uimanager.JSTouchDispatcher;
44-
import com.facebook.react.uimanager.MeasureSpecProvider;
44+
import com.facebook.react.uimanager.common.MeasureSpecProvider;
4545
import com.facebook.react.uimanager.PixelUtil;
4646
import com.facebook.react.uimanager.RootView;
47-
import com.facebook.react.uimanager.SizeMonitoringFrameLayout;
47+
import com.facebook.react.uimanager.common.SizeMonitoringFrameLayout;
4848
import com.facebook.react.uimanager.UIManagerModule;
4949
import com.facebook.react.uimanager.events.EventDispatcher;
5050
import com.facebook.systrace.Systrace;

ReactAndroid/src/main/java/com/facebook/react/bridge/BUCK

+1
Original file line numberDiff line numberDiff line change
@@ -27,5 +27,6 @@ rn_android_library(
2727
react_native_target("java/com/facebook/debug/holder:holder"),
2828
react_native_target("java/com/facebook/react/common:common"),
2929
react_native_target("java/com/facebook/react/module/model:model"),
30+
react_native_target("java/com/facebook/react/uimanager/common:common"),
3031
] + ([react_native_target("jni/react/jni:jni")] if not IS_OSS_BUILD else []),
3132
)

ReactAndroid/src/main/java/com/facebook/react/bridge/BridgeListener.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,6 @@ public interface BridgeListener {
99
* Called right after the RN Bridge is initialized
1010
* @param catalystInstance {@link CatalystInstance} bridge
1111
*/
12-
void onBridgeStarted(CatalystInstance catalystInstance);
12+
void onBridgeStarted(ReactApplicationContext reactApplicationContext, CatalystInstance catalystInstance);
1313

1414
}

ReactAndroid/src/main/java/com/facebook/react/bridge/CatalystInstance.java

+4
Original file line numberDiff line numberDiff line change
@@ -98,4 +98,8 @@ void callFunction(
9898
* synchronized(jsContext) { nativeThingNeedingJsContext(jsContext.get()); }
9999
*/
100100
JavaScriptContextHolder getJavaScriptContextHolder();
101+
102+
<T extends UIManager> void setFabricUIManager(T fabricUIManager);
103+
104+
<T extends UIManager> T getFabricUIManager();
101105
}

ReactAndroid/src/main/java/com/facebook/react/bridge/CatalystInstanceImpl.java

+11-14
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,7 @@ public String toString() {
8585
private volatile boolean mAcceptCalls = false;
8686

8787
private boolean mJSBundleHasLoaded;
88+
private UIManager mFabricUIManager;
8889
private @Nullable String mSourceURL;
8990

9091
private JavaScriptContextHolder mJavaScriptContextHolder;
@@ -98,8 +99,7 @@ private CatalystInstanceImpl(
9899
final JavaScriptExecutor jsExecutor,
99100
final NativeModuleRegistry nativeModuleRegistry,
100101
final JSBundleLoader jsBundleLoader,
101-
NativeModuleCallExceptionHandler nativeModuleCallExceptionHandler,
102-
final BridgeListener bridgeListener) {
102+
NativeModuleCallExceptionHandler nativeModuleCallExceptionHandler) {
103103
Log.d(ReactConstants.TAG, "Initializing React Xplat Bridge.");
104104
mHybridData = initHybrid();
105105

@@ -125,9 +125,6 @@ private CatalystInstanceImpl(
125125
Log.d(ReactConstants.TAG, "Initializing React Xplat Bridge after initializeBridge");
126126

127127
mJavaScriptContextHolder = new JavaScriptContextHolder(getJavaScriptContext());
128-
if (bridgeListener != null) {
129-
bridgeListener.onBridgeStarted(this);
130-
}
131128
}
132129

133130
private static class BridgeCallback implements ReactCallback {
@@ -456,6 +453,14 @@ public JavaScriptContextHolder getJavaScriptContextHolder() {
456453
return mJavaScriptContextHolder;
457454
}
458455

456+
public UIManager getFabricUIManager() {
457+
return mFabricUIManager;
458+
}
459+
460+
public void setFabricUIManager(UIManager fabricUIManager) {
461+
mFabricUIManager = fabricUIManager;
462+
}
463+
459464
private native long getJavaScriptContext();
460465

461466
private void incrementPendingJSCalls() {
@@ -555,7 +560,6 @@ public static class Builder {
555560
private @Nullable NativeModuleRegistry mRegistry;
556561
private @Nullable JavaScriptExecutor mJSExecutor;
557562
private @Nullable NativeModuleCallExceptionHandler mNativeModuleCallExceptionHandler;
558-
private @Nullable BridgeListener mBridgeListener;
559563

560564

561565
public Builder setReactQueueConfigurationSpec(
@@ -585,20 +589,13 @@ public Builder setNativeModuleCallExceptionHandler(
585589
return this;
586590
}
587591

588-
public Builder setBridgeListener(
589-
BridgeListener listener) {
590-
mBridgeListener = listener;
591-
return this;
592-
}
593-
594592
public CatalystInstanceImpl build() {
595593
return new CatalystInstanceImpl(
596594
Assertions.assertNotNull(mReactQueueConfigurationSpec),
597595
Assertions.assertNotNull(mJSExecutor),
598596
Assertions.assertNotNull(mRegistry),
599597
Assertions.assertNotNull(mJSBundleLoader),
600-
Assertions.assertNotNull(mNativeModuleCallExceptionHandler),
601-
mBridgeListener);
598+
Assertions.assertNotNull(mNativeModuleCallExceptionHandler));
602599
}
603600
}
604601
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package com.facebook.react.bridge;
2+
3+
import com.facebook.react.uimanager.common.MeasureSpecProvider;
4+
import com.facebook.react.uimanager.common.SizeMonitoringFrameLayout;
5+
6+
public interface UIManager {
7+
8+
/**
9+
* Registers a new root view.
10+
*/
11+
<T extends SizeMonitoringFrameLayout & MeasureSpecProvider> int addRootView(final T rootView);
12+
13+
}

ReactAndroid/src/main/java/com/facebook/react/fabric/FabricUIManagerModule.java

+4-4
Original file line numberDiff line numberDiff line change
@@ -5,17 +5,17 @@
55
import com.facebook.infer.annotation.Assertions;
66
import com.facebook.react.bridge.ReactApplicationContext;
77
import com.facebook.react.bridge.ReadableNativeMap;
8+
import com.facebook.react.bridge.UIManager;
89
import com.facebook.react.modules.i18nmanager.I18nUtil;
9-
import com.facebook.react.uimanager.MeasureSpecProvider;
1010
import com.facebook.react.uimanager.ReactRootViewTagGenerator;
1111
import com.facebook.react.uimanager.ReactShadowNode;
1212
import com.facebook.react.uimanager.ReactShadowNodeImpl;
1313
import com.facebook.react.uimanager.ReactStylesDiffMap;
14-
import com.facebook.react.uimanager.SizeMonitoringFrameLayout;
1514
import com.facebook.react.uimanager.ThemedReactContext;
16-
import com.facebook.react.uimanager.UIModule;
1715
import com.facebook.react.uimanager.ViewManager;
1816
import com.facebook.react.uimanager.ViewManagerRegistry;
17+
import com.facebook.react.uimanager.common.MeasureSpecProvider;
18+
import com.facebook.react.uimanager.common.SizeMonitoringFrameLayout;
1919
import java.util.ArrayList;
2020
import java.util.List;
2121
import javax.annotation.Nullable;
@@ -24,7 +24,7 @@
2424
* Fabric API.
2525
*/
2626
@SuppressWarnings("unused") // used from JNI
27-
public class FabricUIManagerModule implements UIModule {
27+
public class FabricUIManagerModule implements UIManager {
2828

2929
private final RootShadowNodeRegistry mRootShadowNodeRegistry = new RootShadowNodeRegistry();
3030
private final ReactApplicationContext mReactApplicationContext;

ReactAndroid/src/main/java/com/facebook/react/flat/FlatNativeViewHierarchyManager.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
import android.view.ViewGroup;
2020

2121
import com.facebook.react.uimanager.NativeViewHierarchyManager;
22-
import com.facebook.react.uimanager.SizeMonitoringFrameLayout;
22+
import com.facebook.react.uimanager.common.SizeMonitoringFrameLayout;
2323
import com.facebook.react.uimanager.ThemedReactContext;
2424
import com.facebook.react.uimanager.ViewGroupManager;
2525
import com.facebook.react.uimanager.ViewManagerRegistry;

ReactAndroid/src/main/java/com/facebook/react/uimanager/BUCK

+2
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ rn_android_library(
1414
exported_deps = [
1515
":DisplayMetrics",
1616
react_native_dep("third-party/java/jsr-305:jsr-305"),
17+
react_native_target("java/com/facebook/react/uimanager/common:common"),
1718
],
1819
provided_deps = [
1920
react_native_dep("third-party/android/support/v4:lib-support-v4"),
@@ -40,6 +41,7 @@ rn_android_library(
4041
react_native_target("java/com/facebook/react/touch:touch"),
4142
react_native_target("java/com/facebook/react/uimanager/annotations:annotations"),
4243
react_native_target("java/com/facebook/react/uimanager/util:util"),
44+
react_native_target("java/com/facebook/react/uimanager/common:common"),
4345
react_native_target("res:uimanager"),
4446
],
4547
)

ReactAndroid/src/main/java/com/facebook/react/uimanager/NativeViewHierarchyManager.java

+1
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
import com.facebook.react.bridge.SoftAssertions;
3030
import com.facebook.react.bridge.UiThreadUtil;
3131
import com.facebook.react.touch.JSResponderHandler;
32+
import com.facebook.react.uimanager.common.SizeMonitoringFrameLayout;
3233
import com.facebook.react.uimanager.layoutanimation.LayoutAnimationController;
3334
import com.facebook.react.uimanager.layoutanimation.LayoutAnimationListener;
3435
import com.facebook.systrace.Systrace;

ReactAndroid/src/main/java/com/facebook/react/uimanager/RootViewManager.java

+1
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
package com.facebook.react.uimanager;
99

1010
import android.view.ViewGroup;
11+
import com.facebook.react.uimanager.common.SizeMonitoringFrameLayout;
1112

1213
/**
1314
* View manager for ReactRootView components.

ReactAndroid/src/main/java/com/facebook/react/uimanager/UIImplementation.java

+2
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@
2424
import com.facebook.react.bridge.WritableArray;
2525
import com.facebook.react.common.ReactConstants;
2626
import com.facebook.react.modules.i18nmanager.I18nUtil;
27+
import com.facebook.react.uimanager.common.MeasureSpecProvider;
28+
import com.facebook.react.uimanager.common.SizeMonitoringFrameLayout;
2729
import com.facebook.react.uimanager.debug.NotThreadSafeViewHierarchyUpdateDebugListener;
2830
import com.facebook.react.uimanager.events.EventDispatcher;
2931
import com.facebook.systrace.Systrace;

ReactAndroid/src/main/java/com/facebook/react/uimanager/UIManagerModule.java

+4-1
Original file line numberDiff line numberDiff line change
@@ -28,10 +28,13 @@
2828
import com.facebook.react.bridge.ReactMethod;
2929
import com.facebook.react.bridge.ReadableArray;
3030
import com.facebook.react.bridge.ReadableMap;
31+
import com.facebook.react.bridge.UIManager;
3132
import com.facebook.react.bridge.WritableMap;
3233
import com.facebook.react.common.MapBuilder;
3334
import com.facebook.react.common.ReactConstants;
3435
import com.facebook.react.module.annotations.ReactModule;
36+
import com.facebook.react.uimanager.common.MeasureSpecProvider;
37+
import com.facebook.react.uimanager.common.SizeMonitoringFrameLayout;
3538
import com.facebook.react.uimanager.debug.NotThreadSafeViewHierarchyUpdateDebugListener;
3639
import com.facebook.react.uimanager.events.EventDispatcher;
3740
import com.facebook.systrace.Systrace;
@@ -72,7 +75,7 @@
7275
*/
7376
@ReactModule(name = UIManagerModule.NAME)
7477
public class UIManagerModule extends ReactContextBaseJavaModule implements
75-
OnBatchCompleteListener, LifecycleEventListener, PerformanceCounter, UIModule {
78+
OnBatchCompleteListener, LifecycleEventListener, PerformanceCounter, UIManager {
7679

7780
/**
7881
* Enables lazy discovery of a specific {@link ViewManager} by its name.

ReactAndroid/src/main/java/com/facebook/react/uimanager/UIModule.java

-7
This file was deleted.

ReactAndroid/src/main/java/com/facebook/react/uimanager/UIViewOperationQueue.java

+1
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import com.facebook.react.bridge.UiThreadUtil;
2222
import com.facebook.react.common.ReactConstants;
2323
import com.facebook.react.modules.core.ReactChoreographer;
24+
import com.facebook.react.uimanager.common.SizeMonitoringFrameLayout;
2425
import com.facebook.react.uimanager.debug.NotThreadSafeViewHierarchyUpdateDebugListener;
2526
import com.facebook.systrace.Systrace;
2627
import com.facebook.systrace.SystraceMessage;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
load("//ReactNative:DEFS.bzl", "rn_android_library", "react_native_dep", "react_native_target")
2+
3+
rn_android_library(
4+
name = "common",
5+
srcs = glob(["*.java"]),
6+
visibility = [
7+
"PUBLIC",
8+
],
9+
deps = [
10+
react_native_dep("third-party/java/jsr-305:jsr-305"),
11+
],
12+
)

ReactAndroid/src/main/java/com/facebook/react/uimanager/MeasureSpecProvider.java ReactAndroid/src/main/java/com/facebook/react/uimanager/common/MeasureSpecProvider.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
// Copyright 2004-present Facebook. All Rights Reserved.
22

3-
package com.facebook.react.uimanager;
3+
package com.facebook.react.uimanager.common;
44

55
import android.view.View;
66

ReactAndroid/src/main/java/com/facebook/react/uimanager/SizeMonitoringFrameLayout.java ReactAndroid/src/main/java/com/facebook/react/uimanager/common/SizeMonitoringFrameLayout.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
* LICENSE file in the root directory of this source tree.
66
*/
77

8-
package com.facebook.react.uimanager;
8+
package com.facebook.react.uimanager.common;
99

1010
import javax.annotation.Nullable;
1111

0 commit comments

Comments
 (0)