diff options
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(); |