From 2ee11711e0351f695ec1d5e591ac904e5c9187c4 Mon Sep 17 00:00:00 2001 From: Joshua Gross Date: Sat, 7 Dec 2019 00:11:06 -0800 Subject: [PATCH] TextInput: don't call Paper UIManager `setViewLocalData` in Fabric Summary: In Paper this call causes Yoga to remeasure the tree. We don't need to do this in Fabric, and all the data contained in `ReactTextInputLocalData` is already set on the underlying EditText View. Changelog: [Internal] Reviewed By: mdvacca Differential Revision: D18870491 fbshipit-source-id: a982a708b810d45f70ad4981a963bb4ae798c83c --- .../react/views/textinput/ReactEditText.java | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactEditText.java b/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactEditText.java index a0b54e20f6d..bf88584801a 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactEditText.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactEditText.java @@ -593,11 +593,19 @@ public class ReactEditText extends EditText { setIntrinsicContentSize(); } + // TODO T58784068: delete this method private void setIntrinsicContentSize() { - ReactContext reactContext = (ReactContext) getContext(); - UIManagerModule uiManager = reactContext.getNativeModule(UIManagerModule.class); - final ReactTextInputLocalData localData = new ReactTextInputLocalData(this); - uiManager.setViewLocalData(getId(), localData); + // This serves as a check for whether we're running under Paper or Fabric. + // By the time this is called, in Fabric we will have a state + // wrapper 100% of the time. + // Since the LocalData object is constructed by getting values from the underlying EditText + // view, we don't need to construct one or apply it at all - it provides no use in Fabric. + if (mStateWrapper == null) { + ReactContext reactContext = (ReactContext) getContext(); + final ReactTextInputLocalData localData = new ReactTextInputLocalData(this); + UIManagerModule uiManager = reactContext.getNativeModule(UIManagerModule.class); + uiManager.setViewLocalData(getId(), localData); + } } /* package */ void setGravityHorizontal(int gravityHorizontal) {