diff options
-rw-r--r-- | .qmake.conf | 2 | ||||
-rw-r--r-- | dist/changes-5.13.0 | 18 | ||||
-rw-r--r-- | examples/androidextras/notification/android-sources/AndroidManifest.xml | 2 | ||||
-rw-r--r-- | src/androidextras/android/android.pri | 3 | ||||
-rw-r--r-- | src/androidextras/android/qandroidactivitycallbackresultreceiver.cpp | 66 | ||||
-rw-r--r-- | src/androidextras/android/qandroidactivitycallbackresultreceiver_p.h | 72 | ||||
-rw-r--r-- | src/androidextras/android/qandroidfunctions.cpp | 40 | ||||
-rw-r--r-- | src/androidextras/android/qandroidfunctions.h | 6 | ||||
-rw-r--r-- | src/androidextras/doc/qtandroidextras.qdocconf | 1 |
9 files changed, 207 insertions, 3 deletions
diff --git a/.qmake.conf b/.qmake.conf index 5e39f5a..2a5f084 100644 --- a/.qmake.conf +++ b/.qmake.conf @@ -2,4 +2,4 @@ load(qt_build_config) DEFINES += QT_NO_FOREACH -MODULE_VERSION = 5.12.5 +MODULE_VERSION = 5.13.1 diff --git a/dist/changes-5.13.0 b/dist/changes-5.13.0 new file mode 100644 index 0000000..ebb4be1 --- /dev/null +++ b/dist/changes-5.13.0 @@ -0,0 +1,18 @@ +Qt 5.13 introduces many new features and improvements as well as bugfixes +over the 5.12.x series. For more details, refer to the online documentation +included in this distribution. The documentation is also available online: + +https://doc.qt.io/qt-5/index.html + +The Qt version 5.13 series is binary compatible with the 5.12.x series. +Applications compiled for 5.12 will continue to run with 5.13. + +Some of the changes listed in this file include issue tracking numbers +corresponding to tasks in the Qt Bug Tracker: + +https://bugreports.qt.io/ + +Each of these identifiers can be entered in the bug tracker to obtain more +information about a particular change. + + - This release contains only minor code improvements. diff --git a/examples/androidextras/notification/android-sources/AndroidManifest.xml b/examples/androidextras/notification/android-sources/AndroidManifest.xml index 243c9ef..e7820e1 100644 --- a/examples/androidextras/notification/android-sources/AndroidManifest.xml +++ b/examples/androidextras/notification/android-sources/AndroidManifest.xml @@ -36,7 +36,7 @@ <!-- Splash screen --> </activity> </application> - <uses-sdk android:minSdkVersion="16" /> + <uses-sdk android:minSdkVersion="21" /> <supports-screens android:largeScreens="true" android:normalScreens="true" android:anyDensity="true" android:smallScreens="true"/> <!-- %%INSERT_PERMISSIONS --> <uses-permission android:name="android.permission.INTERNET"/> diff --git a/src/androidextras/android/android.pri b/src/androidextras/android/android.pri index 4f99c14..956ac08 100644 --- a/src/androidextras/android/android.pri +++ b/src/androidextras/android/android.pri @@ -6,7 +6,8 @@ SOURCES += \ $$PWD/qandroidparcel.cpp \ $$PWD/qandroidintent.cpp \ $$PWD/qjnionload.cpp \ - $$PWD/qandroidserviceconnection.cpp + $$PWD/qandroidserviceconnection.cpp \ + $$PWD/qandroidactivitycallbackresultreceiver.cpp HEADERS += \ $$PWD/qandroidfunctions.h \ diff --git a/src/androidextras/android/qandroidactivitycallbackresultreceiver.cpp b/src/androidextras/android/qandroidactivitycallbackresultreceiver.cpp new file mode 100644 index 0000000..e32916f --- /dev/null +++ b/src/androidextras/android/qandroidactivitycallbackresultreceiver.cpp @@ -0,0 +1,66 @@ +/**************************************************************************** +** +** Copyright (C) 2019 Klaralvdalens Datakonsult AB (KDAB). +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qandroidactivitycallbackresultreceiver_p.h" + +QAndroidActivityCallbackResultReceiver * QAndroidActivityCallbackResultReceiver::s_instance = nullptr; + +QAndroidActivityCallbackResultReceiver::QAndroidActivityCallbackResultReceiver() + : QAndroidActivityResultReceiver() + , callbackMap() +{ +} + +void QAndroidActivityCallbackResultReceiver::handleActivityResult(int receiverRequestCode, int resultCode, const QAndroidJniObject &intent) +{ + callbackMap[receiverRequestCode](receiverRequestCode, resultCode, intent); + callbackMap.remove(receiverRequestCode); +} + +QAndroidActivityCallbackResultReceiver * QAndroidActivityCallbackResultReceiver::instance() { + if (!s_instance) { + s_instance = new QAndroidActivityCallbackResultReceiver(); + } + return s_instance; +} + +void QAndroidActivityCallbackResultReceiver::registerCallback(int receiverRequestCode, std::function<void(int, int, const QAndroidJniObject &data)> callbackFunc) +{ + callbackMap.insert(receiverRequestCode, callbackFunc); +} diff --git a/src/androidextras/android/qandroidactivitycallbackresultreceiver_p.h b/src/androidextras/android/qandroidactivitycallbackresultreceiver_p.h new file mode 100644 index 0000000..8232b53 --- /dev/null +++ b/src/androidextras/android/qandroidactivitycallbackresultreceiver_p.h @@ -0,0 +1,72 @@ +/**************************************************************************** +** +** Copyright (C) 2019 Klaralvdalens Datakonsult AB (KDAB). +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QANDROIDACTIVITYCALLBACKRESULTRECEIVER_P_H +#define QANDROIDACTIVITYCALLBACKRESULTRECEIVER_P_H + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists purely as an +// implementation detail. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. +// + +#include <QMap> + +#include "qandroidactivityresultreceiver.h" + +class QAndroidActivityCallbackResultReceiver: public QAndroidActivityResultReceiver +{ +public: + QAndroidActivityCallbackResultReceiver(); + void handleActivityResult(int receiverRequestCode, int resultCode, const QAndroidJniObject &intent) override; + void registerCallback(int receiverRequestCode, std::function<void(int, int, const QAndroidJniObject &)> callbackFunc); + + static QAndroidActivityCallbackResultReceiver *instance(); +private: + QMap<int, std::function<void(int, int, const QAndroidJniObject &data)>> callbackMap; + + static QAndroidActivityCallbackResultReceiver *s_instance; +}; + +#endif diff --git a/src/androidextras/android/qandroidfunctions.cpp b/src/androidextras/android/qandroidfunctions.cpp index a5ed23d..1d1aa44 100644 --- a/src/androidextras/android/qandroidfunctions.cpp +++ b/src/androidextras/android/qandroidfunctions.cpp @@ -43,6 +43,7 @@ #include "qandroidactivityresultreceiver_p.h" #include "qandroidintent.h" #include "qandroidserviceconnection.h" +#include "qandroidactivitycallbackresultreceiver_p.h" #include <QtCore/private/qjni_p.h> #include <QtCore/private/qjnihelpers_p.h> @@ -181,6 +182,45 @@ void QtAndroid::startActivity(const QAndroidJniObject &intent, } /*! + \since 5.13 + + Starts the activity given by \a intent and provides the result asynchronously through the + \a resultReceiver if this is non-null. + + If \a resultReceiver is null, then the \c startActivity() method in the \c androidActivity() + will be called. Otherwise \c startActivityForResult() will be called. + + The \a receiverRequestCode is a request code unique to the \a resultReceiver, and will be + returned along with the result, making it possible to use the same receiver for more than + one intent. + + */ +void QtAndroid::startActivity(const QAndroidIntent &intent, + int receiverRequestCode, + QAndroidActivityResultReceiver *resultReceiver) +{ + startActivity(intent.handle(), receiverRequestCode, resultReceiver); +} + +/*! + \since 5.13 + + Starts the activity given by \a intent using \c startActivityForResult() and provides the result by calling callbackFunc. + + The \a receiverRequestCode is a request code unique to the \a resultReceiver, and will be + returned along with the result, making it possible to use the same receiver for more than + one intent. +*/ +void QtAndroid::startActivity(const QAndroidJniObject &intent, + int receiverRequestCode, + std::function<void(int, int, const QAndroidJniObject &data)> callbackFunc) +{ + QAndroidJniObject activity = androidActivity(); + QAndroidActivityCallbackResultReceiver::instance()->registerCallback(receiverRequestCode, callbackFunc); + startActivity(intent, receiverRequestCode, QAndroidActivityCallbackResultReceiver::instance()); +} + +/*! \since 5.3 Starts the activity given by \a intentSender and provides the result asynchronously through the diff --git a/src/androidextras/android/qandroidfunctions.h b/src/androidextras/android/qandroidfunctions.h index 8dba435..224c8b5 100644 --- a/src/androidextras/android/qandroidfunctions.h +++ b/src/androidextras/android/qandroidfunctions.h @@ -68,6 +68,12 @@ namespace QtAndroid Q_ANDROIDEXTRAS_EXPORT void startActivity(const QAndroidJniObject &intent, int receiverRequestCode, QAndroidActivityResultReceiver *resultReceiver = nullptr); + Q_ANDROIDEXTRAS_EXPORT void startActivity(const QAndroidIntent &intent, + int receiverRequestCode, + QAndroidActivityResultReceiver *resultReceiver = nullptr); + Q_ANDROIDEXTRAS_EXPORT void startActivity(const QAndroidJniObject &intent, + int receiverRequestCode, + std::function<void(int, int, const QAndroidJniObject &data)> callbackFunc); enum class BindFlag { None = 0x00000000, diff --git a/src/androidextras/doc/qtandroidextras.qdocconf b/src/androidextras/doc/qtandroidextras.qdocconf index 56ce18a..3ac592d 100644 --- a/src/androidextras/doc/qtandroidextras.qdocconf +++ b/src/androidextras/doc/qtandroidextras.qdocconf @@ -1,4 +1,5 @@ include($QT_INSTALL_DOCS/global/qt-module-defaults.qdocconf) +include($QT_INSTALL_DOCS/config/exampleurl-qtandroidextras.qdocconf) Cpp.ignoretokens += Q_ANDROIDEXTRAS_EXPORT # dummy module header for clang, found under doc/ |