diff --git a/packages/react-native/ReactAndroid/api/ReactAndroid.api b/packages/react-native/ReactAndroid/api/ReactAndroid.api index 20304f28f1c..875c4dc0041 100644 --- a/packages/react-native/ReactAndroid/api/ReactAndroid.api +++ b/packages/react-native/ReactAndroid/api/ReactAndroid.api @@ -7725,6 +7725,7 @@ public class com/facebook/react/views/textinput/ReactEditText : androidx/appcomp public fun setPlaceholder (Ljava/lang/String;)V public fun setReturnKeyType (Ljava/lang/String;)V public fun setScrollWatcher (Lcom/facebook/react/views/textinput/ScrollWatcher;)V + public fun setSelectTextOnFocus (Z)V public fun setSelection (II)V public fun setSelectionWatcher (Lcom/facebook/react/views/textinput/SelectionWatcher;)V public fun setStateWrapper (Lcom/facebook/react/uimanager/StateWrapper;)V diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactEditText.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactEditText.java index 231ac8b52ac..c96859ccb2c 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactEditText.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactEditText.java @@ -120,6 +120,7 @@ public class ReactEditText extends AppCompatEditText { private boolean mAutoFocus = false; private boolean mContextMenuHidden = false; private boolean mDidAttachToWindow = false; + private boolean mSelectTextOnFocus = false; private @Nullable String mPlaceholder = null; private final ReactViewBackgroundManager mReactBackgroundManager; @@ -238,6 +239,12 @@ public class ReactEditText extends AppCompatEditText { @Override protected void onLayout(boolean changed, int left, int top, int right, int bottom) { onContentSizeChange(); + if (mSelectTextOnFocus && isFocused()) { + // Explicitly call this method to select text when layout is drawn + selectAll(); + // Prevent text on being selected for next layout pass + mSelectTextOnFocus = false; + } } @Override @@ -1125,6 +1132,11 @@ public class ReactEditText extends AppCompatEditText { mAutoFocus = autoFocus; } + public void setSelectTextOnFocus(boolean selectTextOnFocus) { + super.setSelectAllOnFocus(selectTextOnFocus); + mSelectTextOnFocus = selectTextOnFocus; + } + public void setContextMenuHidden(boolean contextMenuHidden) { mContextMenuHidden = contextMenuHidden; } diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputManager.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputManager.java index c180c6a62a0..7e0c3fccf16 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputManager.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputManager.java @@ -655,7 +655,7 @@ public class ReactTextInputManager extends BaseViewManager { + constructor(props: any | void) { + super(props); + this.state = { + autoFocusFalse: 'autoFocus: false - selectTextOnFocus: true', + autoFocusTrue: 'autoFocus: true - selectTextOnFocus: true', + }; + } + render(): React.Node { + return ( + + this.setState({autoFocusFalse: text})} + accessibilityLabel="I am the accessibility label for text input" + /> + this.setState({autoFocusTrue: text})} + accessibilityLabel="I am the accessibility label for text input" + /> + + ); + } +} + class WithLabel extends React.Component<$FlowFixMeProps> { render(): React.Node { return ( @@ -815,14 +848,9 @@ function MultilineStyledTextInput({ module.exports = ([ { - title: 'Auto-focus', + title: 'Auto-focus & select text on focus', render: function (): React.Node { - return ( - - ); + return ; }, }, {