Skip to content

Commit cadcf54

Browse files
committed
Revert "Remove support for Android API < 23 in ReactEditText (#39671)"
This reverts commit 1904e80.
1 parent 21fc812 commit cadcf54

File tree

1 file changed

+29
-4
lines changed
  • packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/textinput

1 file changed

+29
-4
lines changed

packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactEditText.java

+29-4
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@
99

1010
import static com.facebook.react.uimanager.UIManagerHelper.getReactContext;
1111

12+
import android.content.ClipData;
13+
import android.content.ClipboardManager;
1214
import android.content.Context;
1315
import android.graphics.Color;
1416
import android.graphics.Paint;
@@ -208,7 +210,9 @@ public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
208210
public void onDestroyActionMode(ActionMode mode) {}
209211
};
210212
setCustomSelectionActionModeCallback(customActionModeCallback);
211-
setCustomInsertionActionModeCallback(customActionModeCallback);
213+
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
214+
setCustomInsertionActionModeCallback(customActionModeCallback);
215+
}
212216
}
213217

214218
@Override
@@ -304,7 +308,26 @@ public InputConnection onCreateInputConnection(EditorInfo outAttrs) {
304308
@Override
305309
public boolean onTextContextMenuItem(int id) {
306310
if (id == android.R.id.paste) {
307-
id = android.R.id.pasteAsPlainText;
311+
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
312+
id = android.R.id.pasteAsPlainText;
313+
} else {
314+
ClipboardManager clipboard =
315+
(ClipboardManager) getContext().getSystemService(Context.CLIPBOARD_SERVICE);
316+
ClipData previousClipData = clipboard.getPrimaryClip();
317+
if (previousClipData != null) {
318+
for (int i = 0; i < previousClipData.getItemCount(); i++) {
319+
final CharSequence text = previousClipData.getItemAt(i).coerceToText(getContext());
320+
final CharSequence paste = (text instanceof Spanned) ? text.toString() : text;
321+
if (paste != null) {
322+
ClipData clipData = ClipData.newPlainText(null, text);
323+
clipboard.setPrimaryClip(clipData);
324+
}
325+
}
326+
boolean actionPerformed = super.onTextContextMenuItem(id);
327+
clipboard.setPrimaryClip(previousClipData);
328+
return actionPerformed;
329+
}
330+
}
308331
}
309332
return super.onTextContextMenuItem(id);
310333
}
@@ -679,8 +702,10 @@ public void maybeSetText(ReactTextUpdate reactTextUpdate) {
679702
}
680703
mDisableTextDiffing = false;
681704

682-
if (getBreakStrategy() != reactTextUpdate.getTextBreakStrategy()) {
683-
setBreakStrategy(reactTextUpdate.getTextBreakStrategy());
705+
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
706+
if (getBreakStrategy() != reactTextUpdate.getTextBreakStrategy()) {
707+
setBreakStrategy(reactTextUpdate.getTextBreakStrategy());
708+
}
684709
}
685710

686711
// Update cached spans (in Fabric only).

0 commit comments

Comments
 (0)