Extend RN Android text input to support customizable emojis

Summary:
This diff refactors RN Android text input to support customizable emojis.

changelog: [internal]

Reviewed By: JoshuaGross

Differential Revision: D19679392

fbshipit-source-id: b673e3a59f876ff9a822c2f32c9db4ff4efe007b
This commit is contained in:
David Vacca
2020-02-03 21:03:11 -08:00
committed by Facebook Github Bot
parent 86d1153586
commit d1e2c9435e
2 changed files with 18 additions and 2 deletions
@@ -61,7 +61,9 @@ import com.facebook.react.views.imagehelper.ResourceDrawableIdHelper;
import com.facebook.react.views.scroll.ScrollEvent;
import com.facebook.react.views.scroll.ScrollEventType;
import com.facebook.react.views.text.DefaultStyleValuesUtil;
import com.facebook.react.views.text.ReactBaseTextShadowNode;
import com.facebook.react.views.text.ReactTextUpdate;
import com.facebook.react.views.text.ReactTextViewManagerCallback;
import com.facebook.react.views.text.TextAttributeProps;
import com.facebook.react.views.text.TextInlineImageSpan;
import com.facebook.react.views.text.TextLayoutManager;
@@ -113,6 +115,8 @@ public class ReactTextInputManager extends BaseViewManager<ReactEditText, Layout
private static final InputFilter[] EMPTY_FILTERS = new InputFilter[0];
private static final int UNSET = -1;
protected @Nullable ReactTextViewManagerCallback mReactTextViewManagerCallback;
@Override
public String getName() {
return REACT_CLASS;
@@ -128,10 +132,15 @@ public class ReactTextInputManager extends BaseViewManager<ReactEditText, Layout
}
@Override
public LayoutShadowNode createShadowNodeInstance() {
public ReactBaseTextShadowNode createShadowNodeInstance() {
return new ReactTextInputShadowNode();
}
public ReactBaseTextShadowNode createShadowNodeInstance(
@Nullable ReactTextViewManagerCallback reactTextViewManagerCallback) {
return new ReactTextInputShadowNode(reactTextViewManagerCallback);
}
@Override
public Class<? extends LayoutShadowNode> getShadowNodeClass() {
return ReactTextInputShadowNode.class;
@@ -25,6 +25,7 @@ import com.facebook.react.uimanager.UIViewOperationQueue;
import com.facebook.react.uimanager.annotations.ReactProp;
import com.facebook.react.views.text.ReactBaseTextShadowNode;
import com.facebook.react.views.text.ReactTextUpdate;
import com.facebook.react.views.text.ReactTextViewManagerCallback;
import com.facebook.react.views.view.MeasureUtil;
import com.facebook.yoga.YogaMeasureFunction;
import com.facebook.yoga.YogaMeasureMode;
@@ -50,7 +51,9 @@ public class ReactTextInputShadowNode extends ReactBaseTextShadowNode
private int mSelectionStart = UNSET;
private int mSelectionEnd = UNSET;
public ReactTextInputShadowNode() {
public ReactTextInputShadowNode(
@Nullable ReactTextViewManagerCallback reactTextViewManagerCallback) {
super(reactTextViewManagerCallback);
mTextBreakStrategy =
(Build.VERSION.SDK_INT < Build.VERSION_CODES.M)
? Layout.BREAK_STRATEGY_SIMPLE
@@ -59,6 +62,10 @@ public class ReactTextInputShadowNode extends ReactBaseTextShadowNode
initMeasureFunction();
}
public ReactTextInputShadowNode() {
this(null);
}
private void initMeasureFunction() {
setMeasureFunction(this);
}