Qt 6.x
The Qt SDK
Loading...
Searching...
No Matches
androidjniclipboard.cpp
Go to the documentation of this file.
1// Copyright (C) 2012 BogDan Vatra <bogdan@kde.org>
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3
5#include <QtCore/QUrl>
6#include <QtCore/QJniObject>
7#include <QtCore/QJniEnvironment>
8
10
11using namespace QtAndroid;
13{
15
16 static JNINativeMethod methods[] = {
17 {"onClipboardDataChanged", "()V", (void *)onClipboardDataChanged}
18 };
19
21 {
23 QJniObject::callStaticMethod<void>(applicationClass(), "registerClipboardManager");
24 jclass appClass = QtAndroid::applicationClass();
26 if (env->RegisterNatives(appClass, methods, sizeof(methods) / sizeof(methods[0])) < 0) {
27 __android_log_print(ANDROID_LOG_FATAL,"Qt", "RegisterNatives failed");
28 return;
29 }
30 }
32 {
33 QJniObject::callStaticMethod<void>(applicationClass(), "clearClipData");
34 }
36 {
38 if (data->hasUrls()) {
39 QList<QUrl> urls = data->urls();
40 for (const auto &u : std::as_const(urls)) {
41 QJniObject::callStaticMethod<void>(applicationClass(),
42 "setClipboardUri",
43 "(Ljava/lang/String;)V",
44 QJniObject::fromString(u.toEncoded()).object());
45 }
46 } else if (data->hasText()) { // hasText || hasUrls, so the order matter here.
47 QJniObject::callStaticMethod<void>(applicationClass(),
48 "setClipboardText", "(Ljava/lang/String;)V",
49 QJniObject::fromString(data->text()).object());
50 } else if (data->hasHtml()) {
51 QJniObject::callStaticMethod<void>(applicationClass(),
52 "setClipboardHtml",
53 "(Ljava/lang/String;Ljava/lang/String;)V",
54 QJniObject::fromString(data->text()).object(),
55 QJniObject::fromString(data->html()).object());
56 }
57 }
58
60 {
62 if (QJniObject::callStaticMethod<jboolean>(applicationClass(), "hasClipboardText")) {
63 data->setText(QJniObject::callStaticObjectMethod(applicationClass(),
64 "getClipboardText",
65 "()Ljava/lang/String;").toString());
66 }
67 if (QJniObject::callStaticMethod<jboolean>(applicationClass(), "hasClipboardHtml")) {
68 data->setHtml(QJniObject::callStaticObjectMethod(applicationClass(),
69 "getClipboardHtml",
70 "()Ljava/lang/String;").toString());
71 }
72 if (QJniObject::callStaticMethod<jboolean>(applicationClass(), "hasClipboardUri")) {
73 QJniObject uris = QJniObject::callStaticObjectMethod(applicationClass(),
74 "getClipboardUris",
75 "()[Ljava/lang/String;");
76 if (uris.isValid()) {
77 QList<QUrl> urls;
79 jobjectArray juris = uris.object<jobjectArray>();
80 const jint nUris = env->GetArrayLength(juris);
81 urls.reserve(static_cast<int>(nUris));
82 for (int i = 0; i < nUris; ++i)
83 urls << QUrl(QJniObject(env->GetObjectArrayElement(juris, i)).toString());
84 data->setUrls(urls);
85 }
86 }
87 return data;
88 }
89
90 void onClipboardDataChanged(JNIEnv */*env*/, jobject /*thiz*/)
91 {
93 }
94}
95
\inmodule QtCore
\inmodule QtCore
Definition qlist.h:74
void reserve(qsizetype size)
Definition qlist.h:746
\inmodule QtCore
Definition qmimedata.h:16
void setText(const QString &text)
Sets text as the plain text (MIME type text/plain) used to represent the data.
void emitChanged(QClipboard::Mode mode)
\inmodule QtCore
Definition qurl.h:94
Combined button and popup list for selecting options.
void setClipboardMimeData(QMimeData *data)
static JNINativeMethod methods[]
void setClipboardManager(QAndroidPlatformClipboard *manager)
QMimeData * getClipboardMimeData()
void onClipboardDataChanged(JNIEnv *, jobject)
QAndroidPlatformClipboard * m_manager
jclass applicationClass()
GLint GLsizei GLsizei GLenum GLenum GLsizei void * data
QNetworkAccessManager manager
char * toString(const MyType &t)
[31]