diff --git a/ReactAndroid/src/main/java/com/facebook/react/ReactInstanceManager.java b/ReactAndroid/src/main/java/com/facebook/react/ReactInstanceManager.java index a50a17b2f..45d678232 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/ReactInstanceManager.java +++ b/ReactAndroid/src/main/java/com/facebook/react/ReactInstanceManager.java @@ -25,6 +25,7 @@ import static com.facebook.react.bridge.ReactMarkerConstants.REACT_CONTEXT_THREA import static com.facebook.react.bridge.ReactMarkerConstants.REACT_CONTEXT_THREAD_START; import static com.facebook.react.bridge.ReactMarkerConstants.SETUP_REACT_CONTEXT_END; import static com.facebook.react.bridge.ReactMarkerConstants.SETUP_REACT_CONTEXT_START; +import static com.facebook.react.uimanager.common.UIManagerType.FABRIC; import static com.facebook.systrace.Systrace.TRACE_TAG_REACT_APPS; import static com.facebook.systrace.Systrace.TRACE_TAG_REACT_JAVA_BRIDGE; import static com.facebook.systrace.Systrace.TRACE_TAG_REACT_JS_VM_CALLS; @@ -1011,7 +1012,7 @@ public class ReactInstanceManager { CatalystInstance catalystInstance) { Log.d(ReactConstants.TAG, "ReactInstanceManager.attachRootViewToInstance()"); Systrace.beginSection(TRACE_TAG_REACT_JAVA_BRIDGE, "attachRootViewToInstance"); - UIManager uiManagerModule = UIManagerHelper.getUIManager(mCurrentReactContext, rootView.isFabric()); + UIManager uiManagerModule = UIManagerHelper.getUIManager(mCurrentReactContext, rootView.getUIManagerType()); final int rootTag = uiManagerModule.addRootView(rootView); rootView.setRootViewTag(rootTag); rootView.invokeJSEntryPoint(); @@ -1037,7 +1038,7 @@ public class ReactInstanceManager { CatalystInstance catalystInstance) { Log.d(ReactConstants.TAG, "ReactInstanceManager.detachViewFromInstance()"); UiThreadUtil.assertOnUiThread(); - if (rootView.isFabric()) { + if (rootView.getUIManagerType() == FABRIC) { catalystInstance.getJSModule(ReactFabric.class) .unmountComponentAtNode(rootView.getId()); } else { diff --git a/ReactAndroid/src/main/java/com/facebook/react/ReactRootView.java b/ReactAndroid/src/main/java/com/facebook/react/ReactRootView.java index ddf80d63c..9e7c04ba8 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/ReactRootView.java +++ b/ReactAndroid/src/main/java/com/facebook/react/ReactRootView.java @@ -8,6 +8,8 @@ package com.facebook.react; import static com.facebook.systrace.Systrace.TRACE_TAG_REACT_JAVA_BRIDGE; +import static com.facebook.react.uimanager.common.UIManagerType.FABRIC; +import static com.facebook.react.uimanager.common.UIManagerType.DEFAULT; import android.content.Context; import android.graphics.Canvas; @@ -50,6 +52,7 @@ import com.facebook.react.uimanager.common.MeasureSpecProvider; import com.facebook.react.uimanager.common.SizeMonitoringFrameLayout; import com.facebook.react.uimanager.events.EventDispatcher; import com.facebook.systrace.Systrace; +import com.facebook.react.uimanager.common.UIManagerType; import javax.annotation.Nullable; /** @@ -91,7 +94,7 @@ public class ReactRootView extends SizeMonitoringFrameLayout private int mWidthMeasureSpec = MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED); private int mHeightMeasureSpec = MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED); private @Nullable Runnable mJSEntryPoint; - private boolean mIsFabric = false; + private @UIManagerType int mUIManagerType = DEFAULT; public ReactRootView(Context context) { super(context); @@ -404,7 +407,7 @@ public class ReactRootView extends SizeMonitoringFrameLayout @Override public void runGuarded() { UIManagerHelper - .getUIManager(reactApplicationContext, isFabric()) + .getUIManager(reactApplicationContext, getUIManagerType()) .updateRootLayoutSpecs(getRootViewTag(), widthMeasureSpec, heightMeasureSpec); } }); @@ -507,7 +510,7 @@ public class ReactRootView extends SizeMonitoringFrameLayout if (appProperties != null) { appParams.putMap("initialProps", Arguments.fromBundle(appProperties)); } - if (isFabric()) { + if (getUIManagerType() == FABRIC) { appParams.putBoolean("fabric", true); } @@ -584,11 +587,11 @@ public class ReactRootView extends SizeMonitoringFrameLayout } public void setIsFabric(boolean isFabric) { - mIsFabric = isFabric; + mUIManagerType = isFabric ? FABRIC : DEFAULT; } - public boolean isFabric() { - return mIsFabric; + public @UIManagerType int getUIManagerType() { + return mUIManagerType; } @Nullable diff --git a/ReactAndroid/src/main/java/com/facebook/react/bridge/UIManager.java b/ReactAndroid/src/main/java/com/facebook/react/bridge/UIManager.java index 924f84189..875f42cbf 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/bridge/UIManager.java +++ b/ReactAndroid/src/main/java/com/facebook/react/bridge/UIManager.java @@ -26,5 +26,5 @@ public interface UIManager extends JSIModule { * @param commandId {@link int} command id * @param commandArgs {@link ReadableArray} parameters associated with the command */ - void dispatchViewManagerCommand(int reactTag, int commandId, @Nullable ReadableArray commandArgs); + void dispatchCommand(int reactTag, int commandId, @Nullable ReadableArray commandArgs); } diff --git a/ReactAndroid/src/main/java/com/facebook/react/fabric/FabricUIManager.java b/ReactAndroid/src/main/java/com/facebook/react/fabric/FabricUIManager.java index 31a2a866f..f9d1948ab 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/fabric/FabricUIManager.java +++ b/ReactAndroid/src/main/java/com/facebook/react/fabric/FabricUIManager.java @@ -283,8 +283,7 @@ public class FabricUIManager implements UIManager { } } - @Deprecated - public void dispatchViewManagerCommand(int reactTag, int commandId, @Nullable ReadableArray commandArgs) { + public void dispatchCommand(int reactTag, int commandId, @Nullable ReadableArray commandArgs) { mUIViewOperationQueue.enqueueDispatchCommand(reactTag, commandId, commandArgs); } diff --git a/ReactAndroid/src/main/java/com/facebook/react/uimanager/UIManagerHelper.java b/ReactAndroid/src/main/java/com/facebook/react/uimanager/UIManagerHelper.java index 1cf7c6fb3..6503ccb06 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/uimanager/UIManagerHelper.java +++ b/ReactAndroid/src/main/java/com/facebook/react/uimanager/UIManagerHelper.java @@ -1,11 +1,13 @@ package com.facebook.react.uimanager; -import static com.facebook.react.uimanager.common.ViewType.FABRIC; -import static com.facebook.react.uimanager.common.ViewUtil.getViewType; +import static com.facebook.react.uimanager.common.UIManagerType.FABRIC; +import static com.facebook.react.uimanager.common.UIManagerType.DEFAULT; +import static com.facebook.react.uimanager.common.ViewUtil.getUIManagerType; import com.facebook.react.bridge.CatalystInstance; import com.facebook.react.bridge.ReactContext; import com.facebook.react.bridge.UIManager; +import com.facebook.react.uimanager.common.UIManagerType; /** * Helper class for {@link UIManager}. @@ -15,18 +17,27 @@ public class UIManagerHelper { /** * @return a {@link UIManager} that can handle the react tag received by parameter. */ - public static UIManager getUIManager(ReactContext context, int reactTag) { - return getUIManager(context, getViewType(reactTag) == FABRIC); + public static UIManager getUIManagerForReactTag(ReactContext context, int reactTag) { + return getUIManager(context, getUIManagerType(reactTag)); } /** * @return a {@link UIManager} that can handle the react tag received by parameter. */ - public static UIManager getUIManager(ReactContext context, boolean isFabric) { + public static UIManager getUIManager(ReactContext context, @UIManagerType int uiManagerType) { CatalystInstance catalystInstance = context.getCatalystInstance(); - return isFabric ? - catalystInstance.getJSIModule(UIManager.class) : - catalystInstance.getNativeModule(UIManagerModule.class); + UIManager uiManager; + switch (uiManagerType) { + case FABRIC: + uiManager = catalystInstance.getJSIModule(UIManager.class); + break; + case DEFAULT: + uiManager = catalystInstance.getNativeModule(UIManagerModule.class); + break; + default: + throw new IllegalArgumentException("Invalid UIManagerType: " + uiManagerType); + } + return uiManager; } } 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 630f1d973..3937f13de 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/uimanager/UIManagerModule.java +++ b/ReactAndroid/src/main/java/com/facebook/react/uimanager/UIManagerModule.java @@ -10,8 +10,7 @@ package com.facebook.react.uimanager; import static com.facebook.react.bridge.ReactMarkerConstants.CREATE_UI_MANAGER_MODULE_CONSTANTS_END; import static com.facebook.react.bridge.ReactMarkerConstants.CREATE_UI_MANAGER_MODULE_CONSTANTS_START; -import static com.facebook.react.uimanager.common.ViewType.FABRIC; -import static com.facebook.react.uimanager.common.ViewType.PAPER; +import static com.facebook.react.uimanager.common.UIManagerType.DEFAULT; import android.content.ComponentCallbacks2; import android.content.res.Configuration; @@ -586,19 +585,19 @@ public class UIManagerModule extends ReactContextBaseJavaModule implements mUIImplementation.clearJSResponder(); } - @Override @ReactMethod public void dispatchViewManagerCommand(int reactTag, int commandId, @Nullable ReadableArray commandArgs) { //TODO: this is a temporary approach to support ViewManagerCommands in Fabric until // the dispatchViewManagerCommand() method is supported by Fabric JS API. - if (ViewUtil.getViewType(reactTag) == FABRIC) { - UIManagerHelper.getUIManager(getReactApplicationContext(), true) - .dispatchViewManagerCommand(reactTag, commandId, commandArgs); - } else { - mUIImplementation.dispatchViewManagerCommand(reactTag, commandId, commandArgs); - } + UIManagerHelper.getUIManager(getReactApplicationContext(), ViewUtil.getUIManagerType(reactTag)) + .dispatchCommand(reactTag, commandId, commandArgs); } - + + @Override + public void dispatchCommand(int reactTag, int commandId, @Nullable ReadableArray commandArgs) { + mUIImplementation.dispatchViewManagerCommand(reactTag, commandId, commandArgs); + } + @ReactMethod public void playTouchSound() { AudioManager audioManager = (AudioManager) getReactApplicationContext().getSystemService(Context.AUDIO_SERVICE); diff --git a/ReactAndroid/src/main/java/com/facebook/react/uimanager/common/ViewType.java b/ReactAndroid/src/main/java/com/facebook/react/uimanager/common/UIManagerType.java similarity index 64% rename from ReactAndroid/src/main/java/com/facebook/react/uimanager/common/ViewType.java rename to ReactAndroid/src/main/java/com/facebook/react/uimanager/common/UIManagerType.java index 66e4fdbec..44a2e8b8f 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/uimanager/common/ViewType.java +++ b/ReactAndroid/src/main/java/com/facebook/react/uimanager/common/UIManagerType.java @@ -6,16 +6,16 @@ */ package com.facebook.react.uimanager.common; -import static com.facebook.react.uimanager.common.ViewType.FABRIC; -import static com.facebook.react.uimanager.common.ViewType.PAPER; +import static com.facebook.react.uimanager.common.UIManagerType.FABRIC; +import static com.facebook.react.uimanager.common.UIManagerType.DEFAULT; import static java.lang.annotation.RetentionPolicy.SOURCE; import java.lang.annotation.Retention; import android.support.annotation.IntDef; @Retention(SOURCE) -@IntDef({PAPER, FABRIC}) -public @interface ViewType { - int PAPER = 1; +@IntDef({DEFAULT, FABRIC}) +public @interface UIManagerType { + int DEFAULT = 1; int FABRIC = 2; } diff --git a/ReactAndroid/src/main/java/com/facebook/react/uimanager/common/ViewUtil.java b/ReactAndroid/src/main/java/com/facebook/react/uimanager/common/ViewUtil.java index cc7a3ddcb..ef679635e 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/uimanager/common/ViewUtil.java +++ b/ReactAndroid/src/main/java/com/facebook/react/uimanager/common/ViewUtil.java @@ -7,23 +7,22 @@ package com.facebook.react.uimanager.common; -import static com.facebook.react.uimanager.common.ViewType.FABRIC; -import static com.facebook.react.uimanager.common.ViewType.PAPER; +import static com.facebook.react.uimanager.common.UIManagerType.FABRIC; +import static com.facebook.react.uimanager.common.UIManagerType.DEFAULT; public class ViewUtil { /** * Counter for uniquely identifying views. - * - % 10 === 1 means it is a rootTag. * - % 2 === 0 means it is a Fabric tag. * See https://github.com/facebook/react/pull/12587 * * @param reactTag {@link } */ - @ViewType - public static int getViewType(int reactTag) { + @UIManagerType + public static int getUIManagerType(int reactTag) { if (reactTag % 2 == 0) return FABRIC; - return PAPER; + return DEFAULT; } } diff --git a/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/EventDispatcher.java b/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/EventDispatcher.java index c53a9f3de..7feddf17b 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/EventDispatcher.java +++ b/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/EventDispatcher.java @@ -24,6 +24,7 @@ import com.facebook.react.bridge.UiThreadUtil; import com.facebook.react.common.MapBuilder; import com.facebook.react.modules.core.ChoreographerCompat; import com.facebook.react.modules.core.ReactChoreographer; +import com.facebook.react.uimanager.common.UIManagerType; import com.facebook.systrace.Systrace; /**