Skip to content

Commit

Permalink
FIX: Android - Caret resets to the beginning of the input
Browse files Browse the repository at this point in the history
  • Loading branch information
ikevin127 committed Nov 19, 2024
1 parent 68f661d commit 98335d1
Showing 1 changed file with 42 additions and 0 deletions.
42 changes: 42 additions & 0 deletions patches/react-native+0.75.2+021+ReactEditText.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
diff --git a/node_modules/react-native/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactEditText.java b/node_modules/react-native/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactEditText.java
--- a/node_modules/react-native/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactEditText.java
+++ b/node_modules/react-native/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactEditText.java
@@ -418,6 +418,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);
@@ -544,7 +548,8 @@ public class ReactEditText extends AppCompatEditText {
int selectionStart = getSelectionStart();
int selectionEnd = getSelectionEnd();
setInputType(mStagedInputType);
- setSelection(selectionStart, selectionEnd);
+ // Restore the selection
+ maybeSetSelection(selectionStart, selectionEnd);
}
}

@@ -1063,11 +1068,17 @@ public class ReactEditText extends AppCompatEditText {
public void onAttachedToWindow() {
super.onAttachedToWindow();

+ int selectionStart = getSelectionStart();
+ int selectionEnd = getSelectionEnd();
+
// Used to ensure that text is selectable inside of removeClippedSubviews
// See https://github.com/facebook/react-native/issues/6805 for original
// fix that was ported to here.

super.setTextIsSelectable(true);
+
+ // Restore the selection since `setTextIsSelectable` changed it.
+ maybeSetSelection(selectionStart, selectionEnd);

if (mContainsImages) {
Spanned text = getText();

0 comments on commit 98335d1

Please sign in to comment.