diff --git a/patches/react-native+0.77.1+011+Add-onPaste-to-TextInput.patch b/patches/react-native+0.77.1+011+Add-onPaste-to-TextInput.patch index 0c95505a606ff..ba4a9f1b0cbcf 100644 --- a/patches/react-native+0.77.1+011+Add-onPaste-to-TextInput.patch +++ b/patches/react-native+0.77.1+011+Add-onPaste-to-TextInput.patch @@ -445,7 +445,7 @@ index 0000000..bfb5819 + public void onPaste(String type, String data); +} 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 -index 56a1069..272ea7d 100644 +index 56a1069..9f14425 100644 --- 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 @@ -9,6 +9,10 @@ package com.facebook.react.views.textinput; @@ -483,38 +483,47 @@ index 56a1069..272ea7d 100644 mTextAttributes = new TextAttributes(); applyTextAttributes(); -@@ -332,8 +339,29 @@ public class ReactEditText extends AppCompatEditText { +@@ -332,8 +339,38 @@ public class ReactEditText extends AppCompatEditText { */ @Override public boolean onTextContextMenuItem(int id) { - if (id == android.R.id.paste) { + if (id == android.R.id.paste || id == android.R.id.pasteAsPlainText) { id = android.R.id.pasteAsPlainText; -+ if (mPasteWatcher != null) { -+ ClipboardManager clipboardManager = ++ ++ ClipboardManager clipboardManager = + (ClipboardManager) getContext().getSystemService(Context.CLIPBOARD_SERVICE); -+ ClipData clipData = clipboardManager.getPrimaryClip(); ++ ClipData clipData = clipboardManager.getPrimaryClip(); ++ if (clipData != null) { ++ ClipData.Item item = clipData.getItemAt(0); ++ Uri itemUri = item.getUri(); + String type = null; + String data = null; ++ ++ if (itemUri != null) { ++ ContentResolver cr = getReactContext(this).getContentResolver(); ++ type = cr.getType(itemUri); ++ data = itemUri.toString(); ++ if (mPasteWatcher != null) { ++ mPasteWatcher.onPaste(type, data); ++ } ++ // Prevents default behavior to avoid inserting raw binary data into the text field ++ return true; ++ } ++ + if (clipData.getDescription().hasMimeType(ClipDescription.MIMETYPE_TEXT_PLAIN)) { + type = ClipDescription.MIMETYPE_TEXT_PLAIN; -+ data = clipData.getItemAt(0).getText().toString(); -+ } else { -+ Uri itemUri = clipData.getItemAt(0).getUri(); -+ if (itemUri != null) { -+ ContentResolver cr = getReactContext(this).getContentResolver(); -+ type = cr.getType(itemUri); -+ data = itemUri.toString(); ++ data = item.getText().toString(); ++ if (mPasteWatcher != null) { ++ mPasteWatcher.onPaste(type, data); + } -+ } -+ if (type != null && data != null) { -+ mPasteWatcher.onPaste(type, data); ++ // Don't return - let the system proceed with default text pasting behavior + } + } } return super.onTextContextMenuItem(id); } -@@ -395,6 +423,10 @@ public class ReactEditText extends AppCompatEditText { +@@ -395,6 +432,10 @@ public class ReactEditText extends AppCompatEditText { mScrollWatcher = scrollWatcher; }