summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristian Strømme <christian.stromme@qt.io>2016-12-12 18:27:33 +0100
committerChristian Stromme <christian.stromme@qt.io>2017-03-22 13:20:12 +0000
commit4da8ca2397f0b5ca87c1915fc29e185d57e9020c (patch)
tree8ba9945848447bf65465245468ba82af7fbb4fb6
parent70365a798c95db8ccf2c52def3f2d0da6199a8cf (diff)
Android: Add convenience method for checking and requesting permissions
This will be used to check and request permissions at run-time. Task-number: QTBUG-55992 Change-Id: I344859aeb05fecf09ac46064e9452787d615a8a1 Reviewed-by: Yoann Lopes <yoann.lopes@qt.io>
-rw-r--r--src/plugins/android/src/common/qandroidmultimediautils.cpp29
-rw-r--r--src/plugins/android/src/common/qandroidmultimediautils.h2
2 files changed, 31 insertions, 0 deletions
diff --git a/src/plugins/android/src/common/qandroidmultimediautils.cpp b/src/plugins/android/src/common/qandroidmultimediautils.cpp
index c7a16dcf0..a4a7f773d 100644
--- a/src/plugins/android/src/common/qandroidmultimediautils.cpp
+++ b/src/plugins/android/src/common/qandroidmultimediautils.cpp
@@ -38,8 +38,11 @@
****************************************************************************/
#include "qandroidmultimediautils.h"
+#include "qandroidglobal.h"
#include <qlist.h>
+#include <QtCore/private/qjni_p.h>
+#include <QtCore/private/qjnihelpers_p.h>
QT_BEGIN_NAMESPACE
@@ -110,4 +113,30 @@ AndroidCamera::ImageFormat qt_androidImageFormatFromPixelFormat(QVideoFrame::Pix
}
}
+bool qt_androidRequestPermission(const QString &key)
+{
+ using namespace QtAndroidPrivate;
+
+ if (androidSdkVersion() < 23)
+ return true;
+
+ PermissionsResult res = checkPermission(key);
+ if (res == PermissionsResult::Granted) // Permission already granted?
+ return true;
+
+ QJNIEnvironmentPrivate env;
+ const auto &results = requestPermissionsSync(env, QStringList() << key);
+ if (!results.contains(key)) {
+ qCWarning(qtAndroidMediaPlugin, "No permission found for key: %s", qPrintable(key));
+ return false;
+ }
+
+ if (results[key] == PermissionsResult::Denied) {
+ qCDebug(qtAndroidMediaPlugin, "%s - Permission denied by user!", qPrintable(key));
+ return false;
+ }
+
+ return true;
+}
+
QT_END_NAMESPACE
diff --git a/src/plugins/android/src/common/qandroidmultimediautils.h b/src/plugins/android/src/common/qandroidmultimediautils.h
index 0e811ecb8..0a837ae3c 100644
--- a/src/plugins/android/src/common/qandroidmultimediautils.h
+++ b/src/plugins/android/src/common/qandroidmultimediautils.h
@@ -55,6 +55,8 @@ bool qt_sizeLessThan(const QSize &s1, const QSize &s2);
QVideoFrame::PixelFormat qt_pixelFormatFromAndroidImageFormat(AndroidCamera::ImageFormat f);
AndroidCamera::ImageFormat qt_androidImageFormatFromPixelFormat(QVideoFrame::PixelFormat f);
+bool qt_androidRequestPermission(const QString &key);
+
QT_END_NAMESPACE
#endif // QANDROIDMULTIMEDIAUTILS_H