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);
auto permission = QPermission::WriteStorage;
if (QCoreApplication::requestPermission(permission).result() != QPermission::Authorized) {
auto permission = QApplicationPermission::WriteStorage;
if (QCoreApplication::requestPermission(permission).result()
!= QApplicationPermission::Authorized) {
qWarning() << "Couldn't get 'WriteStorage' permission!";
return -1;
}

View File

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

View File

@ -58,8 +58,8 @@ void requestCameraPermissionAndroid()
{
//! [Request camera permission on Android]
QCoreApplication::requestPermission(QStringLiteral("android.permission.CAMERA"))
.then([=](QPermission::PermissionResult result) {
if (result == QPermission::Authorized)
.then([=](QApplicationPermission::PermissionResult result) {
if (result == QApplicationPermission::Authorized)
takeSelfie();
});
//! [Request camera permission on Android]
@ -68,9 +68,9 @@ void requestCameraPermissionAndroid()
void requestCameraPermission()
{
//! [Request camera permission]
QCoreApplication::requestPermission(QPermission::Camera)
.then([=](QPermission::PermissionResult result) {
if (result == QPermission::Authorized)
QCoreApplication::requestPermission(QApplicationPermission::Camera)
.then([=](QApplicationPermission::PermissionResult result) {
if (result == QApplicationPermission::Authorized)
takeSelfie();
});
//! [Request camera permission]
@ -81,7 +81,7 @@ 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 == QPermission::Authorized)
if (result == QApplicationPermission::Authorized)
takeSelfie();
//! [Request camera permission sync on Android]
}
@ -89,9 +89,9 @@ void requestCameraPermissionSyncAndroid()
void requestCameraPermissionSync()
{
//! [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
if (result == QPermission::Authorized)
if (result == QApplicationPermission::Authorized)
takeSelfie();
//! [Request camera permission sync]
}
@ -100,8 +100,8 @@ void checkCameraPermissionAndroid()
{
//! [Check camera permission on Android]
QCoreApplication::checkPermission(QStringLiteral("android.permission.CAMERA"))
.then([=](QPermission::PermissionResult result) {
if (result == QPermission::Authorized)
.then([=](QApplicationPermission::PermissionResult result) {
if (result == QApplicationPermission::Authorized)
takeSelfie();
});
//! [Check camera permission on Android]
@ -110,9 +110,9 @@ void checkCameraPermissionAndroid()
void checkCameraPermission()
{
//! [Check camera permission]
QCoreApplication::checkPermission(QPermission::Camera)
.then([=](QPermission::PermissionResult result) {
if (result == QPermission::Authorized)
QCoreApplication::checkPermission(QApplicationPermission::Camera)
.then([=](QApplicationPermission::PermissionResult result) {
if (result == QApplicationPermission::Authorized)
takeSelfie();
});
//! [Check camera permission]
@ -124,7 +124,7 @@ void checkCameraPermissionAndroidSync()
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 == QPermission::Authorized)
if (result == QApplicationPermission::Authorized)
takeSelfie();
//! [Check camera permission sync on Android]
}
@ -132,10 +132,10 @@ void checkCameraPermissionAndroidSync()
void checkCameraPermissionSync()
{
//! [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
auto result = future.result();
if (result == QPermission::Authorized)
if (result == QApplicationPermission::Authorized)
takeSelfie();
//! [Check camera permission sync]
}

View File

@ -37,14 +37,14 @@
**
****************************************************************************/
#ifndef QPERMISSION_H
#define QPERMISSION_H
#ifndef QAPPLICATIONPERMISSION_H
#define QAPPLICATIONPERMISSION_H
#include <QtCore/qglobal.h>
QT_BEGIN_NAMESPACE
namespace QPermission
namespace QApplicationPermission
{
enum PermissionType {
@ -71,8 +71,11 @@ enum PermissionResult {
Restricted,
Undetermined
};
} // QPermission
} // QApplicationPermission
// TODO: remove after usages in other modules are renamed.
namespace QPermission = QApplicationPermission;
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
\l {QCoreApplication::checkPermission()}.
*/
/*!
\enum QPermission::PermissionType
\enum QApplicationPermission::PermissionType
Predefined sets of permission values.
@ -87,7 +88,7 @@
*/
/*!
\enum QPermission::PermissionResult
\enum QApplicationPermission::PermissionResult
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 !defined(Q_OS_ANDROID)
QFuture<QPermission::PermissionResult> defaultPermissionFuture()
QFuture<QApplicationPermission::PermissionResult> defaultPermissionFuture()
{
QPromise<QPermission::PermissionResult> promise;
QFuture<QPermission::PermissionResult> future = promise.future();
QPromise<QApplicationPermission::PermissionResult> promise;
QFuture<QApplicationPermission::PermissionResult> 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(QPermission::Authorized);
promise.addResult(QApplicationPermission::Authorized);
promise.finish();
return future;
}
QFuture<QPermission::PermissionResult>
QCoreApplicationPrivate::requestPermission(QPermission::PermissionType permission)
QFuture<QApplicationPermission::PermissionResult>
QCoreApplicationPrivate::requestPermission(QApplicationPermission::PermissionType permission)
{
Q_UNUSED(permission)
return defaultPermissionFuture();
}
QFuture<QPermission::PermissionResult>
QFuture<QApplicationPermission::PermissionResult>
QCoreApplicationPrivate::requestPermission(const QString &permission)
{
Q_UNUSED(permission)
return defaultPermissionFuture();
}
QFuture<QPermission::PermissionResult>
QCoreApplicationPrivate::checkPermission(QPermission::PermissionType permission)
QFuture<QApplicationPermission::PermissionResult>
QCoreApplicationPrivate::checkPermission(QApplicationPermission::PermissionType permission)
{
Q_UNUSED(permission)
return defaultPermissionFuture();
}
QFuture<QPermission::PermissionResult>
QFuture<QApplicationPermission::PermissionResult>
QCoreApplicationPrivate::checkPermission(const QString &permission)
{
Q_UNUSED(permission)
@ -3148,14 +3148,14 @@ void QCoreApplication::setEventDispatcher(QAbstractEventDispatcher *eventDispatc
\snippet permissions/permissions.cpp Request camera permission sync
\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.
\since 6.2
\sa checkPermission()
*/
QFuture<QPermission::PermissionResult>
QCoreApplication::requestPermission(QPermission::PermissionType permission)
QFuture<QApplicationPermission::PermissionResult>
QCoreApplication::requestPermission(QApplicationPermission::PermissionType permission)
{
return QCoreApplicationPrivate::requestPermission(permission);
}
@ -3180,13 +3180,13 @@ QCoreApplication::requestPermission(QPermission::PermissionType permission)
\snippet permissions/permissions.cpp Request camera permission sync on Android
\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.
\since 6.2
\sa checkPermission()
*/
QFuture<QPermission::PermissionResult>
QFuture<QApplicationPermission::PermissionResult>
QCoreApplication::requestPermission(const QString &permission)
{
return QCoreApplicationPrivate::requestPermission(permission);
@ -3206,14 +3206,14 @@ QCoreApplication::requestPermission(const QString &permission)
\snippet permissions/permissions.cpp Check camera permission sync
\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.
\since 6.2
\sa requestPermission()
*/
QFuture<QPermission::PermissionResult>
QCoreApplication::checkPermission(QPermission::PermissionType permission)
QFuture<QApplicationPermission::PermissionResult>
QCoreApplication::checkPermission(QApplicationPermission::PermissionType permission)
{
return QCoreApplicationPrivate::checkPermission(permission);
}
@ -3233,13 +3233,13 @@ QCoreApplication::checkPermission(QPermission::PermissionType permission)
\snippet permissions/permissions.cpp Check camera permission sync on Android
\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.
\since 6.2
\sa requestPermission()
*/
QFuture<QPermission::PermissionResult>
QFuture<QApplicationPermission::PermissionResult>
QCoreApplication::checkPermission(const QString &permission)
{
return QCoreApplicationPrivate::checkPermission(permission);

View File

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

View File

@ -63,7 +63,7 @@
#include "private/qobject_p.h"
#include "private/qlocking_p.h"
#if QT_CONFIG(future)
#include <QtCore/qpermission.h>
#include <QtCore/qapplicationpermission.h>
#include <QtCore/qfuture.h>
#endif
#endif
@ -204,13 +204,15 @@ public:
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<QPermission::PermissionResult> requestPermission(
QPermission::PermissionType permission);
static QFuture<QPermission::PermissionResult> requestPermission(const QString &permission);
static QFuture<QApplicationPermission::PermissionResult>
requestPermission(QApplicationPermission::PermissionType permission);
static QFuture<QApplicationPermission::PermissionResult>
requestPermission(const QString &permission);
static QFuture<QPermission::PermissionResult> checkPermission(
QPermission::PermissionType permission);
static QFuture<QPermission::PermissionResult> checkPermission(const QString &permission);
static QFuture<QApplicationPermission::PermissionResult>
checkPermission(QApplicationPermission::PermissionType permission);
static QFuture<QApplicationPermission::PermissionResult>
checkPermission(const QString &permission);
#endif
#ifdef QT_NO_QOBJECT