Refactor isFabric() -> getUIManagerType()

Reviewed By: achen1

Differential Revision: D7897855

fbshipit-source-id: 6b52d989187124c81ab8ee4a732703b46b05dc65
This commit is contained in:
David Vacca 2018-05-14 09:22:15 -07:00 коммит произвёл Facebook Github Bot
Родитель 3ac914478d
Коммит a83cddf037
9 изменённых файлов: 53 добавлений и 40 удалений

Просмотреть файл

@ -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.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_END;
import static com.facebook.react.bridge.ReactMarkerConstants.SETUP_REACT_CONTEXT_START; 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_APPS;
import static com.facebook.systrace.Systrace.TRACE_TAG_REACT_JAVA_BRIDGE; import static com.facebook.systrace.Systrace.TRACE_TAG_REACT_JAVA_BRIDGE;
import static com.facebook.systrace.Systrace.TRACE_TAG_REACT_JS_VM_CALLS; import static com.facebook.systrace.Systrace.TRACE_TAG_REACT_JS_VM_CALLS;
@ -1011,7 +1012,7 @@ public class ReactInstanceManager {
CatalystInstance catalystInstance) { CatalystInstance catalystInstance) {
Log.d(ReactConstants.TAG, "ReactInstanceManager.attachRootViewToInstance()"); Log.d(ReactConstants.TAG, "ReactInstanceManager.attachRootViewToInstance()");
Systrace.beginSection(TRACE_TAG_REACT_JAVA_BRIDGE, "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); final int rootTag = uiManagerModule.addRootView(rootView);
rootView.setRootViewTag(rootTag); rootView.setRootViewTag(rootTag);
rootView.invokeJSEntryPoint(); rootView.invokeJSEntryPoint();
@ -1037,7 +1038,7 @@ public class ReactInstanceManager {
CatalystInstance catalystInstance) { CatalystInstance catalystInstance) {
Log.d(ReactConstants.TAG, "ReactInstanceManager.detachViewFromInstance()"); Log.d(ReactConstants.TAG, "ReactInstanceManager.detachViewFromInstance()");
UiThreadUtil.assertOnUiThread(); UiThreadUtil.assertOnUiThread();
if (rootView.isFabric()) { if (rootView.getUIManagerType() == FABRIC) {
catalystInstance.getJSModule(ReactFabric.class) catalystInstance.getJSModule(ReactFabric.class)
.unmountComponentAtNode(rootView.getId()); .unmountComponentAtNode(rootView.getId());
} else { } else {

Просмотреть файл

@ -8,6 +8,8 @@
package com.facebook.react; package com.facebook.react;
import static com.facebook.systrace.Systrace.TRACE_TAG_REACT_JAVA_BRIDGE; 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.content.Context;
import android.graphics.Canvas; 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.common.SizeMonitoringFrameLayout;
import com.facebook.react.uimanager.events.EventDispatcher; import com.facebook.react.uimanager.events.EventDispatcher;
import com.facebook.systrace.Systrace; import com.facebook.systrace.Systrace;
import com.facebook.react.uimanager.common.UIManagerType;
import javax.annotation.Nullable; import javax.annotation.Nullable;
/** /**
@ -91,7 +94,7 @@ public class ReactRootView extends SizeMonitoringFrameLayout
private int mWidthMeasureSpec = MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED); private int mWidthMeasureSpec = MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED);
private int mHeightMeasureSpec = MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED); private int mHeightMeasureSpec = MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED);
private @Nullable Runnable mJSEntryPoint; private @Nullable Runnable mJSEntryPoint;
private boolean mIsFabric = false; private @UIManagerType int mUIManagerType = DEFAULT;
public ReactRootView(Context context) { public ReactRootView(Context context) {
super(context); super(context);
@ -404,7 +407,7 @@ public class ReactRootView extends SizeMonitoringFrameLayout
@Override @Override
public void runGuarded() { public void runGuarded() {
UIManagerHelper UIManagerHelper
.getUIManager(reactApplicationContext, isFabric()) .getUIManager(reactApplicationContext, getUIManagerType())
.updateRootLayoutSpecs(getRootViewTag(), widthMeasureSpec, heightMeasureSpec); .updateRootLayoutSpecs(getRootViewTag(), widthMeasureSpec, heightMeasureSpec);
} }
}); });
@ -507,7 +510,7 @@ public class ReactRootView extends SizeMonitoringFrameLayout
if (appProperties != null) { if (appProperties != null) {
appParams.putMap("initialProps", Arguments.fromBundle(appProperties)); appParams.putMap("initialProps", Arguments.fromBundle(appProperties));
} }
if (isFabric()) { if (getUIManagerType() == FABRIC) {
appParams.putBoolean("fabric", true); appParams.putBoolean("fabric", true);
} }
@ -584,11 +587,11 @@ public class ReactRootView extends SizeMonitoringFrameLayout
} }
public void setIsFabric(boolean isFabric) { public void setIsFabric(boolean isFabric) {
mIsFabric = isFabric; mUIManagerType = isFabric ? FABRIC : DEFAULT;
} }
public boolean isFabric() { public @UIManagerType int getUIManagerType() {
return mIsFabric; return mUIManagerType;
} }
@Nullable @Nullable

Просмотреть файл

@ -26,5 +26,5 @@ public interface UIManager extends JSIModule {
* @param commandId {@link int} command id * @param commandId {@link int} command id
* @param commandArgs {@link ReadableArray} parameters associated with the command * @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);
} }

Просмотреть файл

@ -283,8 +283,7 @@ public class FabricUIManager implements UIManager {
} }
} }
@Deprecated public void dispatchCommand(int reactTag, int commandId, @Nullable ReadableArray commandArgs) {
public void dispatchViewManagerCommand(int reactTag, int commandId, @Nullable ReadableArray commandArgs) {
mUIViewOperationQueue.enqueueDispatchCommand(reactTag, commandId, commandArgs); mUIViewOperationQueue.enqueueDispatchCommand(reactTag, commandId, commandArgs);
} }

Просмотреть файл

@ -1,11 +1,13 @@
package com.facebook.react.uimanager; package com.facebook.react.uimanager;
import static com.facebook.react.uimanager.common.ViewType.FABRIC; import static com.facebook.react.uimanager.common.UIManagerType.FABRIC;
import static com.facebook.react.uimanager.common.ViewUtil.getViewType; 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.CatalystInstance;
import com.facebook.react.bridge.ReactContext; import com.facebook.react.bridge.ReactContext;
import com.facebook.react.bridge.UIManager; import com.facebook.react.bridge.UIManager;
import com.facebook.react.uimanager.common.UIManagerType;
/** /**
* Helper class for {@link UIManager}. * 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. * @return a {@link UIManager} that can handle the react tag received by parameter.
*/ */
public static UIManager getUIManager(ReactContext context, int reactTag) { public static UIManager getUIManagerForReactTag(ReactContext context, int reactTag) {
return getUIManager(context, getViewType(reactTag) == FABRIC); return getUIManager(context, getUIManagerType(reactTag));
} }
/** /**
* @return a {@link UIManager} that can handle the react tag received by parameter. * @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(); CatalystInstance catalystInstance = context.getCatalystInstance();
return isFabric ? UIManager uiManager;
catalystInstance.getJSIModule(UIManager.class) : switch (uiManagerType) {
catalystInstance.getNativeModule(UIManagerModule.class); 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;
} }
} }

Просмотреть файл

@ -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_END;
import static com.facebook.react.bridge.ReactMarkerConstants.CREATE_UI_MANAGER_MODULE_CONSTANTS_START; 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.UIManagerType.DEFAULT;
import static com.facebook.react.uimanager.common.ViewType.PAPER;
import android.content.ComponentCallbacks2; import android.content.ComponentCallbacks2;
import android.content.res.Configuration; import android.content.res.Configuration;
@ -586,19 +585,19 @@ public class UIManagerModule extends ReactContextBaseJavaModule implements
mUIImplementation.clearJSResponder(); mUIImplementation.clearJSResponder();
} }
@Override
@ReactMethod @ReactMethod
public void dispatchViewManagerCommand(int reactTag, int commandId, @Nullable ReadableArray commandArgs) { public void dispatchViewManagerCommand(int reactTag, int commandId, @Nullable ReadableArray commandArgs) {
//TODO: this is a temporary approach to support ViewManagerCommands in Fabric until //TODO: this is a temporary approach to support ViewManagerCommands in Fabric until
// the dispatchViewManagerCommand() method is supported by Fabric JS API. // the dispatchViewManagerCommand() method is supported by Fabric JS API.
if (ViewUtil.getViewType(reactTag) == FABRIC) { UIManagerHelper.getUIManager(getReactApplicationContext(), ViewUtil.getUIManagerType(reactTag))
UIManagerHelper.getUIManager(getReactApplicationContext(), true) .dispatchCommand(reactTag, commandId, commandArgs);
.dispatchViewManagerCommand(reactTag, commandId, commandArgs);
} else {
mUIImplementation.dispatchViewManagerCommand(reactTag, commandId, commandArgs);
}
} }
@Override
public void dispatchCommand(int reactTag, int commandId, @Nullable ReadableArray commandArgs) {
mUIImplementation.dispatchViewManagerCommand(reactTag, commandId, commandArgs);
}
@ReactMethod @ReactMethod
public void playTouchSound() { public void playTouchSound() {
AudioManager audioManager = (AudioManager) getReactApplicationContext().getSystemService(Context.AUDIO_SERVICE); AudioManager audioManager = (AudioManager) getReactApplicationContext().getSystemService(Context.AUDIO_SERVICE);

Просмотреть файл

@ -6,16 +6,16 @@
*/ */
package com.facebook.react.uimanager.common; package com.facebook.react.uimanager.common;
import static com.facebook.react.uimanager.common.ViewType.FABRIC; import static com.facebook.react.uimanager.common.UIManagerType.FABRIC;
import static com.facebook.react.uimanager.common.ViewType.PAPER; import static com.facebook.react.uimanager.common.UIManagerType.DEFAULT;
import static java.lang.annotation.RetentionPolicy.SOURCE; import static java.lang.annotation.RetentionPolicy.SOURCE;
import java.lang.annotation.Retention; import java.lang.annotation.Retention;
import android.support.annotation.IntDef; import android.support.annotation.IntDef;
@Retention(SOURCE) @Retention(SOURCE)
@IntDef({PAPER, FABRIC}) @IntDef({DEFAULT, FABRIC})
public @interface ViewType { public @interface UIManagerType {
int PAPER = 1; int DEFAULT = 1;
int FABRIC = 2; int FABRIC = 2;
} }

Просмотреть файл

@ -7,23 +7,22 @@
package com.facebook.react.uimanager.common; package com.facebook.react.uimanager.common;
import static com.facebook.react.uimanager.common.ViewType.FABRIC; import static com.facebook.react.uimanager.common.UIManagerType.FABRIC;
import static com.facebook.react.uimanager.common.ViewType.PAPER; import static com.facebook.react.uimanager.common.UIManagerType.DEFAULT;
public class ViewUtil { public class ViewUtil {
/** /**
* Counter for uniquely identifying views. * Counter for uniquely identifying views.
* - % 10 === 1 means it is a rootTag.
* - % 2 === 0 means it is a Fabric tag. * - % 2 === 0 means it is a Fabric tag.
* See https://github.com/facebook/react/pull/12587 * See https://github.com/facebook/react/pull/12587
* *
* @param reactTag {@link } * @param reactTag {@link }
*/ */
@ViewType @UIManagerType
public static int getViewType(int reactTag) { public static int getUIManagerType(int reactTag) {
if (reactTag % 2 == 0) return FABRIC; if (reactTag % 2 == 0) return FABRIC;
return PAPER; return DEFAULT;
} }
} }

Просмотреть файл

@ -24,6 +24,7 @@ import com.facebook.react.bridge.UiThreadUtil;
import com.facebook.react.common.MapBuilder; import com.facebook.react.common.MapBuilder;
import com.facebook.react.modules.core.ChoreographerCompat; import com.facebook.react.modules.core.ChoreographerCompat;
import com.facebook.react.modules.core.ReactChoreographer; import com.facebook.react.modules.core.ReactChoreographer;
import com.facebook.react.uimanager.common.UIManagerType;
import com.facebook.systrace.Systrace; import com.facebook.systrace.Systrace;
/** /**