diff options
| author | Po Lu | 2024-05-08 16:03:49 +0800 |
|---|---|---|
| committer | Po Lu | 2024-05-08 16:03:49 +0800 |
| commit | e020f4e9ce5d98438033fea098d943c311b0fa3d (patch) | |
| tree | 9d7828ac6f6abe3405c9432bc3c4c1018d5ab54a /java | |
| parent | d0b36be59ab9840eebbda45609bc8c075ece40c0 (diff) | |
| download | emacs-e020f4e9ce5d98438033fea098d943c311b0fa3d.tar.gz emacs-e020f4e9ce5d98438033fea098d943c311b0fa3d.zip | |
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.
Diffstat (limited to 'java')
| -rw-r--r-- | java/org/gnu/emacs/EmacsClipboard.java | 4 | ||||
| -rw-r--r-- | java/org/gnu/emacs/EmacsSdk11Clipboard.java | 30 | ||||
| -rw-r--r-- | java/org/gnu/emacs/EmacsSdk8Clipboard.java | 4 |
3 files changed, 11 insertions, 27 deletions
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 | |||
| 32 | public abstract boolean clipboardExists (); | 32 | public abstract boolean clipboardExists (); |
| 33 | public abstract byte[] getClipboard (); | 33 | public abstract byte[] getClipboard (); |
| 34 | 34 | ||
| 35 | public abstract byte[][] getClipboardTargets (); | 35 | public abstract String[] getClipboardTargets (); |
| 36 | public abstract AssetFileDescriptor getClipboardData (byte[] target); | 36 | public abstract AssetFileDescriptor getClipboardData (String target); |
| 37 | 37 | ||
| 38 | /* Create the correct kind of clipboard for this system. */ | 38 | /* Create the correct kind of clipboard for this system. */ |
| 39 | 39 | ||
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 | |||
| 172 | clipboard, or NULL if there are none. */ | 172 | clipboard, or NULL if there are none. */ |
| 173 | 173 | ||
| 174 | @Override | 174 | @Override |
| 175 | public byte[][] | 175 | public String[] |
| 176 | getClipboardTargets () | 176 | getClipboardTargets () |
| 177 | { | 177 | { |
| 178 | ClipData clip; | 178 | ClipData clip; |
| 179 | ClipDescription description; | 179 | ClipDescription description; |
| 180 | byte[][] typeArray; | 180 | String[] typeArray; |
| 181 | int i; | 181 | int i; |
| 182 | 182 | ||
| 183 | /* N.B. that Android calls the clipboard the ``primary clip''; it | 183 | /* N.B. that Android calls the clipboard the ``primary clip''; it |
| @@ -189,17 +189,10 @@ public final class EmacsSdk11Clipboard extends EmacsClipboard | |||
| 189 | 189 | ||
| 190 | description = clip.getDescription (); | 190 | description = clip.getDescription (); |
| 191 | i = description.getMimeTypeCount (); | 191 | i = description.getMimeTypeCount (); |
| 192 | typeArray = new byte[i][i]; | 192 | typeArray = new String[i]; |
| 193 | 193 | ||
| 194 | try | 194 | for (i = 0; i < description.getMimeTypeCount (); ++i) |
| 195 | { | 195 | typeArray[i] = description.getMimeType (i); |
| 196 | for (i = 0; i < description.getMimeTypeCount (); ++i) | ||
| 197 | typeArray[i] = description.getMimeType (i).getBytes ("UTF-8"); | ||
| 198 | } | ||
| 199 | catch (UnsupportedEncodingException exception) | ||
| 200 | { | ||
| 201 | return null; | ||
| 202 | } | ||
| 203 | 196 | ||
| 204 | return typeArray; | 197 | return typeArray; |
| 205 | } | 198 | } |
| @@ -219,26 +212,17 @@ public final class EmacsSdk11Clipboard extends EmacsClipboard | |||
| 219 | 212 | ||
| 220 | @Override | 213 | @Override |
| 221 | public AssetFileDescriptor | 214 | public AssetFileDescriptor |
| 222 | getClipboardData (byte[] target) | 215 | getClipboardData (String target) |
| 223 | { | 216 | { |
| 224 | ClipData data; | 217 | ClipData data; |
| 225 | String mimeType; | 218 | String mimeType; |
| 226 | AssetFileDescriptor assetFd; | 219 | AssetFileDescriptor assetFd; |
| 227 | Uri uri; | 220 | Uri uri; |
| 228 | 221 | ||
| 229 | /* Decode the target given by Emacs. */ | ||
| 230 | try | ||
| 231 | { | ||
| 232 | mimeType = new String (target, "UTF-8"); | ||
| 233 | } | ||
| 234 | catch (UnsupportedEncodingException exception) | ||
| 235 | { | ||
| 236 | return null; | ||
| 237 | } | ||
| 238 | |||
| 239 | /* Now obtain the clipboard data and the data corresponding to | 222 | /* Now obtain the clipboard data and the data corresponding to |
| 240 | that MIME type. */ | 223 | that MIME type. */ |
| 241 | 224 | ||
| 225 | mimeType = target; | ||
| 242 | data = manager.getPrimaryClip (); | 226 | data = manager.getPrimaryClip (); |
| 243 | 227 | ||
| 244 | if (data == null || data.getItemCount () < 1) | 228 | 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 | |||
| 122 | clipboard, or NULL if there are none. */ | 122 | clipboard, or NULL if there are none. */ |
| 123 | 123 | ||
| 124 | @Override | 124 | @Override |
| 125 | public byte[][] | 125 | public String[] |
| 126 | getClipboardTargets () | 126 | getClipboardTargets () |
| 127 | { | 127 | { |
| 128 | return null; | 128 | return null; |
| @@ -143,7 +143,7 @@ public final class EmacsSdk8Clipboard extends EmacsClipboard | |||
| 143 | 143 | ||
| 144 | @Override | 144 | @Override |
| 145 | public AssetFileDescriptor | 145 | public AssetFileDescriptor |
| 146 | getClipboardData (byte[] target) | 146 | getClipboardData (String target) |
| 147 | { | 147 | { |
| 148 | return null; | 148 | return null; |
| 149 | } | 149 | } |