From 08759121cda3785e4d7ee1f1c82011a3e3a955a9 Mon Sep 17 00:00:00 2001 From: Zeya Peng Date: Wed, 13 Nov 2024 11:38:02 -0800 Subject: [PATCH] validate input before calling `setSelection` to restore selection range (#47577) Summary: Pull Request resolved: https://github.com/facebook/react-native/pull/47577 Changelog: [Android][Fixed] ensure setSelection in onAttachedToWindow is within text range Reviewed By: javache Differential Revision: D65824906 fbshipit-source-id: 3dc7d27bf4f9a10762f11fa4a0bcae8af13c7db7 --- .../facebook/react/views/textinput/ReactEditText.java | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) 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 c7506b7dfc9..56a10692cf1 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 @@ -408,6 +408,10 @@ public class ReactEditText extends AppCompatEditText { return; } + maybeSetSelection(start, end); + } + + private void maybeSetSelection(int start, int end) { if (start != ReactConstants.UNSET && end != ReactConstants.UNSET) { // clamp selection values for safety start = clampToTextLength(start); @@ -534,7 +538,8 @@ public class ReactEditText extends AppCompatEditText { int selectionStart = getSelectionStart(); int selectionEnd = getSelectionEnd(); setInputType(mStagedInputType); - setSelection(selectionStart, selectionEnd); + // Restore the selection + maybeSetSelection(selectionStart, selectionEnd); } } @@ -1071,7 +1076,7 @@ public class ReactEditText extends AppCompatEditText { super.setTextIsSelectable(true); // Restore the selection since `setTextIsSelectable` changed it. - setSelection(selectionStart, selectionEnd); + maybeSetSelection(selectionStart, selectionEnd); if (mContainsImages) { Spanned text = getText();