Qt
Internal/Contributor docs for the Qt SDK. <b>Note:</b> These are NOT official API docs; those are found <a href='https://doc.qt.io/'>here</a>.
Loading...
Searching...
No Matches
qandroidextras_p.h
Go to the documentation of this file.
1// Copyright (C) 2016 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3
4#ifndef QANDROIDEXTRAS_H
5#define QANDROIDEXTRAS_H
6
7//
8// W A R N I N G
9// -------------
10//
11// This file is not part of the Qt API. It exists purely as an
12// implementation detail. This header file may change from version to
13// version without notice, or even be removed.
14//
15// We mean it.
16//
17
18#include <jni.h>
19#include <functional>
20
21#include <QtCore/private/qglobal_p.h>
22#include <QtCore/qjniobject.h>
23#include <QtCore/private/qjnihelpers_p.h>
24#include <QtCore/qcoreapplication.h>
25#include <QtCore/qmap.h>
26
27#if QT_CONFIG(future)
28#include <QtCore/qfuture.h>
29#endif
30
32
33class QAndroidParcel;
35class QAndroidBinder;
36
37class Q_CORE_EXPORT QAndroidBinder
38{
39public:
40 enum class CallType {
41 Normal = 0,
42 OneWay = 1
43 };
44
45public:
46 explicit QAndroidBinder();
47 QAndroidBinder(const QJniObject &binder);
48
49 virtual ~QAndroidBinder();
50
51 virtual bool onTransact(int code, const QAndroidParcel &data,
52 const QAndroidParcel &reply, CallType flags);
53 bool transact(int code, const QAndroidParcel &data,
54 QAndroidParcel *reply = nullptr, CallType flags = CallType::Normal) const;
55
56 QJniObject handle() const;
57
58private:
62 QSharedPointer<QAndroidBinderPrivate> d;
63};
64
66
67class Q_CORE_EXPORT QAndroidParcel
68{
69public:
71 explicit QAndroidParcel(const QJniObject& parcel);
72 virtual ~QAndroidParcel();
73
74 void writeData(const QByteArray &data) const;
75 void writeVariant(const QVariant &value) const;
76 void writeBinder(const QAndroidBinder &binder) const;
77 void writeFileDescriptor(int fd) const;
78
79 QByteArray readData() const;
80 QVariant readVariant() const;
81 QAndroidBinder readBinder() const;
82 int readFileDescriptor() const;
83
84 QJniObject handle() const;
85
86private:
88 friend class QAndroidBinder;
89 QSharedPointer<QAndroidParcelPrivate> d;
90};
91
93
95{
96public:
99 virtual void handleActivityResult(int receiverRequestCode, int resultCode,
100 const QJniObject &data) = 0;
101
102private:
104 Q_DISABLE_COPY(QAndroidActivityResultReceiver)
105
106 QScopedPointer<QAndroidActivityResultReceiverPrivate> d;
107};
108
109class Q_CORE_EXPORT QAndroidServiceConnection
110{
111public:
113 explicit QAndroidServiceConnection(const QJniObject &serviceConnection);
115
116 virtual void onServiceConnected(const QString &name,
117 const QAndroidBinder &serviceBinder) = 0;
118 virtual void onServiceDisconnected(const QString &name) = 0;
119
120 QJniObject handle() const;
121private:
122 Q_DISABLE_COPY(QAndroidServiceConnection)
123 QJniObject m_handle;
124};
125
126class Q_CORE_EXPORT QAndroidIntent
127{
128public:
130 virtual ~QAndroidIntent();
131 explicit QAndroidIntent(const QJniObject &intent);
132 explicit QAndroidIntent(const QString &action);
133 explicit QAndroidIntent(const QJniObject &packageContext, const char *className);
134
135 void putExtra(const QString &key, const QByteArray &data);
136 QByteArray extraBytes(const QString &key);
137
138 void putExtra(const QString &key, const QVariant &value);
139 QVariant extraVariant(const QString &key);
140
141 QJniObject handle() const;
142
143private:
144 QJniObject m_handle;
145};
146
148
149class Q_CORE_EXPORT QAndroidService : public QCoreApplication
150{
152
153public:
154 QAndroidService(int &argc, char **argv
155#ifndef Q_QDOC
156 , int flags = ApplicationFlags
157#endif
158 );
159 QAndroidService(int &argc, char **argv,
160 const std::function<QAndroidBinder*(const QAndroidIntent &intent)> & binder
161#ifndef Q_QDOC
162 , int flags = ApplicationFlags
163#endif
164 );
165 virtual ~QAndroidService();
166
167 virtual QAndroidBinder* onBind(const QAndroidIntent &intent);
168
169private:
171 Q_DISABLE_COPY(QAndroidService)
172
173 QScopedPointer<QAndroidServicePrivate> d;
174};
175
177{
178public:
180 void handleActivityResult(int receiverRequestCode, int resultCode,
181 const QJniObject &intent) override;
182 void registerCallback(int receiverRequestCode,
183 std::function<void(int, int, const QJniObject &)> callbackFunc);
184
186private:
187 QMap<int, std::function<void(int, int, const QJniObject &data)>> callbackMap;
188
190};
191
192namespace QtAndroidPrivate
193{
194 Q_CORE_EXPORT void startIntentSender(const QJniObject &intentSender,
195 int receiverRequestCode,
196 QAndroidActivityResultReceiver *resultReceiver = nullptr);
197 Q_CORE_EXPORT void startActivity(const QJniObject &intent,
198 int receiverRequestCode,
199 QAndroidActivityResultReceiver *resultReceiver = nullptr);
200 Q_CORE_EXPORT void startActivity(const QAndroidIntent &intent,
201 int receiverRequestCode,
202 QAndroidActivityResultReceiver *resultReceiver = nullptr);
203 Q_CORE_EXPORT void startActivity(const QJniObject &intent,
204 int receiverRequestCode,
205 std::function<void(int, int, const QJniObject &data)>
206 callbackFunc);
207
208 enum class BindFlag {
209 None = 0x00000000,
210 AutoCreate = 0x00000001,
211 DebugUnbind = 0x00000002,
212 NotForeground = 0x00000004,
213 AboveClient = 0x00000008,
214 AllowOomManagement = 0x00000010,
215 WaivePriority = 0x00000020,
216 Important = 0x00000040,
217 AdjustWithActivity = 0x00000080,
218 ExternalService = -2147483648 // 0x80000000
219
220 };
221 Q_DECLARE_FLAGS(BindFlags, BindFlag)
222
223 Q_CORE_EXPORT bool bindService(const QAndroidIntent &serviceIntent,
224 const QAndroidServiceConnection &serviceConnection,
225 BindFlags flags = BindFlag::None);
226
227#if QT_CONFIG(future)
228 enum PermissionResult {
229 Undetermined,
230 Authorized,
231 Denied
232 };
233
234 Q_CORE_EXPORT QFuture<QtAndroidPrivate::PermissionResult>
235 requestPermission(const QString &permission);
236 QFuture<QtAndroidPrivate::PermissionResult>
237 requestPermissions(const QStringList &permissions);
238 Q_CORE_EXPORT QFuture<QtAndroidPrivate::PermissionResult>
239 checkPermission(const QString &permission);
240#endif
241
242}
243
245
246#endif // QANDROIDEXTRAS_H
static jobject onBind(JNIEnv *, jclass, jobject intent)
void handleActivityResult(int receiverRequestCode, int resultCode, const QJniObject &intent) override
Reimplement this function to get activity results after starting an activity using either QtAndroidPr...
static QAndroidActivityCallbackResultReceiver * instance()
void registerCallback(int receiverRequestCode, std::function< void(int, int, const QJniObject &)> callbackFunc)
\inheaderfile QtCore/private/qandroidextras_p.h \preliminary \inmodule QtCorePrivate
virtual void handleActivityResult(int receiverRequestCode, int resultCode, const QJniObject &data)=0
Reimplement this function to get activity results after starting an activity using either QtAndroidPr...
\inheaderfile QtCore/private/qandroidextras_p.h \preliminary \inmodule QtCorePrivate
CallType
This enum is used with \l QAndroidBinder::transact() to describe the mode in which the IPC call is pe...
\inheaderfile QtCore/private/qandroidextras_p.h \preliminary \inmodule QtCorePrivate
\inheaderfile QtCore/private/qandroidextras_p.h \preliminary \inmodule QtCorePrivate
\inheaderfile QtCore/private/qandroidextras_p.h \preliminary \inmodule QtCorePrivate
virtual void onServiceConnected(const QString &name, const QAndroidBinder &serviceBinder)=0
This notification is called when the client managed to connect to the service.
virtual void onServiceDisconnected(const QString &name)=0
Called when a connection to the Service has been lost.
\inheaderfile QtCore/private/qandroidextras_p.h \preliminary \inmodule QtCorePrivate
QAndroidService(int &argc, char **argv, const std::function< QAndroidBinder *(const QAndroidIntent &intent)> &binder, int flags=ApplicationFlags)
\inmodule QtCore
Definition qbytearray.h:57
\inmodule QtCore
\inmodule QtCore
Definition qmap.h:187
\inmodule QtCore
\macro QT_RESTRICTED_CAST_FROM_ASCII
Definition qstring.h:129
\inmodule QtCore
Definition qvariant.h:65
void requestPermission(const QPermission &permission, const PermissionCallback &callback)
Qt::PermissionStatus checkPermission(const QPermission &permission)
Combined button and popup list for selecting options.
\preliminary \inmodule QtCorePrivate
Q_CORE_EXPORT void startIntentSender(const QJniObject &intentSender, int receiverRequestCode, QAndroidActivityResultReceiver *resultReceiver=nullptr)
Q_CORE_EXPORT void startActivity(const QJniObject &intent, int receiverRequestCode, QAndroidActivityResultReceiver *resultReceiver=nullptr)
Q_CORE_EXPORT bool bindService(const QAndroidIntent &serviceIntent, const QAndroidServiceConnection &serviceConnection, BindFlags flags=BindFlag::None)
static jboolean onTransact(JNIEnv *, jclass, jlong id, jint code, jobject data, jobject reply, jint flags)
DBusConnection const char DBusError DBusBusType DBusError return DBusConnection DBusHandleMessageFunction void DBusFreeFunction return DBusConnection return DBusConnection return const char DBusError return DBusConnection DBusMessage dbus_uint32_t return DBusConnection dbus_bool_t DBusConnection DBusAddWatchFunction DBusRemoveWatchFunction DBusWatchToggledFunction void DBusFreeFunction return DBusConnection DBusDispatchStatusFunction void DBusFreeFunction DBusTimeout return DBusTimeout return DBusWatch return DBusWatch unsigned int return DBusError const DBusError return const DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessageIter int const void return DBusMessageIter DBusMessageIter return DBusMessageIter void DBusMessageIter void int return DBusMessage DBusMessageIter return DBusMessageIter return DBusMessageIter DBusMessageIter const char const char const char const char return DBusMessage return DBusMessage const char return DBusMessage dbus_bool_t return DBusMessage dbus_uint32_t return DBusMessage void
EGLOutputLayerEXT EGLint EGLAttrib value
[5]
#define Q_DECLARE_FLAGS(Flags, Enum)
Definition qflags.h:174
GLuint64 GLenum void * handle
GLuint64 key
GLint GLsizei GLsizei GLenum GLenum GLsizei void * data
GLbitfield flags
GLuint64 GLenum GLint fd
GLuint name
#define Q_OBJECT
const char className[16]
[1]
Definition qwizard.cpp:100
void writeData(const QByteArray &data)
QByteArray readData()
QNetworkReply * reply