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 f9afa8ae38a..161a489a566 100644 --- a/src/android/jar/src/org/qtproject/qt/android/QtNative.java +++ b/src/android/jar/src/org/qtproject/qt/android/QtNative.java @@ -895,7 +895,7 @@ public class QtNative public static boolean hasClipboardText() { - return hasClipboardMimeType("text/plain"); + return hasClipboardMimeType("text/(.*)"); } private static String getClipboardText() @@ -953,7 +953,7 @@ public class QtNative for (int i = 0; i < description.getMimeTypeCount(); ++i) { String itemMimeType = description.getMimeType(i); - if (itemMimeType.equals(mimeType)) + if (itemMimeType.matches(mimeType)) return true; } return false; diff --git a/src/plugins/platforms/android/androidjniclipboard.cpp b/src/plugins/platforms/android/androidjniclipboard.cpp index 81663cac0ce..d510f430498 100644 --- a/src/plugins/platforms/android/androidjniclipboard.cpp +++ b/src/plugins/platforms/android/androidjniclipboard.cpp @@ -43,16 +43,16 @@ namespace QtAndroidClipboard "(Ljava/lang/String;)V", QJniObject::fromString(u.toEncoded()).object()); } - } else if (data->hasText()) { // hasText || hasUrls, so the order matter here. - QJniObject::callStaticMethod(applicationClass(), - "setClipboardText", "(Ljava/lang/String;)V", - QJniObject::fromString(data->text()).object()); - } else if (data->hasHtml()) { + } else if (data->hasHtml()) { // html can contain text QJniObject::callStaticMethod(applicationClass(), "setClipboardHtml", "(Ljava/lang/String;Ljava/lang/String;)V", QJniObject::fromString(data->text()).object(), QJniObject::fromString(data->html()).object()); + } else if (data->hasText()) { // hasText must be the last (the order matter here) + QJniObject::callStaticMethod(applicationClass(), + "setClipboardText", "(Ljava/lang/String;)V", + QJniObject::fromString(data->text()).object()); } } diff --git a/tests/auto/gui/kernel/CMakeLists.txt b/tests/auto/gui/kernel/CMakeLists.txt index a178942d5a7..5377a04a640 100644 --- a/tests/auto/gui/kernel/CMakeLists.txt +++ b/tests/auto/gui/kernel/CMakeLists.txt @@ -29,7 +29,7 @@ endif() add_subdirectory(qpixelformat) add_subdirectory(qrasterwindow) add_subdirectory(qaddpostroutine) -if(NOT ANDROID AND NOT UIKIT) +if(NOT UIKIT) add_subdirectory(qclipboard) endif() if(TARGET Qt::Network) diff --git a/tests/auto/gui/kernel/qclipboard/test/BLACKLIST b/tests/auto/gui/kernel/qclipboard/test/BLACKLIST new file mode 100644 index 00000000000..3ca7791b371 --- /dev/null +++ b/tests/auto/gui/kernel/qclipboard/test/BLACKLIST @@ -0,0 +1,5 @@ +# QTBUG-87429 +[testSignals] +android +[setMimeData] +android diff --git a/tests/auto/gui/kernel/qclipboard/tst_qclipboard.cpp b/tests/auto/gui/kernel/qclipboard/tst_qclipboard.cpp index 0b694bff73d..520233bf69d 100644 --- a/tests/auto/gui/kernel/qclipboard/tst_qclipboard.cpp +++ b/tests/auto/gui/kernel/qclipboard/tst_qclipboard.cpp @@ -41,6 +41,7 @@ private slots: void testSignals(); void setMimeData(); void clearBeforeSetText(); + void getTextFromHTMLMimeType(); # ifdef Q_OS_WIN void testWindowsMimeRegisterType(); void testWindowsMime_data(); @@ -61,7 +62,7 @@ void tst_QClipboard::initTestCase() #if QT_CONFIG(clipboard) void tst_QClipboard::init() { -#if QT_CONFIG(process) +#if QT_CONFIG(process) && !defined(Q_OS_ANDROID) const QString testdataDir = QFileInfo(QFINDTESTDATA("copier")).absolutePath(); QVERIFY2(QDir::setCurrent(testdataDir), qPrintable("Could not chdir to " + testdataDir)); #endif @@ -424,6 +425,24 @@ void tst_QClipboard::clearBeforeSetText() QCOMPARE(QGuiApplication::clipboard()->text(), text); } +void tst_QClipboard::getTextFromHTMLMimeType() +{ + QClipboard * clipboard = QGuiApplication::clipboard(); + QMimeData * mimeData = new QMimeData(); + const QString testString("TEST"); + const QString htmlString(QLatin1String("") + testString + QLatin1String("")); + + mimeData->setText(testString); + mimeData->setHtml(htmlString); + clipboard->setMimeData(mimeData); + + QCOMPARE(clipboard->text(), testString); + QVERIFY(clipboard->mimeData()->hasText()); + QVERIFY(clipboard->mimeData()->hasHtml()); + QCOMPARE(clipboard->mimeData()->text(), testString); + QCOMPARE(clipboard->mimeData()->html(), htmlString); +} + # ifdef Q_OS_WIN using QWindowsMimeConverter = QWindowsMimeConverter;