summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTimur Pocheptsov <timur.pocheptsov@qt.io>2024-04-10 10:09:25 +0200
committerTimur Pocheptsov <timur.pocheptsov@qt.io>2024-04-12 10:22:22 +0200
commit1f2f6d571e0ca3607eedcea82949a13182d90a9b (patch)
tree7d4e044077419b6db64b664acfe0f53fa2b5a86d
parent98b755f1496f19927d46fcfbbcc5929b6041372b (diff)
declarative-camera: do not load camera UI if permission is denied
On iOS and macOS the system shows popup asking for permission only once, if permission was denied, it must be granted using 'System Settings', otherwise, the app is pretty useless (black screen/viewfinder and buttons). So we show a warning message instead. Fixes: QTBUG-120567 Change-Id: Ieedf1a27fea50d98c8028817a0e1e35c3db28e3f Reviewed-by: Doris Verria <doris.verria@qt.io>
-rw-r--r--examples/multimedia/declarative-camera/permission-denied.qml20
-rw-r--r--examples/multimedia/declarative-camera/qmlcamera.cpp13
2 files changed, 26 insertions, 7 deletions
diff --git a/examples/multimedia/declarative-camera/permission-denied.qml b/examples/multimedia/declarative-camera/permission-denied.qml
new file mode 100644
index 000000000..19eb58ead
--- /dev/null
+++ b/examples/multimedia/declarative-camera/permission-denied.qml
@@ -0,0 +1,20 @@
+// Copyright (C) 2024 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+
+
+Rectangle {
+ color: "black"
+ width: 800
+ height: 600
+
+ Text {
+ anchors.fill: parent
+ text: qsTr("Grant the camera permission and restart the app")
+ color: "white"
+ font.pointSize: 20
+ horizontalAlignment: Text.AlignHCenter
+ verticalAlignment: Text.AlignVCenter
+ }
+}
diff --git a/examples/multimedia/declarative-camera/qmlcamera.cpp b/examples/multimedia/declarative-camera/qmlcamera.cpp
index 4bed21816..9844fd53b 100644
--- a/examples/multimedia/declarative-camera/qmlcamera.cpp
+++ b/examples/multimedia/declarative-camera/qmlcamera.cpp
@@ -15,22 +15,21 @@ int main(int argc, char *argv[])
QQuickView view;
view.setResizeMode(QQuickView::SizeRootObjectToView);
- auto setupView = [&view]() {
+ auto setupView = [&view](const QUrl &viewSource) {
// Qt.quit() called in embedded .qml by default only emits
// quit() signal, so do this (optionally use Qt.exit()).
QObject::connect(view.engine(), &QQmlEngine::quit, qApp, &QGuiApplication::quit);
- view.setSource(QUrl("qrc:///declarative-camera.qml"));
+ view.setSource(viewSource);
view.show();
};
#if QT_CONFIG(permissions)
QCameraPermission cameraPermission;
qApp->requestPermission(cameraPermission, [&setupView](const QPermission &permission) {
- // Show UI in any case. If there is no permission, the UI will just
- // be disabled.
- if (permission.status() != Qt::PermissionStatus::Granted)
- qWarning("Camera permission is not granted!");
- setupView();
+ if (permission.status() == Qt::PermissionStatus::Denied)
+ setupView(QUrl("qrc:///permission-denied.qml"));
+ else
+ setupView(QUrl("qrc:///declarative-camera.qml"));
});
#else
setupView();