aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorBogDan Vatra <bogdan@kdab.com>2018-02-06 14:18:31 +0200
committerBogDan Vatra <bogdan@kdab.com>2018-02-07 05:34:56 +0000
commit9b6aeb9511150f53c46bd3927d956697d34606b3 (patch)
treef61566f122664479b608e661abd65455706ffe50 /src
parentbb3c2b9090bd1e1c9664492413c05fedbde575fa (diff)
Allow the user to easily register a binder creator
Until now the users were forced to subclass QAndroidService in order to provide the binder. Now is much easier, the user just pass a lambda in the QAndroidService constructor e.g. QAndroidService app(argc, argv, [](const QAndroidIntent &){ return new MyBinder{};}); Change-Id: I97608f806b311ad3c853a86cde132aea8352349b Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io>
Diffstat (limited to 'src')
-rw-r--r--src/androidextras/android/qandroidservice.cpp25
-rw-r--r--src/androidextras/android/qandroidservice.h7
2 files changed, 27 insertions, 5 deletions
diff --git a/src/androidextras/android/qandroidservice.cpp b/src/androidextras/android/qandroidservice.cpp
index 3a7626d..f6c68be 100644
--- a/src/androidextras/android/qandroidservice.cpp
+++ b/src/androidextras/android/qandroidservice.cpp
@@ -53,8 +53,9 @@ QT_BEGIN_NAMESPACE
class QAndroidServicePrivate : public QObject, public QtAndroidPrivate::OnBindListener
{
public:
- QAndroidServicePrivate(QAndroidService *service)
+ QAndroidServicePrivate(QAndroidService *service, const std::function<QAndroidBinder *(const QAndroidIntent &)> &binder = {})
: m_service(service)
+ , m_binder(binder)
{
QtAndroidPrivate::setOnBindListener(this);
}
@@ -73,7 +74,8 @@ public:
// OnBindListener interface
jobject onBind(jobject intent) override
{
- auto binder = m_service->onBind(QAndroidIntent(intent));
+ auto qai = QAndroidIntent(intent);
+ auto binder = m_binder ? m_binder(qai) : m_service->onBind(qai);
if (binder) {
{
QMutexLocker lock(&m_bindersMutex);
@@ -92,8 +94,9 @@ private:
m_binders.remove(obj);
}
-private:
- QAndroidService *m_service;
+public:
+ QAndroidService *m_service = nullptr;
+ std::function<QAndroidBinder *(const QAndroidIntent &)> m_binder;
QMutex m_bindersMutex;
QSet<QAndroidBinder*> m_binders;
};
@@ -116,7 +119,19 @@ private:
*/
QAndroidService::QAndroidService(int &argc, char **argv, int flags)
: QCoreApplication (argc, argv, QtAndroidPrivate::acuqireServiceSetup(flags))
- , d(new QAndroidServicePrivate(this))
+ , d(new QAndroidServicePrivate{this})
+{
+}
+
+/*!
+ Creates a new Android Service
+
+ \a binder is used to create a binder each when is needed
+ \sa QCoreApplication
+ */
+QAndroidService::QAndroidService(int &argc, char **argv, const std::function<QAndroidBinder *(const QAndroidIntent &)> &binder, int flags)
+ : QCoreApplication (argc, argv, QtAndroidPrivate::acuqireServiceSetup(flags))
+ , d(new QAndroidServicePrivate{this, binder})
{
}
diff --git a/src/androidextras/android/qandroidservice.h b/src/androidextras/android/qandroidservice.h
index 72e47a4..8c0855c 100644
--- a/src/androidextras/android/qandroidservice.h
+++ b/src/androidextras/android/qandroidservice.h
@@ -43,6 +43,7 @@
#include <QtAndroidExtras/qandroidextrasglobal.h>
#include <QCoreApplication>
#include <QSharedPointer>
+#include <functional>
QT_BEGIN_NAMESPACE
class QAndroidServicePrivate;
@@ -56,6 +57,12 @@ public:
, int flags = ApplicationFlags
#endif
);
+ QAndroidService(int &argc, char **argv,
+ const std::function<QAndroidBinder*(const QAndroidIntent &intent)> & binder
+#ifndef Q_QDOC
+ , int flags = ApplicationFlags
+#endif
+ );
virtual ~QAndroidService();
virtual QAndroidBinder* onBind(const QAndroidIntent &intent);