aboutsummaryrefslogtreecommitdiffstats
path: root/java
diff options
context:
space:
mode:
authorPo Lu2024-05-08 16:03:49 +0800
committerPo Lu2024-05-08 16:03:49 +0800
commite020f4e9ce5d98438033fea098d943c311b0fa3d (patch)
tree9d7828ac6f6abe3405c9432bc3c4c1018d5ab54a /java
parentd0b36be59ab9840eebbda45609bc8c075ece40c0 (diff)
downloademacs-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.java4
-rw-r--r--java/org/gnu/emacs/EmacsSdk11Clipboard.java30
-rw-r--r--java/org/gnu/emacs/EmacsSdk8Clipboard.java4
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 }