From 2937cf91c74b6562bf56e8872dfd2bfaafebb3cc Mon Sep 17 00:00:00 2001 From: Samuel Mira Date: Fri, 30 Sep 2022 14:05:02 +0300 Subject: [PATCH] Android: Stop using getPrimaryClipDescription The function getPrimaryClipDescription was used to establish if the clipboard data had text, html and/or uris. Analysing QTBUG-106646 and tst_qquicktextedit showed inconsistent results, namely the description hasMimeType failed to find html mimetype on copy&paste. This patch changes it for searching it by hand instead of using hasMimeType function. Task-number: QTBUG-106646 Change-Id: I8918938e7a3fa6953eac95b72959fca85050e52f Reviewed-by: Ville Voutilainen --- .../org/qtproject/qt/android/QtNative.java | 44 ++++++++----------- 1 file changed, 18 insertions(+), 26 deletions(-) diff --git a/src/android/jar/src/org/qtproject/qt/android/QtNative.java b/src/android/jar/src/org/qtproject/qt/android/QtNative.java index 9cd1582c8bf..4310a62f512 100644 --- a/src/android/jar/src/org/qtproject/qt/android/QtNative.java +++ b/src/android/jar/src/org/qtproject/qt/android/QtNative.java @@ -1052,15 +1052,7 @@ public class QtNative public static boolean hasClipboardText() { - try { - if (m_clipboardManager != null && m_clipboardManager.hasPrimaryClip()) { - ClipDescription primaryClipDescription = m_clipboardManager.getPrimaryClipDescription(); - return primaryClipDescription.hasMimeType("text/*"); - } - } catch (Exception e) { - Log.e(QtTAG, "Failed to get clipboard data", e); - } - return false; + return hasClipboardMimeType("text/plain"); } private static String getClipboardText() @@ -1106,19 +1098,27 @@ public class QtNative } } - public static boolean hasClipboardHtml() + private static boolean hasClipboardMimeType(String mimeType) { - try { - if (m_clipboardManager != null && m_clipboardManager.hasPrimaryClip()) { - ClipDescription primaryClipDescription = m_clipboardManager.getPrimaryClipDescription(); - return primaryClipDescription.hasMimeType("text/html"); - } - } catch (Exception e) { - Log.e(QtTAG, "Failed to get clipboard data", e); + if (m_clipboardManager == null) + return false; + + ClipData clip = m_clipboardManager.getPrimaryClip(); + ClipDescription description = clip.getDescription(); + + for (int i = 0; i < description.getMimeTypeCount(); ++i) { + String itemMimeType = description.getMimeType(i); + if (itemMimeType.equals(mimeType)) + return true; } return false; } + public static boolean hasClipboardHtml() + { + return hasClipboardMimeType("text/html"); + } + private static String getClipboardHtml() { try { @@ -1145,15 +1145,7 @@ public class QtNative public static boolean hasClipboardUri() { - try { - if (m_clipboardManager != null && m_clipboardManager.hasPrimaryClip()) { - ClipDescription primaryClipDescription = m_clipboardManager.getPrimaryClipDescription(); - return primaryClipDescription.hasMimeType("text/uri-list"); - } - } catch (Exception e) { - Log.e(QtTAG, "Failed to get clipboard data", e); - } - return false; + return hasClipboardMimeType("text/uri-list"); } private static String[] getClipboardUris()