summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndy Shaw <[email protected]>2020-04-27 09:07:07 +0200
committerAndy Shaw <[email protected]>2020-05-30 12:49:42 +0000
commitf71a400bf613d725b3bce959757b184593efc920 (patch)
tree45472d1daed736331462dc09254aed99a5298dae
parent6a2224fd58414a78957104dd654f697c4b2eaa1d (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 <[email protected]>
-rw-r--r--src/android/jar/src/org/qtproject/qt5/android/QtNative.java2
-rw-r--r--src/plugins/platforms/android/androidjniclipboard.cpp6
-rw-r--r--src/plugins/platforms/android/androidjniclipboard.h1
-rw-r--r--src/plugins/platforms/android/qandroidplatformclipboard.cpp4
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 899436a6fc4..83e576095b9 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 671d0b56d01..c20ac456b19 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 e83e6b555cc..96992340a68 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 2912c58e8cd..cc32bbf7719 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)