From de44184e01d74e4da18f1cba9b01d4c259ef5d9c Mon Sep 17 00:00:00 2001 From: Andrei Shikov Date: Fri, 23 Jul 2021 14:27:34 -0700 Subject: [PATCH] EditText: maintain cursor position when text changes Summary: Similar to D29786190 (https://github.com/facebook/react-native/commit/b0e39b2ed9b66b378eb75bee9e692fc801431ddd) on iOS, keeps cursor position constant to the end of the text whenever text changes without selection updates. Changelog: [Internal] Reviewed By: mdvacca Differential Revision: D29879663 fbshipit-source-id: da1b50a99ae3b9ef796423146ba49e4172e286df --- .../react/views/textinput/ReactEditText.java | 10 ++++++++++ .../views/textinput/ReactTextInputManager.java | 17 +++++++++++++++-- 2 files changed, 25 insertions(+), 2 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 1e676fa7df9..719b903f4ce 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 @@ -331,10 +331,20 @@ public class ReactEditText extends AppCompatEditText } if (start != UNSET && end != UNSET) { + // clamp selection values for safety + start = clampToTextLength(start); + end = clampToTextLength(end); + setSelection(start, end); } } + private int clampToTextLength(int value) { + int textLength = getText() == null ? 0 : getText().length(); + + return Math.max(0, Math.min(value, textLength)); + } + @Override public void setSelection(int start, int end) { if (DEBUG_MODE) { diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputManager.java b/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputManager.java index 52d0b3b7640..de88cb84ced 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputManager.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputManager.java @@ -328,9 +328,22 @@ public class ReactTextInputManager extends BaseViewManager