aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorBogDan Vatra <bogdan@kdab.com>2017-07-26 11:21:39 +0300
committerBogDan Vatra <bogdan@kdab.com>2017-07-26 08:49:47 +0000
commitc7a883087c0bd3b4986fa8d2baba680ea5e1bb48 (patch)
tree5bec4c48f39eadcbb6ea948b1968cdcb5a2259c6 /src
parent7c38ca387cf3e9aa6d7f47a00b296247da102147 (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.cpp77
-rw-r--r--src/androidextras/android/qandroidfunctions.h11
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