From 71f00798099534ed02c7f0d0928151cdaf1707f3 Mon Sep 17 00:00:00 2001 From: Valentin Shergin Date: Sun, 7 Jul 2019 22:42:50 -0700 Subject: [PATCH] Fabric: New extendend signature of `ViewManager::updateState()` Summary: Now, the signature of `updateState` method practically copies the signature of `updateLocalData`. We need that to support all features that `updateLocalData` does support now (to migrate from it). Reviewed By: mdvacca Differential Revision: D15962377 fbshipit-source-id: 61e0af6c191e0c6a358c5859613e9c512f91d29a --- .../facebook/react/fabric/mounting/MountingManager.java | 8 ++++++-- .../java/com/facebook/react/uimanager/ViewManager.java | 5 ++++- .../facebook/react/views/modal/ReactModalHostManager.java | 5 ++++- 3 files changed, 14 insertions(+), 4 deletions(-) diff --git a/ReactAndroid/src/main/java/com/facebook/react/fabric/mounting/MountingManager.java b/ReactAndroid/src/main/java/com/facebook/react/fabric/mounting/MountingManager.java index 848861b3356..a8695b84013 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/fabric/mounting/MountingManager.java +++ b/ReactAndroid/src/main/java/com/facebook/react/fabric/mounting/MountingManager.java @@ -210,7 +210,7 @@ public class MountingManager { componentName, propsDiffMap, stateWrapper, themedReactContext); view.setId(reactTag); if (stateWrapper != null) { - viewManager.updateState(view, stateWrapper); + viewManager.updateState(view, propsDiffMap, stateWrapper); } } @@ -325,7 +325,11 @@ public class MountingManager { if (viewManager == null) { throw new IllegalStateException("Unable to find ViewManager for tag: " + reactTag); } - viewManager.updateState(viewState.mView, stateWrapper); + Object extraData = + viewManager.updateState(viewState.mView, viewState.mCurrentProps, stateWrapper); + if (extraData != null) { + viewManager.updateExtraData(viewState.mView, extraData); + } } @UiThread diff --git a/ReactAndroid/src/main/java/com/facebook/react/uimanager/ViewManager.java b/ReactAndroid/src/main/java/com/facebook/react/uimanager/ViewManager.java index d422598ffb8..d42e47e8c9c 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/uimanager/ViewManager.java +++ b/ReactAndroid/src/main/java/com/facebook/react/uimanager/ViewManager.java @@ -252,7 +252,10 @@ public abstract class ViewManager * Subclasses can implement this method to receive state updates shared between all instances of * this component type. */ - public void updateState(@Nonnull T view, StateWrapper stateWrapper) {} + public @Nullable Object updateState( + @Nonnull T view, ReactStylesDiffMap props, StateWrapper stateWrapper) { + return null; + } public long measure( Context context, diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/modal/ReactModalHostManager.java b/ReactAndroid/src/main/java/com/facebook/react/views/modal/ReactModalHostManager.java index cd9d812f69e..7c5d696144a 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/modal/ReactModalHostManager.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/modal/ReactModalHostManager.java @@ -11,6 +11,7 @@ import android.graphics.Point; import com.facebook.react.common.MapBuilder; import com.facebook.react.module.annotations.ReactModule; import com.facebook.react.uimanager.LayoutShadowNode; +import com.facebook.react.uimanager.ReactStylesDiffMap; import com.facebook.react.uimanager.StateWrapper; import com.facebook.react.uimanager.ThemedReactContext; import com.facebook.react.uimanager.UIManagerModule; @@ -101,8 +102,10 @@ public class ReactModalHostManager extends ViewGroupManager } @Override - public void updateState(ReactModalHostView view, StateWrapper stateWrapper) { + public Object updateState( + ReactModalHostView view, ReactStylesDiffMap props, StateWrapper stateWrapper) { Point modalSize = ModalHostHelper.getModalHostSize(view.getContext()); view.updateState(stateWrapper, modalSize.x, modalSize.y); + return null; } }