diff --git a/src/corelib/doc/snippets/permissions/permissions.cpp b/src/corelib/doc/snippets/permissions/permissions.cpp deleted file mode 100644 index a2c05db4235..00000000000 --- a/src/corelib/doc/snippets/permissions/permissions.cpp +++ /dev/null @@ -1,141 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2021 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:BSD$ -** 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. -** -** BSD License Usage -** Alternatively, you may use this file under the terms of the BSD license -** as follows: -** -** "Redistribution and use in source and binary forms, with or without -** modification, are permitted provided that the following conditions are -** met: -** * Redistributions of source code must retain the above copyright -** notice, this list of conditions and the following disclaimer. -** * Redistributions in binary form must reproduce the above copyright -** notice, this list of conditions and the following disclaimer in -** the documentation and/or other materials provided with the -** distribution. -** * Neither the name of The Qt Company Ltd nor the names of its -** contributors may be used to endorse or promote products derived -** from this software without specific prior written permission. -** -** -** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include -#include -#include - -void takeSelfie() {}; - -void requestCameraPermissionAndroid() -{ -//! [Request camera permission on Android] - QCoreApplication::requestPermission(QStringLiteral("android.permission.CAMERA")) - .then([=](QApplicationPermission::PermissionResult result) { - if (result == QApplicationPermission::Authorized) - takeSelfie(); - }); -//! [Request camera permission on Android] -} - -void requestCameraPermission() -{ -//! [Request camera permission] - QCoreApplication::requestPermission(QApplicationPermission::Camera) - .then([=](QApplicationPermission::PermissionResult result) { - if (result == QApplicationPermission::Authorized) - takeSelfie(); - }); -//! [Request camera permission] -} - -void requestCameraPermissionSyncAndroid() -{ -//! [Request camera permission sync on Android] - auto future = QCoreApplication::requestPermission(QStringLiteral("android.permission.CAMERA")); - auto result = future.result(); // blocks and waits for the result to be ready - if (result == QApplicationPermission::Authorized) - takeSelfie(); -//! [Request camera permission sync on Android] -} - -void requestCameraPermissionSync() -{ -//! [Request camera permission sync] - auto future = QCoreApplication::requestPermission(QApplicationPermission::Camera); - auto result = future.result(); // blocks and waits for the result to be ready - if (result == QApplicationPermission::Authorized) - takeSelfie(); -//! [Request camera permission sync] -} - -void checkCameraPermissionAndroid() -{ -//! [Check camera permission on Android] - QCoreApplication::checkPermission(QStringLiteral("android.permission.CAMERA")) - .then([=](QApplicationPermission::PermissionResult result) { - if (result == QApplicationPermission::Authorized) - takeSelfie(); - }); -//! [Check camera permission on Android] -} - -void checkCameraPermission() -{ -//! [Check camera permission] - QCoreApplication::checkPermission(QApplicationPermission::Camera) - .then([=](QApplicationPermission::PermissionResult result) { - if (result == QApplicationPermission::Authorized) - takeSelfie(); - }); -//! [Check camera permission] -} - -void checkCameraPermissionAndroidSync() -{ -//! [Check camera permission sync on Android] - auto future = QCoreApplication::checkPermission(QStringLiteral("android.permission.CAMERA")); - // may block and wait for the result to be ready on some platforms - auto result = future.result(); - if (result == QApplicationPermission::Authorized) - takeSelfie(); -//! [Check camera permission sync on Android] -} - -void checkCameraPermissionSync() -{ -//! [Check camera permission sync] - auto future = QCoreApplication::checkPermission(QApplicationPermission::Camera); - // may block and wait for the result to be ready on some platforms - auto result = future.result(); - if (result == QApplicationPermission::Authorized) - takeSelfie(); -//! [Check camera permission sync] -} diff --git a/src/corelib/kernel/qapplicationpermission.qdoc b/src/corelib/kernel/qapplicationpermission.qdoc deleted file mode 100644 index 7e2bcaad910..00000000000 --- a/src/corelib/kernel/qapplicationpermission.qdoc +++ /dev/null @@ -1,100 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2021 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:FDL$ -** 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 Free Documentation License Usage -** Alternatively, this file may be used under the terms of the GNU Free -** Documentation License version 1.3 as published by the Free Software -** Foundation and appearing in the file included in the packaging of -** this file. Please review the following information to ensure -** the GNU Free Documentation License version 1.3 requirements -** will be met: https://www.gnu.org/licenses/fdl-1.3.html. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -/*! - \namespace QApplicationPermission - - \brief The QApplicationPermission namespace contains enums for app permission - types and results. - - This namespace's enums are used by \l {QCoreApplication::requestPermission()} and - \l {QCoreApplication::checkPermission()}. -*/ - -/*! - \enum QApplicationPermission::PermissionType - - Predefined sets of permission values. - - \value Camera Access the camera for taking pictures or videos and configuring - the camera settings. Maps to "android.permission.CAMERA" on Android. - \value Microphone Access the microphone, receive the sound signal (e.g. to - analyze or record it). Maps to \c "android.permission.RECORD_AUDIO" - on Android. - \value Location Access approximate location provider (wifi, cell tower). - Maps to \c "android.permission.ACCESS_COARSE_LOCATION" on Android. - \value PreciseLocation Location Access accurate location provider (satellite). - Maps to \c "android.permission.ACCESS_FINE_LOCATION" on Android. - \value PreciseBackgroundLocation Access the precise location services when - the app is in the background. Maps to - \c "android.permission.ACCESS_BACKGROUND_LOCATION" on Android, and - implies \l PreciseLocation. - \value BackgroundLocation Access the approximate location services when - the app is in the background. Maps to - \c "android.permission.ACCESS_BACKGROUND_LOCATION" on Android, and - implies \l Location. - \value BodySensors Access body sensors such as a heart rate sensor. - Maps to \c "android.permission.BODY_SENSORS" on Android. - \value PhysicalActivity Access to data about physical activity and body - movements. Maps to \c "android.permission.ACTIVITY_RECOGNITION" - on Android. - \value Contacts Read and write user contacts. Maps to - \c "android.permission.READ_CONTACTS" and \c "android.permission.WRITE_CONTACTS" - on Android. - \value Storage Access device storage with read and write permissions. - Maps to \c "android.permission.READ_EXTERNAL_STORAGE" and - \c "android.permission.WRITE_EXTERNAL_STORAGE"on Android. - \value Calendar Read and write the user's calendar. - Maps to \c "android.permission.READ_CALENDAR" and - \c "android.permission.WRITE_CALENDAR" on Android. - - \omitvalue Bluetooth - - \note Both Android and iOS require the native permission values to be added - to the \c AndroidManifest.xml and \c info.plist respectively. For more - information on Android permissions, see \c {Qt Creator: Editing Manifest Files}. - For more information on iOS \c info.plist, see - \l {Information Property List Files}. - - \since 6.2 - \sa QCoreApplication::requestPermission(), QCoreApplication::checkPermission() -*/ - -/*! - \enum QApplicationPermission::PermissionResult - - The result values for a permission check or request. - - \value Authorized The permission is authorized. - \value Denied The permission is denied. - \value Restricted The permission state is denied and cannot be changed due - to restrictions from the system. - \value Undetermined The permission state is not yet known. - - \since 6.2 - \sa QCoreApplication::requestPermission(), QCoreApplication::checkPermission() -*/ diff --git a/src/corelib/kernel/qcoreapplication.cpp b/src/corelib/kernel/qcoreapplication.cpp index 10dbe2f6843..812b4afcc4e 100644 --- a/src/corelib/kernel/qcoreapplication.cpp +++ b/src/corelib/kernel/qcoreapplication.cpp @@ -3083,166 +3083,6 @@ void QCoreApplication::setEventDispatcher(QAbstractEventDispatcher *eventDispatc \sa Q_OBJECT, QObject::tr() */ -#if QT_CONFIG(future) && !defined(QT_NO_QOBJECT) - - QFuture defaultPermissionFuture() - { - QPromise promise; - QFuture future = promise.future(); - promise.start(); -#if defined(QT_DEBUG) - qWarning() << "This platform doesn't have an implementation" - << "for the application permissions API."; -#endif - promise.addResult(QApplicationPermission::Authorized); - promise.finish(); - return future; - } - - QFuture - QCoreApplicationPrivate::requestPermission(QApplicationPermission::PermissionType permission) - { - Q_UNUSED(permission) - return defaultPermissionFuture(); - } - - QFuture - QCoreApplicationPrivate::requestPermission(const QString &permission) - { - Q_UNUSED(permission) - return defaultPermissionFuture(); - } - - QFuture - QCoreApplicationPrivate::checkPermission(QApplicationPermission::PermissionType permission) - { - Q_UNUSED(permission) - return defaultPermissionFuture(); - } - - QFuture - QCoreApplicationPrivate::checkPermission(const QString &permission) - { - Q_UNUSED(permission) - return defaultPermissionFuture(); - } - -/*! - Requests the \a permission and returns a QFuture representing the - result of the request. - - Applications can request a permission in a cross-platform fashion. For example - you can request permission to use the camera asynchronously as follows: - - \snippet permissions/permissions.cpp Request camera permission - - \note A function passed to \l {QFuture::then()} will be called once the request - is processed. It can take some suitable action in response to the - granting or refusal of the permission. It must not access objects that - might be deleted before it is called. - - To do the same request synchronously: - - \snippet permissions/permissions.cpp Request camera permission sync - - \note Any platform that doesn't have an implementation for this API, - returns QApplicationPermission::Authorized by default. Currently, only Android - has an implemtation for this API. - - \since 6.2 - \sa checkPermission() -*/ -QFuture -QCoreApplication::requestPermission(QApplicationPermission::PermissionType permission) -{ - return QCoreApplicationPrivate::requestPermission(permission); -} - -/*! - Requests the \a permission and returns a QFuture representing the - result of the request. - - All application permissions supported by a platform can be requested by their - platform-specific names. For example you can request permission to use the - camera asynchronously on Android as follows: - - \snippet permissions/permissions.cpp Request camera permission on Android - - \note A function passed to \l {QFuture::then()} will be called once the request - is processed. It can take some suitable action in response to the - granting or refusal of the permission. It must not access objects that - might be deleted before it is called. - - To do the same request synchronously: - - \snippet permissions/permissions.cpp Request camera permission sync on Android - - \note Any platform that doesn't have an implementation for this API, - returns QApplicationPermission::Authorized by default. Currently, only Android - has an implemtation for this API. - - \since 6.2 - \sa checkPermission() -*/ -QFuture -QCoreApplication::requestPermission(const QString &permission) -{ - return QCoreApplicationPrivate::requestPermission(permission); -} - -/*! - Checks whether this process has the named \a permission and returns a QFuture - representing the result of the check. - - Applications can check a permission in a cross-platform fashion. For example - you can check the permission to use the camera asynchronously as follows: - - \snippet permissions/permissions.cpp Check camera permission - - To do the same request synchronously: - - \snippet permissions/permissions.cpp Check camera permission sync - - \note Any platform that doesn't have an implementation for this API, - returns QApplicationPermission::Authorized by default. Currently, only Android - has an implemtation for this API. - - \since 6.2 - \sa requestPermission() -*/ -QFuture -QCoreApplication::checkPermission(QApplicationPermission::PermissionType permission) -{ - return QCoreApplicationPrivate::checkPermission(permission); -} - -/*! - Checks whether this process has the named \a permission and returns a QFuture - representing the result of the check. - - All application permissions supported by a platform can be checked by their - platform-specific names. For example you can check the permission to use the - camera asynchronously on Android as follows: - - \snippet permissions/permissions.cpp Check camera permission on Android - - To do the same request synchronously: - - \snippet permissions/permissions.cpp Check camera permission sync on Android - - \note Any platform that doesn't have an implementation for this API, - returns QApplicationPermission::Authorized by default. Currently, only Android - has an implemtation for this API. - - \since 6.2 - \sa requestPermission() -*/ -QFuture -QCoreApplication::checkPermission(const QString &permission) -{ - return QCoreApplicationPrivate::checkPermission(permission); -} -#endif // future && QT_NO_QOBJECT void *QCoreApplication::resolveInterface(const char *name, int revision) const { diff --git a/src/corelib/kernel/qcoreapplication.h b/src/corelib/kernel/qcoreapplication.h index 873c0acf1f8..a72b0b64399 100644 --- a/src/corelib/kernel/qcoreapplication.h +++ b/src/corelib/kernel/qcoreapplication.h @@ -167,17 +167,6 @@ public: QT_DECLARE_NATIVE_INTERFACE_ACCESSOR(QCoreApplication) #ifndef QT_NO_QOBJECT -#if QT_CONFIG(future) - static QFuture - requestPermission(QApplicationPermission::PermissionType permission); - static QFuture - requestPermission(const QString &permission); - - static QFuture - checkPermission(QApplicationPermission::PermissionType permission); - static QFuture - checkPermission(const QString &permission); -#endif void installNativeEventFilter(QAbstractNativeEventFilter *filterObj); void removeNativeEventFilter(QAbstractNativeEventFilter *filterObj); diff --git a/src/corelib/kernel/qcoreapplication_p.h b/src/corelib/kernel/qcoreapplication_p.h index 26dfef20598..ae1e1cd4e9b 100644 --- a/src/corelib/kernel/qcoreapplication_p.h +++ b/src/corelib/kernel/qcoreapplication_p.h @@ -203,17 +203,6 @@ public: void processCommandLineArguments(); QString qmljs_debug_arguments; // a string containing arguments for js/qml debugging. inline QString qmljsDebugArgumentsString() const { return qmljs_debug_arguments; } -#if QT_CONFIG(future) && !defined QT_NO_QOBJECT - static QFuture - requestPermission(QApplicationPermission::PermissionType permission); - static QFuture - requestPermission(const QString &permission); - - static QFuture - checkPermission(QApplicationPermission::PermissionType permission); - static QFuture - checkPermission(const QString &permission); -#endif #ifdef QT_NO_QOBJECT QCoreApplication *q_ptr; diff --git a/src/corelib/platform/android/qandroidextras.cpp b/src/corelib/platform/android/qandroidextras.cpp index e43800e27cd..7de28f5a120 100644 --- a/src/corelib/platform/android/qandroidextras.cpp +++ b/src/corelib/platform/android/qandroidextras.cpp @@ -1178,6 +1178,14 @@ requestPermissionsInternal(const QStringList &permissions) return future; } +/*! + \preliminary + Requests the \a permission and returns a QFuture representing the + result of the request. + + \since 6.2 + \sa checkPermission() +*/ QFuture QtAndroidPrivate::requestPermission(const QString &permission) { @@ -1200,6 +1208,15 @@ static bool isBackgroundLocationApi29(QtAndroidPrivate::PermissionType permissio || permission == QtAndroidPrivate::PreciseBackgroundLocation); } +/*! + \preliminary + + Requests the \a permission and returns a QFuture representing the + result of the request. + + \since 6.2 + \sa checkPermission() +*/ QFuture QtAndroidPrivate::requestPermission(QtAndroidPrivate::PermissionType permission) { @@ -1232,6 +1249,14 @@ QtAndroidPrivate::requestPermission(QtAndroidPrivate::PermissionType permission) return future; } +/*! + \preliminary + Checks whether this process has the named \a permission and returns a QFuture + representing the result of the check. + + \since 6.2 + \sa requestPermission() +*/ QFuture QtAndroidPrivate::checkPermission(const QString &permission) { @@ -1253,6 +1278,14 @@ QtAndroidPrivate::checkPermission(const QString &permission) return future; } +/*! + \preliminary + Checks whether this process has the named \a permission and returns a QFuture + representing the result of the check. + + \since 6.2 + \sa requestPermission() +*/ QFuture QtAndroidPrivate::checkPermission(QtAndroidPrivate::PermissionType permission) {