QClipboard: make dataChanged() signal work on Android
This part has not been implemented before. Also replace deprecated android.text.ClipboardManager with modern android.content.ClipboardManager. Task-number: QTBUG-58548 Change-Id: I190208042af8a6c87ed391c6c72f3f51e58dfad3 Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io>bb10
parent
4ad030de71
commit
e2e874415e
|
|
@ -52,7 +52,8 @@ import android.content.pm.PackageManager;
|
|||
import android.net.Uri;
|
||||
import android.os.Handler;
|
||||
import android.os.Looper;
|
||||
import android.text.ClipboardManager;
|
||||
import android.content.ClipboardManager;
|
||||
import android.content.ClipboardManager.OnPrimaryClipChangedListener;
|
||||
import android.os.Build;
|
||||
import android.util.Log;
|
||||
import android.view.ContextMenu;
|
||||
|
|
@ -584,7 +585,14 @@ public class QtNative
|
|||
@Override
|
||||
public void run() {
|
||||
if (m_activity != null)
|
||||
m_clipboardManager = (android.text.ClipboardManager) m_activity.getSystemService(Context.CLIPBOARD_SERVICE);
|
||||
m_clipboardManager = (android.content.ClipboardManager) m_activity.getSystemService(Context.CLIPBOARD_SERVICE);
|
||||
if (m_clipboardManager != null) {
|
||||
m_clipboardManager.addPrimaryClipChangedListener(new ClipboardManager.OnPrimaryClipChangedListener() {
|
||||
public void onPrimaryClipChanged() {
|
||||
onClipboardDataChanged();
|
||||
}
|
||||
});
|
||||
}
|
||||
semaphore.release();
|
||||
}
|
||||
});
|
||||
|
|
@ -844,6 +852,10 @@ public class QtNative
|
|||
public static native void onContextMenuClosed(Menu menu);
|
||||
// menu methods
|
||||
|
||||
// clipboard methods
|
||||
public static native void onClipboardDataChanged();
|
||||
// clipboard methods
|
||||
|
||||
// activity methods
|
||||
public static native void onActivityResult(int requestCode, int resultCode, Intent data);
|
||||
public static native void onNewIntent(Intent data);
|
||||
|
|
|
|||
|
|
@ -38,7 +38,6 @@
|
|||
****************************************************************************/
|
||||
|
||||
#include "androidjniclipboard.h"
|
||||
#include "androidjnimain.h"
|
||||
#include <QtCore/private/qjni_p.h>
|
||||
|
||||
QT_BEGIN_NAMESPACE
|
||||
|
|
@ -46,10 +45,23 @@ QT_BEGIN_NAMESPACE
|
|||
using namespace QtAndroid;
|
||||
namespace QtAndroidClipboard
|
||||
{
|
||||
void setClipboardListener(QAndroidPlatformClipboard *listener)
|
||||
QAndroidPlatformClipboard *m_manager = nullptr;
|
||||
|
||||
static char const *const QtNativeClassName = "org/qtproject/qt5/android/QtNative";
|
||||
static JNINativeMethod methods[] = {
|
||||
{"onClipboardDataChanged", "()V", (void *)onClipboardDataChanged}
|
||||
};
|
||||
|
||||
void setClipboardManager(QAndroidPlatformClipboard *manager)
|
||||
{
|
||||
Q_UNUSED(listener);
|
||||
m_manager = manager;
|
||||
QJNIObjectPrivate::callStaticMethod<void>(applicationClass(), "registerClipboardManager");
|
||||
jclass appClass = QtAndroid::applicationClass();
|
||||
QJNIEnvironmentPrivate env;
|
||||
if (env->RegisterNatives(appClass, methods, sizeof(methods) / sizeof(methods[0])) < 0) {
|
||||
__android_log_print(ANDROID_LOG_FATAL,"Qt", "RegisterNatives failed");
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
void setClipboardText(const QString &text)
|
||||
|
|
@ -73,6 +85,11 @@ namespace QtAndroidClipboard
|
|||
"()Ljava/lang/String;");
|
||||
return text.toString();
|
||||
}
|
||||
|
||||
void onClipboardDataChanged(JNIEnv */*env*/, jobject /*thiz*/)
|
||||
{
|
||||
m_manager->emitChanged(QClipboard::Clipboard);
|
||||
}
|
||||
}
|
||||
|
||||
QT_END_NAMESPACE
|
||||
|
|
|
|||
|
|
@ -41,6 +41,8 @@
|
|||
#define ANDROIDJNICLIPBOARD_H
|
||||
|
||||
#include <QString>
|
||||
#include "qandroidplatformclipboard.h"
|
||||
#include "androidjnimain.h"
|
||||
|
||||
QT_BEGIN_NAMESPACE
|
||||
|
||||
|
|
@ -48,10 +50,11 @@ class QAndroidPlatformClipboard;
|
|||
namespace QtAndroidClipboard
|
||||
{
|
||||
// Clipboard support
|
||||
void setClipboardListener(QAndroidPlatformClipboard *listener);
|
||||
void setClipboardManager(QAndroidPlatformClipboard *manager);
|
||||
void setClipboardText(const QString &text);
|
||||
bool hasClipboardText();
|
||||
QString clipboardText();
|
||||
void onClipboardDataChanged(JNIEnv */*env*/, jobject /*thiz*/);
|
||||
// Clipboard support
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -45,7 +45,7 @@ QT_BEGIN_NAMESPACE
|
|||
|
||||
QAndroidPlatformClipboard::QAndroidPlatformClipboard()
|
||||
{
|
||||
QtAndroidClipboard::setClipboardListener(this);
|
||||
QtAndroidClipboard::setClipboardManager(this);
|
||||
}
|
||||
|
||||
QMimeData *QAndroidPlatformClipboard::mimeData(QClipboard::Mode mode)
|
||||
|
|
|
|||
Loading…
Reference in New Issue