diff options
author | BogDan Vatra <bogdan@kdab.com> | 2017-07-26 11:21:39 +0300 |
---|---|---|
committer | BogDan Vatra <bogdan@kdab.com> | 2017-07-26 08:49:47 +0000 |
commit | c7a883087c0bd3b4986fa8d2baba680ea5e1bb48 (patch) | |
tree | 5bec4c48f39eadcbb6ea948b1968cdcb5a2259c6 /src | |
parent | 7c38ca387cf3e9aa6d7f47a00b296247da102147 (diff) |
Add public API for Android new Permission Model
Task-number: QTBUG-50759
Change-Id: Ie7fef30049e6be28c3fba2eb5b54b56552df8c9d
Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io>
Diffstat (limited to 'src')
-rw-r--r-- | src/androidextras/android/qandroidfunctions.cpp | 77 | ||||
-rw-r--r-- | src/androidextras/android/qandroidfunctions.h | 11 |
2 files changed, 88 insertions, 0 deletions
diff --git a/src/androidextras/android/qandroidfunctions.cpp b/src/androidextras/android/qandroidfunctions.cpp index f22ed9b..dc790b1 100644 --- a/src/androidextras/android/qandroidfunctions.cpp +++ b/src/androidextras/android/qandroidfunctions.cpp @@ -321,4 +321,81 @@ bool QtAndroid::bindService(const QAndroidIntent &serviceIntent, serviceIntent.handle().object(), serviceConnection.handle().object(), jint(flags)); } +static QtAndroid::PermissionResultMap privateToPublicPermissionsHash(const QtAndroidPrivate::PermissionsHash &privateHash) +{ + QtAndroid::PermissionResultMap hash; + for (auto it = privateHash.constBegin(); it != privateHash.constEnd(); ++it) + hash[it.key()] = QtAndroid::PermissionResult(it.value()); + return hash; +} + +/*! + \since 5.10 + \enum QtAndroid::PermissionResult + + This enum is used to describe the permission status. + + \value Granted The permission was granted. + \value Denied The permission was denied. +*/ + +/*! + \typedef QtAndroid::PermissionResultMap + + Synonym for QHash<QString, PermissionResult>. +*/ + +/*! + \typedef QtAndroid::PermissionResultCallback + + Synonym for std::function<void(const PermissionResultMap &)>. +*/ + +/*! + \since 5.10 + \fn void QtAndroid::requestPermissions(const QStringList &permissions, const PermissionResultCallback &callbackFunc) + + Asynchronously requests \a permissions to be granted to this application, \a callbackFunc will be called with the results. +*/ +void QtAndroid::requestPermissions(const QStringList &permissions, const QtAndroid::PermissionResultCallback &callbackFunc) +{ + QtAndroidPrivate::requestPermissions(QJNIEnvironmentPrivate(), permissions, + [callbackFunc](const QtAndroidPrivate::PermissionsHash &privatePerms){ + callbackFunc(privateToPublicPermissionsHash(privatePerms)); + }, false); +} + +/*! + \since 5.10 + \fn QtAndroid::PermissionResultMap QtAndroid::requestPermissionsSync(const QStringList &permissions, int timeoutMs) + + Synchronously requests \a permissions to be granted to this application, waits \a timeoutMs to complete. + */ +QtAndroid::PermissionResultMap QtAndroid::requestPermissionsSync(const QStringList &permissions, int timeoutMs) +{ + return privateToPublicPermissionsHash(QtAndroidPrivate::requestPermissionsSync(QJNIEnvironmentPrivate(), permissions, timeoutMs)); +} + +/*! + \since 5.10 + \fn QtAndroid::PermissionResult QtAndroid::checkPermission(const QString &permission) + + Checks if the \a permission was granted or not. This function should be called every time when + the application starts for needed permissions, as the users might disable them from Android Settings. + */ +QtAndroid::PermissionResult QtAndroid::checkPermission(const QString &permission) +{ + return QtAndroid::PermissionResult(QtAndroidPrivate::checkPermission(permission)); +} + +/*! + \since 5.10 + \fn bool QtAndroid::shouldShowRequestPermissionRationale(const QString &permission) + + Returns \c true if you should show UI with a rationale for requesting a \a permission. +*/ +bool QtAndroid::shouldShowRequestPermissionRationale(const QString &permission) +{ + return QtAndroidPrivate::shouldShowRequestPermissionRationale(permission); +} QT_END_NAMESPACE diff --git a/src/androidextras/android/qandroidfunctions.h b/src/androidextras/android/qandroidfunctions.h index c5023f4..8dba435 100644 --- a/src/androidextras/android/qandroidfunctions.h +++ b/src/androidextras/android/qandroidfunctions.h @@ -94,6 +94,17 @@ namespace QtAndroid Q_ANDROIDEXTRAS_EXPORT void hideSplashScreen(); // ### Qt6: merge with next overload Q_ANDROIDEXTRAS_EXPORT void hideSplashScreen(int duration); + + enum class PermissionResult { + Granted, + Denied + }; + typedef QHash<QString, PermissionResult> PermissionResultMap; + typedef std::function<void(const PermissionResultMap &)> PermissionResultCallback; + Q_ANDROIDEXTRAS_EXPORT void requestPermissions(const QStringList &permissions, const PermissionResultCallback &callbackFunc); + Q_ANDROIDEXTRAS_EXPORT PermissionResultMap requestPermissionsSync(const QStringList &permissions, int timeoutMs = INT_MAX); + Q_ANDROIDEXTRAS_EXPORT PermissionResult checkPermission(const QString &permission); + Q_ANDROIDEXTRAS_EXPORT bool shouldShowRequestPermissionRationale(const QString &permission); } QT_END_NAMESPACE |