From e020f4e9ce5d98438033fea098d943c311b0fa3d Mon Sep 17 00:00:00 2001 From: Po Lu Date: Wed, 8 May 2024 16:03:49 +0800 Subject: Fix hang after failed yank-media on Android * java/org/gnu/emacs/EmacsClipboard.java (getClipboardTargets) (getClipboardData): * java/org/gnu/emacs/EmacsSdk11Clipboard.java (getClipboardTargets, getClipboardData): * java/org/gnu/emacs/EmacsSdk8Clipboard.java (getClipboardTargets, getClipboardData): Return string data as Strings rather than byte arrays. * src/androidselect.c (android_init_emacs_clipboard) (Fandroid_get_clipboard_targets): Adjust to match. (extract_fd_offsets): Remove duplicated semicolon. (Fandroid_get_clipboard_data): Call unblock_input before returning if extract_fd_offsets fails. --- java/org/gnu/emacs/EmacsClipboard.java | 4 ++-- java/org/gnu/emacs/EmacsSdk11Clipboard.java | 30 +++++++---------------------- java/org/gnu/emacs/EmacsSdk8Clipboard.java | 4 ++-- 3 files changed, 11 insertions(+), 27 deletions(-) (limited to 'java') diff --git a/java/org/gnu/emacs/EmacsClipboard.java b/java/org/gnu/emacs/EmacsClipboard.java index f27d96129ef..86553f478ed 100644 --- a/java/org/gnu/emacs/EmacsClipboard.java +++ b/java/org/gnu/emacs/EmacsClipboard.java @@ -32,8 +32,8 @@ public abstract class EmacsClipboard public abstract boolean clipboardExists (); public abstract byte[] getClipboard (); - public abstract byte[][] getClipboardTargets (); - public abstract AssetFileDescriptor getClipboardData (byte[] target); + public abstract String[] getClipboardTargets (); + public abstract AssetFileDescriptor getClipboardData (String target); /* Create the correct kind of clipboard for this system. */ diff --git a/java/org/gnu/emacs/EmacsSdk11Clipboard.java b/java/org/gnu/emacs/EmacsSdk11Clipboard.java index 71381b0f114..dfc714476ec 100644 --- a/java/org/gnu/emacs/EmacsSdk11Clipboard.java +++ b/java/org/gnu/emacs/EmacsSdk11Clipboard.java @@ -172,12 +172,12 @@ public final class EmacsSdk11Clipboard extends EmacsClipboard clipboard, or NULL if there are none. */ @Override - public byte[][] + public String[] getClipboardTargets () { ClipData clip; ClipDescription description; - byte[][] typeArray; + String[] typeArray; int i; /* N.B. that Android calls the clipboard the ``primary clip''; it @@ -189,17 +189,10 @@ public final class EmacsSdk11Clipboard extends EmacsClipboard description = clip.getDescription (); i = description.getMimeTypeCount (); - typeArray = new byte[i][i]; + typeArray = new String[i]; - try - { - for (i = 0; i < description.getMimeTypeCount (); ++i) - typeArray[i] = description.getMimeType (i).getBytes ("UTF-8"); - } - catch (UnsupportedEncodingException exception) - { - return null; - } + for (i = 0; i < description.getMimeTypeCount (); ++i) + typeArray[i] = description.getMimeType (i); return typeArray; } @@ -219,26 +212,17 @@ public final class EmacsSdk11Clipboard extends EmacsClipboard @Override public AssetFileDescriptor - getClipboardData (byte[] target) + getClipboardData (String target) { ClipData data; String mimeType; AssetFileDescriptor assetFd; Uri uri; - /* Decode the target given by Emacs. */ - try - { - mimeType = new String (target, "UTF-8"); - } - catch (UnsupportedEncodingException exception) - { - return null; - } - /* Now obtain the clipboard data and the data corresponding to that MIME type. */ + mimeType = target; data = manager.getPrimaryClip (); if (data == null || data.getItemCount () < 1) diff --git a/java/org/gnu/emacs/EmacsSdk8Clipboard.java b/java/org/gnu/emacs/EmacsSdk8Clipboard.java index 3d0504b1924..344ec6f7997 100644 --- a/java/org/gnu/emacs/EmacsSdk8Clipboard.java +++ b/java/org/gnu/emacs/EmacsSdk8Clipboard.java @@ -122,7 +122,7 @@ public final class EmacsSdk8Clipboard extends EmacsClipboard clipboard, or NULL if there are none. */ @Override - public byte[][] + public String[] getClipboardTargets () { return null; @@ -143,7 +143,7 @@ public final class EmacsSdk8Clipboard extends EmacsClipboard @Override public AssetFileDescriptor - getClipboardData (byte[] target) + getClipboardData (String target) { return null; } -- cgit v1.2.1