summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/multimedia/android/qandroidaudiosource.cpp22
-rw-r--r--src/multimedia/android/qopenslesengine.cpp17
-rw-r--r--src/plugins/multimedia/android/common/qandroidmultimediautils.cpp41
-rw-r--r--src/plugins/multimedia/android/common/qandroidmultimediautils_p.h2
-rw-r--r--src/plugins/multimedia/android/mediacapture/qandroidcapturesession.cpp4
-rw-r--r--src/plugins/multimedia/android/wrappers/jni/androidcamera.cpp4
-rw-r--r--src/plugins/multimedia/ffmpeg/qandroidcamera.cpp19
7 files changed, 38 insertions, 71 deletions
diff --git a/src/multimedia/android/qandroidaudiosource.cpp b/src/multimedia/android/qandroidaudiosource.cpp
index 5e1ba549d..ca374cd72 100644
--- a/src/multimedia/android/qandroidaudiosource.cpp
+++ b/src/multimedia/android/qandroidaudiosource.cpp
@@ -5,15 +5,18 @@
#include "qopenslesengine_p.h"
#include <private/qaudiohelpers_p.h>
-#include <QtCore/private/qandroidextras_p.h>
#include <qbuffer.h>
#include <qdebug.h>
+#include <qloggingcategory.h>
#ifdef ANDROID
#include <SLES/OpenSLES_AndroidConfiguration.h>
#include <QtCore/qcoreapplication.h>
+#include <QtCore/qpermissions.h>
#endif
+static Q_LOGGING_CATEGORY(qLcAndroidAudioSource, "qt.multimedia.android.audiosource")
+
QT_BEGIN_NAMESPACE
#define NUM_BUFFERS 2
@@ -23,20 +26,13 @@ QT_BEGIN_NAMESPACE
#ifdef ANDROID
static bool hasRecordingPermission()
{
- if (QNativeInterface::QAndroidApplication::sdkVersion() < 23)
- return true;
+ QMicrophonePermission permission;
- const auto key = QStringLiteral("android.permission.RECORD_AUDIO");
- // Permission already granted?
- if (QtAndroidPrivate::checkPermission(key).result() == QtAndroidPrivate::Authorized)
- return true;
+ const bool permitted = qApp->checkPermission(permission) == Qt::PermissionStatus::Granted;
+ if (!permitted)
+ qCWarning(qLcAndroidAudioSource, "Missing microphone permission!");
- if (QtAndroidPrivate::requestPermission(key).result() != QtAndroidPrivate::Authorized) {
- qDebug("Microphone permission denied by user!");
- return false;
- }
-
- return true;
+ return permitted;
}
static void bufferQueueCallback(SLAndroidSimpleBufferQueueItf, void *context)
diff --git a/src/multimedia/android/qopenslesengine.cpp b/src/multimedia/android/qopenslesengine.cpp
index 01a6828ba..bc2f653be 100644
--- a/src/multimedia/android/qopenslesengine.cpp
+++ b/src/multimedia/android/qopenslesengine.cpp
@@ -6,7 +6,9 @@
#include "qandroidaudiosource_p.h"
#include "qandroidaudiodevice_p.h"
+#include <QtCore/qcoreapplication.h>
#include <QtCore/qjniobject.h>
+#include <QtCore/qpermissions.h>
#include <QtCore/private/qandroidextras_p.h>
#include <qdebug.h>
@@ -121,14 +123,7 @@ bool QOpenSLESEngine::setAudioOutput(const QByteArray &deviceId)
static bool hasRecordPermission()
{
- const auto recordPerm = QtAndroidPrivate::checkPermission(QStringLiteral("android.permission.RECORD_AUDIO"));
- return recordPerm.result() == QtAndroidPrivate::Authorized;
-}
-
-static bool requestPermissions()
-{
- const auto recordPerm = QtAndroidPrivate::requestPermission(QStringLiteral("android.permission.RECORD_AUDIO"));
- return recordPerm.result() == QtAndroidPrivate::Authorized;
+ return qApp->checkPermission(QMicrophonePermission{}) == Qt::PermissionStatus::Granted;
}
QList<int> QOpenSLESEngine::supportedChannelCounts(QAudioDevice::Mode mode) const
@@ -353,11 +348,7 @@ bool QOpenSLESEngine::inputFormatIsSupported(SLAndroidDataFormat_PCM_EX format)
SLDataSink audioSnk = { &loc_bq, &format };
// only ask permission when it is about to create the audiorecorder
- bool hasRecordPermissions = hasRecordPermission();
- if (!hasRecordPermissions)
- hasRecordPermissions = requestPermissions();
-
- if (!hasRecordPermissions)
+ if (!hasRecordPermission())
return false;
result = (*m_engine)->CreateAudioRecorder(m_engine, &recorder, &audioSrc, &audioSnk, 0, 0, 0);
diff --git a/src/plugins/multimedia/android/common/qandroidmultimediautils.cpp b/src/plugins/multimedia/android/common/qandroidmultimediautils.cpp
index afb5f82e9..6e4b95fe9 100644
--- a/src/plugins/multimedia/android/common/qandroidmultimediautils.cpp
+++ b/src/plugins/multimedia/android/common/qandroidmultimediautils.cpp
@@ -6,6 +6,7 @@
#include <qlist.h>
#include <QtCore/qcoreapplication.h>
+#include <QtCore/qpermissions.h>
#include <QtCore/private/qandroidextras_p.h>
QT_BEGIN_NAMESPACE
@@ -88,43 +89,27 @@ static bool androidRequestPermission(const QString &permission)
return true;
}
-static bool androidCheckPermission(const QString &permission)
+static bool androidCheckPermission(const QPermission &permission)
{
- if (QNativeInterface::QAndroidApplication::sdkVersion() < 23)
- return true;
-
- // Permission already granted?
- return (QtAndroidPrivate::checkPermission(permission).result() == QtAndroidPrivate::Authorized);
+ return qApp->checkPermission(permission) == Qt::PermissionStatus::Granted;
}
bool qt_androidCheckCameraPermission()
{
- return androidCheckPermission(QStringLiteral("android.permission.CAMERA"));
+ const QCameraPermission permission;
+ const auto granted = androidCheckPermission(permission);
+ if (!granted)
+ qCDebug(qtAndroidMediaPlugin, "Camera permission not granted!");
+ return granted;
}
bool qt_androidCheckMicrophonePermission()
{
- return androidCheckPermission(QStringLiteral("android.permission.RECORD_AUDIO"));
-}
-
-bool qt_androidRequestCameraPermission()
-{
- if (!androidRequestPermission(QStringLiteral("android.permission.CAMERA"))) {
- qCDebug(qtAndroidMediaPlugin, "Camera permission denied by user!");
- return false;
- }
-
- return true;
-}
-
-bool qt_androidRequestRecordingPermission()
-{
- if (!androidRequestPermission(QStringLiteral("android.permission.RECORD_AUDIO"))) {
- qCDebug(qtAndroidMediaPlugin, "Microphone permission denied by user!");
- return false;
- }
-
- return true;
+ const QMicrophonePermission permission;
+ const auto granted = androidCheckPermission(permission);
+ if (!granted)
+ qCDebug(qtAndroidMediaPlugin, "Microphone permission not granted!");
+ return granted;
}
bool qt_androidRequestWriteStoragePermission()
diff --git a/src/plugins/multimedia/android/common/qandroidmultimediautils_p.h b/src/plugins/multimedia/android/common/qandroidmultimediautils_p.h
index 1b9aab8f5..5fe841e8c 100644
--- a/src/plugins/multimedia/android/common/qandroidmultimediautils_p.h
+++ b/src/plugins/multimedia/android/common/qandroidmultimediautils_p.h
@@ -30,8 +30,6 @@ bool qt_sizeLessThan(const QSize &s1, const QSize &s2);
QVideoFrameFormat::PixelFormat qt_pixelFormatFromAndroidImageFormat(AndroidCamera::ImageFormat f);
AndroidCamera::ImageFormat qt_androidImageFormatFromPixelFormat(QVideoFrameFormat::PixelFormat f);
-bool qt_androidRequestCameraPermission();
-bool qt_androidRequestRecordingPermission();
bool qt_androidRequestWriteStoragePermission();
bool qt_androidCheckCameraPermission();
diff --git a/src/plugins/multimedia/android/mediacapture/qandroidcapturesession.cpp b/src/plugins/multimedia/android/mediacapture/qandroidcapturesession.cpp
index afee45e2f..5819741e0 100644
--- a/src/plugins/multimedia/android/mediacapture/qandroidcapturesession.cpp
+++ b/src/plugins/multimedia/android/mediacapture/qandroidcapturesession.cpp
@@ -116,13 +116,13 @@ void QAndroidCaptureSession::start(QMediaEncoderSettings &settings, const QUrl &
const bool validCameraSession = m_cameraSession && m_cameraSession->camera();
- if (validCameraSession && !qt_androidRequestCameraPermission()) {
+ if (validCameraSession && !qt_androidCheckCameraPermission()) {
emit error(QMediaRecorder::ResourceError, QLatin1String("Camera permission denied."));
setKeepAlive(false);
return;
}
- if (m_audioInput && !qt_androidRequestRecordingPermission()) {
+ if (m_audioInput && !qt_androidCheckMicrophonePermission()) {
emit error(QMediaRecorder::ResourceError, QLatin1String("Microphone permission denied."));
setKeepAlive(false);
return;
diff --git a/src/plugins/multimedia/android/wrappers/jni/androidcamera.cpp b/src/plugins/multimedia/android/wrappers/jni/androidcamera.cpp
index f8845cfa1..df2b5c407 100644
--- a/src/plugins/multimedia/android/wrappers/jni/androidcamera.cpp
+++ b/src/plugins/multimedia/android/wrappers/jni/androidcamera.cpp
@@ -316,7 +316,7 @@ AndroidCamera::~AndroidCamera()
AndroidCamera *AndroidCamera::open(int cameraId)
{
- if (!qt_androidRequestCameraPermission())
+ if (!qt_androidCheckCameraPermission())
return nullptr;
AndroidCameraPrivate *d = new AndroidCameraPrivate();
@@ -765,7 +765,7 @@ QJniObject AndroidCamera::getCameraObject()
int AndroidCamera::getNumberOfCameras()
{
- if (!qt_androidRequestCameraPermission())
+ if (!qt_androidCheckCameraPermission())
return 0;
return QJniObject::callStaticMethod<jint>("android/hardware/Camera",
diff --git a/src/plugins/multimedia/ffmpeg/qandroidcamera.cpp b/src/plugins/multimedia/ffmpeg/qandroidcamera.cpp
index e66c685f4..eee50dbfe 100644
--- a/src/plugins/multimedia/ffmpeg/qandroidcamera.cpp
+++ b/src/plugins/multimedia/ffmpeg/qandroidcamera.cpp
@@ -11,6 +11,7 @@
#include <qloggingcategory.h>
#include <private/qabstractvideobuffer_p.h>
#include <QtCore/qcoreapplication.h>
+#include <QtCore/qpermissions.h>
#include <QtCore/private/qandroidextras_p.h>
#include <private/qmemoryvideobuffer_p.h>
#include <private/qcameradevice_p.h>
@@ -115,19 +116,15 @@ QCameraFormat getDefaultCameraFormat()
return defaultFormat->create();
}
-bool checkAndRequestCameraPermission()
+bool checkCameraPermission()
{
- const auto key = QStringLiteral("android.permission.CAMERA");
+ QCameraPermission permission;
- if (QtAndroidPrivate::checkPermission(key).result() == QtAndroidPrivate::Authorized)
- return true;
+ const bool granted = qApp->checkPermission(permission) == Qt::PermissionStatus::Granted;
+ if (!granted)
+ qCWarning(qLCAndroidCamera) << "Access to camera not granted!";
- if (QtAndroidPrivate::requestPermission(key).result() != QtAndroidPrivate::Authorized) {
- qCWarning(qLCAndroidCamera) << "User has denied access to camera";
- return false;
- }
-
- return true;
+ return granted;
}
} // namespace
@@ -243,7 +240,7 @@ void QAndroidCamera::setActive(bool active)
return;
}
- if (active && checkAndRequestCameraPermission()) {
+ if (active && checkCameraPermission()) {
QWriteLocker locker(rwLock);
int width = m_cameraFormat.resolution().width();
int height = m_cameraFormat.resolution().height();