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 7760b23ab2c..d374e0f145f 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/fabric/FabricUIManager.java +++ b/ReactAndroid/src/main/java/com/facebook/react/fabric/FabricUIManager.java @@ -339,7 +339,7 @@ public class FabricUIManager implements UIManager, LifecycleEventListener { @DoNotStrip @SuppressWarnings("unused") - private MountItem updateStateMountItem(int reactTag, Object stateWrapper) { + private MountItem updateStateMountItem(int reactTag, @Nullable Object stateWrapper) { return new UpdateStateMountItem(reactTag, (StateWrapper) stateWrapper); } 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 70d02274270..0d3da058d9a 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 @@ -369,11 +369,12 @@ public class MountingManager { } @UiThread - public void updateState(final int reactTag, StateWrapper stateWrapper) { + public void updateState(final int reactTag, @Nullable StateWrapper stateWrapper) { UiThreadUtil.assertOnUiThread(); ViewState viewState = getViewState(reactTag); - ReadableNativeMap newState = stateWrapper.getState(); - if (viewState.mCurrentState != null && viewState.mCurrentState.equals(newState)) { + @Nullable ReadableNativeMap newState = stateWrapper == null ? null : stateWrapper.getState(); + if ((viewState.mCurrentState != null && viewState.mCurrentState.equals(newState)) + || (viewState.mCurrentState == null && stateWrapper == null)) { return; } viewState.mCurrentState = newState; diff --git a/ReactAndroid/src/main/java/com/facebook/react/fabric/mounting/mountitems/UpdateStateMountItem.java b/ReactAndroid/src/main/java/com/facebook/react/fabric/mounting/mountitems/UpdateStateMountItem.java index e1dee17a1db..e6ec6fa5633 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/fabric/mounting/mountitems/UpdateStateMountItem.java +++ b/ReactAndroid/src/main/java/com/facebook/react/fabric/mounting/mountitems/UpdateStateMountItem.java @@ -6,15 +6,16 @@ */ package com.facebook.react.fabric.mounting.mountitems; +import androidx.annotation.Nullable; import com.facebook.react.fabric.mounting.MountingManager; import com.facebook.react.uimanager.StateWrapper; public class UpdateStateMountItem implements MountItem { private final int mReactTag; - private final StateWrapper mStateWrapper; + @Nullable private final StateWrapper mStateWrapper; - public UpdateStateMountItem(int reactTag, StateWrapper stateWrapper) { + public UpdateStateMountItem(int reactTag, @Nullable StateWrapper stateWrapper) { mReactTag = reactTag; mStateWrapper = stateWrapper; } 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 542fa452f6f..41b3e114f08 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/uimanager/ViewManager.java +++ b/ReactAndroid/src/main/java/com/facebook/react/uimanager/ViewManager.java @@ -282,7 +282,7 @@ public abstract class ViewManager * this component type. */ public @Nullable Object updateState( - @NonNull T view, ReactStylesDiffMap props, StateWrapper stateWrapper) { + @NonNull T view, ReactStylesDiffMap props, @Nullable StateWrapper stateWrapper) { return null; } 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 fcc94f04098..2d2ee110d9b 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 @@ -84,7 +84,6 @@ public class ReactModalHostManager extends ViewGroupManager view.setStatusBarTranslucent(statusBarTranslucent); } - @Override @ReactProp(name = "hardwareAccelerated") public void setHardwareAccelerated(ReactModalHostView view, boolean hardwareAccelerated) { @@ -139,7 +138,8 @@ public class ReactModalHostManager extends ViewGroupManager @Override public Object updateState( - ReactModalHostView view, ReactStylesDiffMap props, StateWrapper stateWrapper) { + ReactModalHostView view, ReactStylesDiffMap props, @Nullable StateWrapper stateWrapper) { + // TODO T55794595: Add support for updating state with null stateWrapper Point modalSize = ModalHostHelper.getModalHostSize(view.getContext()); view.updateState(stateWrapper, modalSize.x, modalSize.y); return null; diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactTextViewManager.java b/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactTextViewManager.java index f498db2ef83..af76c9edb22 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactTextViewManager.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactTextViewManager.java @@ -74,7 +74,8 @@ public class ReactTextViewManager @Override public Object updateState( - ReactTextView view, ReactStylesDiffMap props, StateWrapper stateWrapper) { + ReactTextView view, ReactStylesDiffMap props, @Nullable StateWrapper stateWrapper) { + // TODO T55794595: Add support for updating state with null stateWrapper ReadableMap attributedString = stateWrapper.getState().getMap("attributedString"); Spannable spanned =