diff options
author | Andy Shaw <andy.shaw@qt.io> | 2020-04-27 09:07:07 +0200 |
---|---|---|
committer | Andy Shaw <andy.shaw@qt.io> | 2020-05-30 12:49:42 +0000 |
commit | f71a400bf613d725b3bce959757b184593efc920 (patch) | |
tree | 45472d1daed736331462dc09254aed99a5298dae | |
parent | 6a2224fd58414a78957104dd654f697c4b2eaa1d (diff) |
Android: Clear the clipboard when getting a null mimedata
From API 28 it is possible to clear the clipboard so we should ensure
that this is done if API 28 or later is being used. Otherwise it is not
removed, but that is due to limitations on the Android side.
Pick-to: 5.15
Change-Id: I1fe504d0e566c6923b39b2adf4540619c6b1daf7
Reviewed-by: Assam Boudjelthia <assam.boudjelthia@qt.io>
4 files changed, 12 insertions, 1 deletions
diff --git a/src/android/jar/src/org/qtproject/qt5/android/QtNative.java b/src/android/jar/src/org/qtproject/qt5/android/QtNative.java index 899436a6fc..83e576095b 100644 --- a/src/android/jar/src/org/qtproject/qt5/android/QtNative.java +++ b/src/android/jar/src/org/qtproject/qt5/android/QtNative.java @@ -847,6 +847,8 @@ public class QtNative private static void clearClipData() { + if (Build.VERSION.SDK_INT >= 28 && m_clipboardManager != null && m_usePrimaryClip) + m_clipboardManager.clearPrimaryClip(); m_usePrimaryClip = false; } private static void setClipboardText(String text) diff --git a/src/plugins/platforms/android/androidjniclipboard.cpp b/src/plugins/platforms/android/androidjniclipboard.cpp index 671d0b56d0..c20ac456b1 100644 --- a/src/plugins/platforms/android/androidjniclipboard.cpp +++ b/src/plugins/platforms/android/androidjniclipboard.cpp @@ -63,9 +63,13 @@ namespace QtAndroidClipboard return; } } - void setClipboardMimeData(QMimeData *data) + void clearClipboardData() { QJNIObjectPrivate::callStaticMethod<void>(applicationClass(), "clearClipData"); + } + void setClipboardMimeData(QMimeData *data) + { + clearClipboardData(); if (data->hasText()) { QJNIObjectPrivate::callStaticMethod<void>(applicationClass(), "setClipboardText", "(Ljava/lang/String;)V", diff --git a/src/plugins/platforms/android/androidjniclipboard.h b/src/plugins/platforms/android/androidjniclipboard.h index e83e6b555c..96992340a6 100644 --- a/src/plugins/platforms/android/androidjniclipboard.h +++ b/src/plugins/platforms/android/androidjniclipboard.h @@ -53,6 +53,7 @@ namespace QtAndroidClipboard void setClipboardManager(QAndroidPlatformClipboard *manager); void setClipboardMimeData(QMimeData *data); QMimeData *getClipboardMimeData(); + void clearClipboardData(); void onClipboardDataChanged(JNIEnv */*env*/, jobject /*thiz*/); // Clipboard support } diff --git a/src/plugins/platforms/android/qandroidplatformclipboard.cpp b/src/plugins/platforms/android/qandroidplatformclipboard.cpp index 2912c58e8c..cc32bbf771 100644 --- a/src/plugins/platforms/android/qandroidplatformclipboard.cpp +++ b/src/plugins/platforms/android/qandroidplatformclipboard.cpp @@ -66,6 +66,10 @@ QMimeData *QAndroidPlatformClipboard::mimeData(QClipboard::Mode mode) void QAndroidPlatformClipboard::setMimeData(QMimeData *data, QClipboard::Mode mode) { + if (!data) { + QtAndroidClipboard::clearClipboardData(); + return; + } if (data && supportsMode(mode)) QtAndroidClipboard::setClipboardMimeData(data); if (data != 0) |