Add C++ AndroidTextInput component for backwards-compatible Fabric support of TextInput on Android

Summary: Support existing, backwards-compatible AndroidTextInput component for minimal support of TextInput on Android.

Reviewed By: shergin, mdvacca

Differential Revision: D17086758

fbshipit-source-id: 25726f22229e0d5dfe96eb36b386a5317601283d
This commit is contained in:
Joshua Gross
2019-08-30 19:02:33 -07:00
committed by Facebook Github Bot
parent 898124541c
commit 5abe5843e2
13 changed files with 1200 additions and 5 deletions
@@ -6,6 +6,7 @@
*/
package com.facebook.react.views.textinput;
import android.content.Context;
import android.graphics.PorterDuff;
import android.graphics.Typeface;
import android.graphics.drawable.Drawable;
@@ -20,6 +21,7 @@ import android.view.Gravity;
import android.view.KeyEvent;
import android.view.View;
import android.view.inputmethod.EditorInfo;
import android.widget.EditText;
import android.widget.TextView;
import androidx.annotation.Nullable;
import androidx.core.content.ContextCompat;
@@ -29,6 +31,7 @@ import com.facebook.react.bridge.Dynamic;
import com.facebook.react.bridge.JSApplicationIllegalArgumentException;
import com.facebook.react.bridge.ReactContext;
import com.facebook.react.bridge.ReadableArray;
import com.facebook.react.bridge.ReadableMap;
import com.facebook.react.bridge.ReadableType;
import com.facebook.react.common.MapBuilder;
import com.facebook.react.module.annotations.ReactModule;
@@ -50,7 +53,9 @@ import com.facebook.react.views.text.DefaultStyleValuesUtil;
import com.facebook.react.views.text.ReactFontManager;
import com.facebook.react.views.text.ReactTextUpdate;
import com.facebook.react.views.text.TextInlineImageSpan;
import com.facebook.react.views.text.TextLayoutManager;
import com.facebook.yoga.YogaConstants;
import com.facebook.yoga.YogaMeasureMode;
import java.lang.reflect.Field;
import java.util.LinkedList;
import java.util.Map;
@@ -91,6 +96,8 @@ public class ReactTextInputManager extends BaseViewManager<ReactEditText, Layout
private static final InputFilter[] EMPTY_FILTERS = new InputFilter[0];
private static final int UNSET = -1;
@Nullable private static EditText mDummyEditText = null;
@Override
public String getName() {
return REACT_CLASS;
@@ -1075,4 +1082,18 @@ public class ReactTextInputManager extends BaseViewManager<ReactEditText, Layout
"sentences",
InputType.TYPE_TEXT_FLAG_CAP_SENTENCES));
}
/** Measure function for Fabric. */
@Override
public long measure(
Context context,
ReadableMap localData,
ReadableMap props,
ReadableMap state,
float width,
YogaMeasureMode widthMode,
float height,
YogaMeasureMode heightMode) {
return TextLayoutManager.measureText(
context, localData, props, width, widthMode, height, heightMode);
}
}