Rename QPermission namespace to QApplicationPermission

Pick-to: 6.2
Task-number: QTBUG-94407
Change-Id: Ie9c05dbe498cd372c015b5125e6cb8d59ca96b59
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
This commit is contained in:
Assam Boudjelthia 2021-06-30 13:54:54 +03:00
parent b612014ae7
commit 07d4ecd734
9 changed files with 120 additions and 111 deletions

View File

@ -58,8 +58,9 @@ int main(int argc, char *argv[])
{ {
QApplication app(argc, argv); QApplication app(argc, argv);
auto permission = QPermission::WriteStorage; auto permission = QApplicationPermission::WriteStorage;
if (QCoreApplication::requestPermission(permission).result() != QPermission::Authorized) { if (QCoreApplication::requestPermission(permission).result()
!= QApplicationPermission::Authorized) {
qWarning() << "Couldn't get 'WriteStorage' permission!"; qWarning() << "Couldn't get 'WriteStorage' permission!";
return -1; return -1;
} }

View File

@ -119,7 +119,7 @@ qt_internal_add_module(Core
kernel/qobjectcleanuphandler.cpp kernel/qobjectcleanuphandler.h kernel/qobjectcleanuphandler.cpp kernel/qobjectcleanuphandler.h
kernel/qobjectdefs.h kernel/qobjectdefs.h
kernel/qobjectdefs_impl.h kernel/qobjectdefs_impl.h
kernel/qpermission.h kernel/qapplicationpermission.h
kernel/qpointer.cpp kernel/qpointer.h kernel/qpointer.cpp kernel/qpointer.h
kernel/qproperty.cpp kernel/qproperty.h kernel/qproperty_p.h kernel/qproperty.cpp kernel/qproperty.h kernel/qproperty_p.h
kernel/qpropertyprivate.h kernel/qpropertyprivate.h

View File

@ -58,8 +58,8 @@ void requestCameraPermissionAndroid()
{ {
//! [Request camera permission on Android] //! [Request camera permission on Android]
QCoreApplication::requestPermission(QStringLiteral("android.permission.CAMERA")) QCoreApplication::requestPermission(QStringLiteral("android.permission.CAMERA"))
.then([=](QPermission::PermissionResult result) { .then([=](QApplicationPermission::PermissionResult result) {
if (result == QPermission::Authorized) if (result == QApplicationPermission::Authorized)
takeSelfie(); takeSelfie();
}); });
//! [Request camera permission on Android] //! [Request camera permission on Android]
@ -68,9 +68,9 @@ void requestCameraPermissionAndroid()
void requestCameraPermission() void requestCameraPermission()
{ {
//! [Request camera permission] //! [Request camera permission]
QCoreApplication::requestPermission(QPermission::Camera) QCoreApplication::requestPermission(QApplicationPermission::Camera)
.then([=](QPermission::PermissionResult result) { .then([=](QApplicationPermission::PermissionResult result) {
if (result == QPermission::Authorized) if (result == QApplicationPermission::Authorized)
takeSelfie(); takeSelfie();
}); });
//! [Request camera permission] //! [Request camera permission]
@ -81,7 +81,7 @@ void requestCameraPermissionSyncAndroid()
//! [Request camera permission sync on Android] //! [Request camera permission sync on Android]
auto future = QCoreApplication::requestPermission(QStringLiteral("android.permission.CAMERA")); auto future = QCoreApplication::requestPermission(QStringLiteral("android.permission.CAMERA"));
auto result = future.result(); // blocks and waits for the result to be ready auto result = future.result(); // blocks and waits for the result to be ready
if (result == QPermission::Authorized) if (result == QApplicationPermission::Authorized)
takeSelfie(); takeSelfie();
//! [Request camera permission sync on Android] //! [Request camera permission sync on Android]
} }
@ -89,9 +89,9 @@ void requestCameraPermissionSyncAndroid()
void requestCameraPermissionSync() void requestCameraPermissionSync()
{ {
//! [Request camera permission sync] //! [Request camera permission sync]
auto future = QCoreApplication::requestPermission(QPermission::Camera); auto future = QCoreApplication::requestPermission(QApplicationPermission::Camera);
auto result = future.result(); // blocks and waits for the result to be ready auto result = future.result(); // blocks and waits for the result to be ready
if (result == QPermission::Authorized) if (result == QApplicationPermission::Authorized)
takeSelfie(); takeSelfie();
//! [Request camera permission sync] //! [Request camera permission sync]
} }
@ -100,8 +100,8 @@ void checkCameraPermissionAndroid()
{ {
//! [Check camera permission on Android] //! [Check camera permission on Android]
QCoreApplication::checkPermission(QStringLiteral("android.permission.CAMERA")) QCoreApplication::checkPermission(QStringLiteral("android.permission.CAMERA"))
.then([=](QPermission::PermissionResult result) { .then([=](QApplicationPermission::PermissionResult result) {
if (result == QPermission::Authorized) if (result == QApplicationPermission::Authorized)
takeSelfie(); takeSelfie();
}); });
//! [Check camera permission on Android] //! [Check camera permission on Android]
@ -110,9 +110,9 @@ void checkCameraPermissionAndroid()
void checkCameraPermission() void checkCameraPermission()
{ {
//! [Check camera permission] //! [Check camera permission]
QCoreApplication::checkPermission(QPermission::Camera) QCoreApplication::checkPermission(QApplicationPermission::Camera)
.then([=](QPermission::PermissionResult result) { .then([=](QApplicationPermission::PermissionResult result) {
if (result == QPermission::Authorized) if (result == QApplicationPermission::Authorized)
takeSelfie(); takeSelfie();
}); });
//! [Check camera permission] //! [Check camera permission]
@ -124,7 +124,7 @@ void checkCameraPermissionAndroidSync()
auto future = QCoreApplication::checkPermission(QStringLiteral("android.permission.CAMERA")); auto future = QCoreApplication::checkPermission(QStringLiteral("android.permission.CAMERA"));
// may block and wait for the result to be ready on some platforms // may block and wait for the result to be ready on some platforms
auto result = future.result(); auto result = future.result();
if (result == QPermission::Authorized) if (result == QApplicationPermission::Authorized)
takeSelfie(); takeSelfie();
//! [Check camera permission sync on Android] //! [Check camera permission sync on Android]
} }
@ -132,10 +132,10 @@ void checkCameraPermissionAndroidSync()
void checkCameraPermissionSync() void checkCameraPermissionSync()
{ {
//! [Check camera permission sync] //! [Check camera permission sync]
auto future = QCoreApplication::checkPermission(QPermission::Camera); auto future = QCoreApplication::checkPermission(QApplicationPermission::Camera);
// may block and wait for the result to be ready on some platforms // may block and wait for the result to be ready on some platforms
auto result = future.result(); auto result = future.result();
if (result == QPermission::Authorized) if (result == QApplicationPermission::Authorized)
takeSelfie(); takeSelfie();
//! [Check camera permission sync] //! [Check camera permission sync]
} }

View File

@ -37,14 +37,14 @@
** **
****************************************************************************/ ****************************************************************************/
#ifndef QPERMISSION_H #ifndef QAPPLICATIONPERMISSION_H
#define QPERMISSION_H #define QAPPLICATIONPERMISSION_H
#include <QtCore/qglobal.h> #include <QtCore/qglobal.h>
QT_BEGIN_NAMESPACE QT_BEGIN_NAMESPACE
namespace QPermission namespace QApplicationPermission
{ {
enum PermissionType { enum PermissionType {
@ -71,8 +71,11 @@ enum PermissionResult {
Restricted, Restricted,
Undetermined Undetermined
}; };
} // QPermission } // QApplicationPermission
// TODO: remove after usages in other modules are renamed.
namespace QPermission = QApplicationPermission;
QT_END_NAMESPACE QT_END_NAMESPACE
#endif // QPERMISSION_H #endif // QAPPLICATIONPERMISSION_H

View File

@ -26,16 +26,17 @@
****************************************************************************/ ****************************************************************************/
/*! /*!
\namespace QPermission \namespace QApplicationPermission
\brief The QPermission namespace contains enums for app permission types and results. \brief The QApplicationPermission namespace contains enums for app permission
types and results.
This namespace's enums are used by \l {QCoreApplication::requestPermission()} and This namespace's enums are used by \l {QCoreApplication::requestPermission()} and
\l {QCoreApplication::checkPermission()}. \l {QCoreApplication::checkPermission()}.
*/ */
/*! /*!
\enum QPermission::PermissionType \enum QApplicationPermission::PermissionType
Predefined sets of permission values. Predefined sets of permission values.
@ -87,7 +88,7 @@
*/ */
/*! /*!
\enum QPermission::PermissionResult \enum QApplicationPermission::PermissionResult
The result values for a permission check or request. The result values for a permission check or request.

View File

@ -3086,42 +3086,42 @@ void QCoreApplication::setEventDispatcher(QAbstractEventDispatcher *eventDispatc
#if QT_CONFIG(future) && !defined(QT_NO_QOBJECT) #if QT_CONFIG(future) && !defined(QT_NO_QOBJECT)
#if !defined(Q_OS_ANDROID) #if !defined(Q_OS_ANDROID)
QFuture<QPermission::PermissionResult> defaultPermissionFuture() QFuture<QApplicationPermission::PermissionResult> defaultPermissionFuture()
{ {
QPromise<QPermission::PermissionResult> promise; QPromise<QApplicationPermission::PermissionResult> promise;
QFuture<QPermission::PermissionResult> future = promise.future(); QFuture<QApplicationPermission::PermissionResult> future = promise.future();
promise.start(); promise.start();
#if defined(QT_DEBUG) #if defined(QT_DEBUG)
qWarning() << "This platform doesn't have an implementation" qWarning() << "This platform doesn't have an implementation"
<< "for the application permissions API."; << "for the application permissions API.";
#endif #endif
promise.addResult(QPermission::Authorized); promise.addResult(QApplicationPermission::Authorized);
promise.finish(); promise.finish();
return future; return future;
} }
QFuture<QPermission::PermissionResult> QFuture<QApplicationPermission::PermissionResult>
QCoreApplicationPrivate::requestPermission(QPermission::PermissionType permission) QCoreApplicationPrivate::requestPermission(QApplicationPermission::PermissionType permission)
{ {
Q_UNUSED(permission) Q_UNUSED(permission)
return defaultPermissionFuture(); return defaultPermissionFuture();
} }
QFuture<QPermission::PermissionResult> QFuture<QApplicationPermission::PermissionResult>
QCoreApplicationPrivate::requestPermission(const QString &permission) QCoreApplicationPrivate::requestPermission(const QString &permission)
{ {
Q_UNUSED(permission) Q_UNUSED(permission)
return defaultPermissionFuture(); return defaultPermissionFuture();
} }
QFuture<QPermission::PermissionResult> QFuture<QApplicationPermission::PermissionResult>
QCoreApplicationPrivate::checkPermission(QPermission::PermissionType permission) QCoreApplicationPrivate::checkPermission(QApplicationPermission::PermissionType permission)
{ {
Q_UNUSED(permission) Q_UNUSED(permission)
return defaultPermissionFuture(); return defaultPermissionFuture();
} }
QFuture<QPermission::PermissionResult> QFuture<QApplicationPermission::PermissionResult>
QCoreApplicationPrivate::checkPermission(const QString &permission) QCoreApplicationPrivate::checkPermission(const QString &permission)
{ {
Q_UNUSED(permission) Q_UNUSED(permission)
@ -3148,14 +3148,14 @@ void QCoreApplication::setEventDispatcher(QAbstractEventDispatcher *eventDispatc
\snippet permissions/permissions.cpp Request camera permission sync \snippet permissions/permissions.cpp Request camera permission sync
\note Any platform that doesn't have an implementation for this API, \note Any platform that doesn't have an implementation for this API,
returns QPermission::Authorized by default. Currently, only Android returns QApplicationPermission::Authorized by default. Currently, only Android
has an implemtation for this API. has an implemtation for this API.
\since 6.2 \since 6.2
\sa checkPermission() \sa checkPermission()
*/ */
QFuture<QPermission::PermissionResult> QFuture<QApplicationPermission::PermissionResult>
QCoreApplication::requestPermission(QPermission::PermissionType permission) QCoreApplication::requestPermission(QApplicationPermission::PermissionType permission)
{ {
return QCoreApplicationPrivate::requestPermission(permission); return QCoreApplicationPrivate::requestPermission(permission);
} }
@ -3180,13 +3180,13 @@ QCoreApplication::requestPermission(QPermission::PermissionType permission)
\snippet permissions/permissions.cpp Request camera permission sync on Android \snippet permissions/permissions.cpp Request camera permission sync on Android
\note Any platform that doesn't have an implementation for this API, \note Any platform that doesn't have an implementation for this API,
returns QPermission::Authorized by default. Currently, only Android returns QApplicationPermission::Authorized by default. Currently, only Android
has an implemtation for this API. has an implemtation for this API.
\since 6.2 \since 6.2
\sa checkPermission() \sa checkPermission()
*/ */
QFuture<QPermission::PermissionResult> QFuture<QApplicationPermission::PermissionResult>
QCoreApplication::requestPermission(const QString &permission) QCoreApplication::requestPermission(const QString &permission)
{ {
return QCoreApplicationPrivate::requestPermission(permission); return QCoreApplicationPrivate::requestPermission(permission);
@ -3206,14 +3206,14 @@ QCoreApplication::requestPermission(const QString &permission)
\snippet permissions/permissions.cpp Check camera permission sync \snippet permissions/permissions.cpp Check camera permission sync
\note Any platform that doesn't have an implementation for this API, \note Any platform that doesn't have an implementation for this API,
returns QPermission::Authorized by default. Currently, only Android returns QApplicationPermission::Authorized by default. Currently, only Android
has an implemtation for this API. has an implemtation for this API.
\since 6.2 \since 6.2
\sa requestPermission() \sa requestPermission()
*/ */
QFuture<QPermission::PermissionResult> QFuture<QApplicationPermission::PermissionResult>
QCoreApplication::checkPermission(QPermission::PermissionType permission) QCoreApplication::checkPermission(QApplicationPermission::PermissionType permission)
{ {
return QCoreApplicationPrivate::checkPermission(permission); return QCoreApplicationPrivate::checkPermission(permission);
} }
@ -3233,13 +3233,13 @@ QCoreApplication::checkPermission(QPermission::PermissionType permission)
\snippet permissions/permissions.cpp Check camera permission sync on Android \snippet permissions/permissions.cpp Check camera permission sync on Android
\note Any platform that doesn't have an implementation for this API, \note Any platform that doesn't have an implementation for this API,
returns QPermission::Authorized by default. Currently, only Android returns QApplicationPermission::Authorized by default. Currently, only Android
has an implemtation for this API. has an implemtation for this API.
\since 6.2 \since 6.2
\sa requestPermission() \sa requestPermission()
*/ */
QFuture<QPermission::PermissionResult> QFuture<QApplicationPermission::PermissionResult>
QCoreApplication::checkPermission(const QString &permission) QCoreApplication::checkPermission(const QString &permission)
{ {
return QCoreApplicationPrivate::checkPermission(permission); return QCoreApplicationPrivate::checkPermission(permission);

View File

@ -47,7 +47,7 @@
#include <QtCore/qeventloop.h> #include <QtCore/qeventloop.h>
#if QT_CONFIG(future) #if QT_CONFIG(future)
#include <QtCore/qfuture.h> #include <QtCore/qfuture.h>
#include <QtCore/qpermission.h> #include <QtCore/qapplicationpermission.h>
#endif #endif
#include <QtCore/qobject.h> #include <QtCore/qobject.h>
#else #else
@ -168,13 +168,15 @@ public:
#ifndef QT_NO_QOBJECT #ifndef QT_NO_QOBJECT
#if QT_CONFIG(future) #if QT_CONFIG(future)
static QFuture<QPermission::PermissionResult> requestPermission( static QFuture<QApplicationPermission::PermissionResult>
QPermission::PermissionType permission); requestPermission(QApplicationPermission::PermissionType permission);
static QFuture<QPermission::PermissionResult> requestPermission(const QString &permission); static QFuture<QApplicationPermission::PermissionResult>
requestPermission(const QString &permission);
static QFuture<QPermission::PermissionResult> checkPermission( static QFuture<QApplicationPermission::PermissionResult>
QPermission::PermissionType permission); checkPermission(QApplicationPermission::PermissionType permission);
static QFuture<QPermission::PermissionResult> checkPermission(const QString &permission); static QFuture<QApplicationPermission::PermissionResult>
checkPermission(const QString &permission);
#endif #endif
void installNativeEventFilter(QAbstractNativeEventFilter *filterObj); void installNativeEventFilter(QAbstractNativeEventFilter *filterObj);
void removeNativeEventFilter(QAbstractNativeEventFilter *filterObj); void removeNativeEventFilter(QAbstractNativeEventFilter *filterObj);

View File

@ -59,13 +59,13 @@ static const char invalidNativePermissionExcept[] =
"Coudn't convert the provided permission type to a native Android permission string."; "Coudn't convert the provided permission type to a native Android permission string.";
#endif #endif
QPermission::PermissionResult resultFromAndroid(jint value) QApplicationPermission::PermissionResult resultFromAndroid(jint value)
{ {
return value == 0 ? QPermission::Authorized : QPermission::Denied; return value == 0 ? QApplicationPermission::Authorized : QApplicationPermission::Denied;
} }
using PendingPermissionRequestsHash using PendingPermissionRequestsHash
= QHash<int, QSharedPointer<QPromise<QPermission::PermissionResult>>>; = QHash<int, QSharedPointer<QPromise<QApplicationPermission::PermissionResult>>>;
Q_GLOBAL_STATIC(PendingPermissionRequestsHash, g_pendingPermissionRequests); Q_GLOBAL_STATIC(PendingPermissionRequestsHash, g_pendingPermissionRequests);
static QBasicMutex g_pendingPermissionRequestsMutex; static QBasicMutex g_pendingPermissionRequestsMutex;
@ -75,7 +75,7 @@ static int nextRequestCode()
return counter.fetchAndAddRelaxed(1); return counter.fetchAndAddRelaxed(1);
} }
static QStringList nativeStringsFromPermission(QPermission::PermissionType permission) static QStringList nativeStringsFromPermission(QApplicationPermission::PermissionType permission)
{ {
static const auto precisePerm = QStringLiteral("android.permission.ACCESS_FINE_LOCATION"); static const auto precisePerm = QStringLiteral("android.permission.ACCESS_FINE_LOCATION");
static const auto coarsePerm = QStringLiteral("android.permission.ACCESS_COARSE_LOCATION"); static const auto coarsePerm = QStringLiteral("android.permission.ACCESS_COARSE_LOCATION");
@ -83,39 +83,39 @@ static QStringList nativeStringsFromPermission(QPermission::PermissionType permi
QStringLiteral("android.permission.ACCESS_BACKGROUND_LOCATION"); QStringLiteral("android.permission.ACCESS_BACKGROUND_LOCATION");
switch (permission) { switch (permission) {
case QPermission::CoarseLocation: case QApplicationPermission::CoarseLocation:
return {coarsePerm}; return {coarsePerm};
case QPermission::PreciseLocation: case QApplicationPermission::PreciseLocation:
return {precisePerm}; return {precisePerm};
case QPermission::CoarseBackgroundLocation: case QApplicationPermission::CoarseBackgroundLocation:
// Keep the background permission first to be able to use .first() // Keep the background permission first to be able to use .first()
// in checkPermission because it takes single permission // in checkPermission because it takes single permission
if (QtAndroidPrivate::androidSdkVersion() >= 29) if (QtAndroidPrivate::androidSdkVersion() >= 29)
return {backgroundPerm, coarsePerm}; return {backgroundPerm, coarsePerm};
return {coarsePerm}; return {coarsePerm};
case QPermission::PreciseBackgroundLocation: case QApplicationPermission::PreciseBackgroundLocation:
if (QtAndroidPrivate::androidSdkVersion() >= 29) if (QtAndroidPrivate::androidSdkVersion() >= 29)
return {backgroundPerm, precisePerm}; return {backgroundPerm, precisePerm};
return {precisePerm}; return {precisePerm};
case QPermission::Camera: case QApplicationPermission::Camera:
return {QStringLiteral("android.permission.CAMERA")}; return {QStringLiteral("android.permission.CAMERA")};
case QPermission::Microphone: case QApplicationPermission::Microphone:
return {QStringLiteral("android.permission.RECORD_AUDIO")}; return {QStringLiteral("android.permission.RECORD_AUDIO")};
case QPermission::BodySensors: case QApplicationPermission::BodySensors:
return {QStringLiteral("android.permission.BODY_SENSORS")}; return {QStringLiteral("android.permission.BODY_SENSORS")};
case QPermission::PhysicalActivity: case QApplicationPermission::PhysicalActivity:
return {QStringLiteral("android.permission.ACTIVITY_RECOGNITION")}; return {QStringLiteral("android.permission.ACTIVITY_RECOGNITION")};
case QPermission::ReadContacts: case QApplicationPermission::ReadContacts:
return {QStringLiteral("android.permission.READ_CONTACTS")}; return {QStringLiteral("android.permission.READ_CONTACTS")};
case QPermission::WriteContacts: case QApplicationPermission::WriteContacts:
return {QStringLiteral("android.permission.WRITE_CONTACTS")}; return {QStringLiteral("android.permission.WRITE_CONTACTS")};
case QPermission::ReadStorage: case QApplicationPermission::ReadStorage:
return {QStringLiteral("android.permission.READ_EXTERNAL_STORAGE")}; return {QStringLiteral("android.permission.READ_EXTERNAL_STORAGE")};
case QPermission::WriteStorage: case QApplicationPermission::WriteStorage:
return {QStringLiteral("android.permission.WRITE_EXTERNAL_STORAGE")}; return {QStringLiteral("android.permission.WRITE_EXTERNAL_STORAGE")};
case QPermission::ReadCalendar: case QApplicationPermission::ReadCalendar:
return {QStringLiteral("android.permission.READ_CALENDAR")}; return {QStringLiteral("android.permission.READ_CALENDAR")};
case QPermission::WriteCalendar: case QApplicationPermission::WriteCalendar:
return {QStringLiteral("android.permission.WRITE_CALENDAR")}; return {QStringLiteral("android.permission.WRITE_CALENDAR")};
default: default:
@ -151,18 +151,18 @@ static void sendRequestPermissionsResult(JNIEnv *env, jobject *obj, jint request
env->GetIntArrayRegion(grantResults, 0, size, results.get()); env->GetIntArrayRegion(grantResults, 0, size, results.get());
for (int i = 0 ; i < size; ++i) { for (int i = 0 ; i < size; ++i) {
QPermission::PermissionResult result = resultFromAndroid(results[i]); QApplicationPermission::PermissionResult result = resultFromAndroid(results[i]);
request->addResult(result, i); request->addResult(result, i);
} }
request->finish(); request->finish();
} }
QFuture<QPermission::PermissionResult> requestPermissionsInternal(const QStringList &permissions) QFuture<QApplicationPermission::PermissionResult> requestPermissionsInternal(const QStringList &permissions)
{ {
QSharedPointer<QPromise<QPermission::PermissionResult>> promise; QSharedPointer<QPromise<QApplicationPermission::PermissionResult>> promise;
promise.reset(new QPromise<QPermission::PermissionResult>()); promise.reset(new QPromise<QApplicationPermission::PermissionResult>());
QFuture<QPermission::PermissionResult> future = promise->future(); QFuture<QApplicationPermission::PermissionResult> future = promise->future();
promise->start(); promise->start();
// No mechanism to request permission for SDK version below 23, because // No mechanism to request permission for SDK version below 23, because
@ -197,70 +197,70 @@ QFuture<QPermission::PermissionResult> requestPermissionsInternal(const QStringL
return future; return future;
} }
QFuture<QPermission::PermissionResult> QFuture<QApplicationPermission::PermissionResult>
QCoreApplicationPrivate::requestPermission(const QString &permission) QCoreApplicationPrivate::requestPermission(const QString &permission)
{ {
// avoid the uneccessary call and response to an empty permission string // avoid the uneccessary call and response to an empty permission string
if (permission.size() > 0) if (permission.size() > 0)
return requestPermissionsInternal({permission}); return requestPermissionsInternal({permission});
QPromise<QPermission::PermissionResult> promise; QPromise<QApplicationPermission::PermissionResult> promise;
QFuture<QPermission::PermissionResult> future = promise.future(); QFuture<QApplicationPermission::PermissionResult> future = promise.future();
promise.start(); promise.start();
#ifndef QT_NO_EXCEPTIONS #ifndef QT_NO_EXCEPTIONS
promise.setException(std::make_exception_ptr(std::runtime_error(emptyPermissionExcept))); promise.setException(std::make_exception_ptr(std::runtime_error(emptyPermissionExcept)));
#else #else
promise.addResult(QPermission::Denied); promise.addResult(QApplicationPermission::Denied);
#endif #endif
promise.finish(); promise.finish();
return future; return future;
} }
QFuture<QPermission::PermissionResult> groupRequestToSingleResult(const QStringList &permissions) QFuture<QApplicationPermission::PermissionResult> groupRequestToSingleResult(const QStringList &permissions)
{ {
QSharedPointer<QPromise<QPermission::PermissionResult>> promise; QSharedPointer<QPromise<QApplicationPermission::PermissionResult>> promise;
promise.reset(new QPromise<QPermission::PermissionResult>()); promise.reset(new QPromise<QApplicationPermission::PermissionResult>());
QFuture<QPermission::PermissionResult> future = promise->future(); QFuture<QApplicationPermission::PermissionResult> future = promise->future();
promise->start(); promise->start();
requestPermissionsInternal(permissions).then( requestPermissionsInternal(permissions).then(
[promise](QFuture<QPermission::PermissionResult> future) { [promise](QFuture<QApplicationPermission::PermissionResult> future) {
auto results = future.results(); auto results = future.results();
if (results.count(QPermission::Authorized) == results.count()) if (results.count(QApplicationPermission::Authorized) == results.count())
promise->addResult(QPermission::Authorized, 0); promise->addResult(QApplicationPermission::Authorized, 0);
else else
promise->addResult(QPermission::Denied, 0); promise->addResult(QApplicationPermission::Denied, 0);
promise->finish(); promise->finish();
}); });
return future; return future;
} }
QFuture<QPermission::PermissionResult> QFuture<QApplicationPermission::PermissionResult>
QCoreApplicationPrivate::requestPermission(QPermission::PermissionType permission) QCoreApplicationPrivate::requestPermission(QApplicationPermission::PermissionType permission)
{ {
const auto nativePermissions = nativeStringsFromPermission(permission); const auto nativePermissions = nativeStringsFromPermission(permission);
if (nativePermissions.size() > 0) if (nativePermissions.size() > 0)
return groupRequestToSingleResult(nativePermissions); return groupRequestToSingleResult(nativePermissions);
QPromise<QPermission::PermissionResult> promise; QPromise<QApplicationPermission::PermissionResult> promise;
QFuture<QPermission::PermissionResult> future = promise.future(); QFuture<QApplicationPermission::PermissionResult> future = promise.future();
promise.start(); promise.start();
#ifndef QT_NO_EXCEPTIONS #ifndef QT_NO_EXCEPTIONS
promise.setException(std::make_exception_ptr( promise.setException(std::make_exception_ptr(
std::runtime_error(invalidNativePermissionExcept))); std::runtime_error(invalidNativePermissionExcept)));
#else #else
promise.addResult(QPermission::Denied); promise.addResult(QApplicationPermission::Denied);
#endif #endif
promise.finish(); promise.finish();
return future; return future;
} }
QFuture<QPermission::PermissionResult> QFuture<QApplicationPermission::PermissionResult>
QCoreApplicationPrivate::checkPermission(const QString &permission) QCoreApplicationPrivate::checkPermission(const QString &permission)
{ {
QPromise<QPermission::PermissionResult> promise; QPromise<QApplicationPermission::PermissionResult> promise;
QFuture<QPermission::PermissionResult> future = promise.future(); QFuture<QApplicationPermission::PermissionResult> future = promise.future();
promise.start(); promise.start();
if (permission.size() > 0) { if (permission.size() > 0) {
@ -273,7 +273,7 @@ QCoreApplicationPrivate::checkPermission(const QString &permission)
#ifndef QT_NO_EXCEPTIONS #ifndef QT_NO_EXCEPTIONS
promise.setException(std::make_exception_ptr(std::runtime_error(emptyPermissionExcept))); promise.setException(std::make_exception_ptr(std::runtime_error(emptyPermissionExcept)));
#else #else
promise.addResult(QPermission::Denied); promise.addResult(QApplicationPermission::Denied);
#endif #endif
} }
@ -281,22 +281,22 @@ QCoreApplicationPrivate::checkPermission(const QString &permission)
return future; return future;
} }
QFuture<QPermission::PermissionResult> QFuture<QApplicationPermission::PermissionResult>
QCoreApplicationPrivate::checkPermission(QPermission::PermissionType permission) QCoreApplicationPrivate::checkPermission(QApplicationPermission::PermissionType permission)
{ {
const auto nativePermissions = nativeStringsFromPermission(permission); const auto nativePermissions = nativeStringsFromPermission(permission);
if (nativePermissions.size() > 0) if (nativePermissions.size() > 0)
return checkPermission(nativePermissions.first()); return checkPermission(nativePermissions.first());
QPromise<QPermission::PermissionResult> promise; QPromise<QApplicationPermission::PermissionResult> promise;
QFuture<QPermission::PermissionResult> future = promise.future(); QFuture<QApplicationPermission::PermissionResult> future = promise.future();
promise.start(); promise.start();
#ifndef QT_NO_EXCEPTIONS #ifndef QT_NO_EXCEPTIONS
promise.setException(std::make_exception_ptr( promise.setException(std::make_exception_ptr(
std::runtime_error(invalidNativePermissionExcept))); std::runtime_error(invalidNativePermissionExcept)));
#else #else
promise.addResult(QPermission::Denied); promise.addResult(QApplicationPermission::Denied);
#endif #endif
promise.finish(); promise.finish();
return future; return future;

View File

@ -63,7 +63,7 @@
#include "private/qobject_p.h" #include "private/qobject_p.h"
#include "private/qlocking_p.h" #include "private/qlocking_p.h"
#if QT_CONFIG(future) #if QT_CONFIG(future)
#include <QtCore/qpermission.h> #include <QtCore/qapplicationpermission.h>
#include <QtCore/qfuture.h> #include <QtCore/qfuture.h>
#endif #endif
#endif #endif
@ -204,13 +204,15 @@ public:
QString qmljs_debug_arguments; // a string containing arguments for js/qml debugging. QString qmljs_debug_arguments; // a string containing arguments for js/qml debugging.
inline QString qmljsDebugArgumentsString() const { return qmljs_debug_arguments; } inline QString qmljsDebugArgumentsString() const { return qmljs_debug_arguments; }
#if QT_CONFIG(future) && !defined QT_NO_QOBJECT #if QT_CONFIG(future) && !defined QT_NO_QOBJECT
static QFuture<QPermission::PermissionResult> requestPermission( static QFuture<QApplicationPermission::PermissionResult>
QPermission::PermissionType permission); requestPermission(QApplicationPermission::PermissionType permission);
static QFuture<QPermission::PermissionResult> requestPermission(const QString &permission); static QFuture<QApplicationPermission::PermissionResult>
requestPermission(const QString &permission);
static QFuture<QPermission::PermissionResult> checkPermission( static QFuture<QApplicationPermission::PermissionResult>
QPermission::PermissionType permission); checkPermission(QApplicationPermission::PermissionType permission);
static QFuture<QPermission::PermissionResult> checkPermission(const QString &permission); static QFuture<QApplicationPermission::PermissionResult>
checkPermission(const QString &permission);
#endif #endif
#ifdef QT_NO_QOBJECT #ifdef QT_NO_QOBJECT