|
9 | 9 |
|
10 | 10 | import static com.facebook.react.uimanager.UIManagerHelper.getReactContext;
|
11 | 11 |
|
| 12 | +import android.content.ClipboardManager; |
| 13 | +import android.content.ClipData; |
| 14 | +import android.content.ClipDescription; |
| 15 | +import android.content.ContentResolver; |
12 | 16 | import android.content.Context;
|
13 | 17 | import android.graphics.Canvas;
|
14 | 18 | import android.graphics.Color;
|
15 | 19 | import android.graphics.Paint;
|
16 | 20 | import android.graphics.Rect;
|
17 | 21 | import android.graphics.Typeface;
|
18 | 22 | import android.graphics.drawable.Drawable;
|
| 23 | +import android.net.Uri; |
19 | 24 | import android.os.Build;
|
20 | 25 | import android.os.Bundle;
|
21 | 26 | import android.text.Editable;
|
|
27 | 32 | import android.text.TextWatcher;
|
28 | 33 | import android.text.method.KeyListener;
|
29 | 34 | import android.text.method.QwertyKeyListener;
|
| 35 | +import android.util.Base64; |
30 | 36 | import android.util.TypedValue;
|
31 | 37 | import android.view.ActionMode;
|
32 | 38 | import android.view.Gravity;
|
|
68 | 74 | import com.facebook.react.views.text.internal.span.ReactUnderlineSpan;
|
69 | 75 | import com.facebook.react.views.text.internal.span.TextInlineImageSpan;
|
70 | 76 | import com.facebook.react.views.view.ReactViewBackgroundManager;
|
| 77 | +import java.io.IOException; |
71 | 78 | import java.util.ArrayList;
|
72 | 79 | import java.util.Objects;
|
73 | 80 |
|
@@ -326,7 +333,32 @@ public boolean onTextContextMenuItem(int id) {
|
326 | 333 | if (id == android.R.id.paste || id == android.R.id.pasteAsPlainText) {
|
327 | 334 | id = android.R.id.pasteAsPlainText;
|
328 | 335 | if (mPasteWatcher != null) {
|
329 |
| - mPasteWatcher.onPaste(); |
| 336 | + ClipboardManager clipboardManager = |
| 337 | + (ClipboardManager) getContext().getSystemService(Context.CLIPBOARD_SERVICE); |
| 338 | + ClipData clipData = clipboardManager.getPrimaryClip(); |
| 339 | + String type = null; |
| 340 | + String data = null; |
| 341 | + if (clipData.getDescription().hasMimeType(ClipDescription.MIMETYPE_TEXT_PLAIN)) { |
| 342 | + type = ClipDescription.MIMETYPE_TEXT_PLAIN; |
| 343 | + data = clipData.getItemAt(0).getText().toString(); |
| 344 | + } else { |
| 345 | + Uri itemUri = clipData.getItemAt(0).getUri(); |
| 346 | + if (itemUri != null) { |
| 347 | + ContentResolver cr = getReactContext(this).getContentResolver(); |
| 348 | + type = cr.getType(itemUri); |
| 349 | + if (type != null) { |
| 350 | + try { |
| 351 | + String encodedData = Base64.encodeToString(cr.openInputStream(itemUri).readAllBytes(), Base64.DEFAULT); |
| 352 | + data = "data:" + type + ";base64," + encodedData; |
| 353 | + } catch (IOException e) { |
| 354 | + e.printStackTrace(); |
| 355 | + } |
| 356 | + } |
| 357 | + } |
| 358 | + } |
| 359 | + if (type != null && data != null) { |
| 360 | + mPasteWatcher.onPaste(type, data); |
| 361 | + } |
330 | 362 | }
|
331 | 363 | }
|
332 | 364 | return super.onTextContextMenuItem(id);
|
|
0 commit comments