diff options
author | Timur Pocheptsov <timur.pocheptsov@qt.io> | 2024-04-10 10:09:25 +0200 |
---|---|---|
committer | Timur Pocheptsov <timur.pocheptsov@qt.io> | 2024-04-12 10:22:22 +0200 |
commit | 1f2f6d571e0ca3607eedcea82949a13182d90a9b (patch) | |
tree | 7d4e044077419b6db64b664acfe0f53fa2b5a86d | |
parent | 98b755f1496f19927d46fcfbbcc5929b6041372b (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.qml | 20 | ||||
-rw-r--r-- | examples/multimedia/declarative-camera/qmlcamera.cpp | 13 |
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(); |