Android: Fix clipboard issue with urls

Both hasUrls() and hasText() can return true when containing urls, as
hasText() checks hasUrls() as well.

Fixes: QTBUG-85773
Change-Id: I91a34f151e7de17ab5b9a2f24bc0b6e6c097d7f9
Reviewed-by: Assam Boudjelthia <assam.boudjelthia@qt.io>
(cherry picked from commit 5f9591bde3f3a67c566f3aa3571b57c82bd59cc5)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
This commit is contained in:
Christian Strømme 2020-08-05 20:48:08 +02:00 committed by Qt Cherry-pick Bot
parent 495e4c6ad2
commit d9acc25af3

View File

@ -35,18 +35,6 @@ namespace QtAndroidClipboard
void setClipboardMimeData(QMimeData *data)
{
clearClipboardData();
if (data->hasText()) {
QJniObject::callStaticMethod<void>(applicationClass(),
"setClipboardText", "(Ljava/lang/String;)V",
QJniObject::fromString(data->text()).object());
}
if (data->hasHtml()) {
QJniObject::callStaticMethod<void>(applicationClass(),
"setClipboardHtml",
"(Ljava/lang/String;Ljava/lang/String;)V",
QJniObject::fromString(data->text()).object(),
QJniObject::fromString(data->html()).object());
}
if (data->hasUrls()) {
QList<QUrl> urls = data->urls();
for (const auto &u : qAsConst(urls)) {
@ -55,6 +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<void>(applicationClass(),
"setClipboardText", "(Ljava/lang/String;)V",
QJniObject::fromString(data->text()).object());
} else if (data->hasHtml()) {
QJniObject::callStaticMethod<void>(applicationClass(),
"setClipboardHtml",
"(Ljava/lang/String;Ljava/lang/String;)V",
QJniObject::fromString(data->text()).object(),
QJniObject::fromString(data->html()).object());
}
}