From fbe1a265afef464c6aac71db77a50eda17e82f4e Mon Sep 17 00:00:00 2001 From: Juha Vuolle Date: Fri, 31 Mar 2023 14:15:21 +0300 Subject: Add permission request to bttestui manual test application In addition add temporary workaround for linking against the permission plugin on macOS Task-number: QTBUG-112215 Task-number: QTBUG-112212 Change-Id: Idbd8c4cbdfc58893dc23147379265030cefc2aee Reviewed-by: Timur Pocheptsov Reviewed-by: Ivan Solovev --- tests/bttestui/CMakeLists.txt | 8 ++++++++ tests/bttestui/main.cpp | 23 +++++++++++++++++++++++ 2 files changed, 31 insertions(+) (limited to 'tests') diff --git a/tests/bttestui/CMakeLists.txt b/tests/bttestui/CMakeLists.txt index 1abe3bef..4daee3df 100644 --- a/tests/bttestui/CMakeLists.txt +++ b/tests/bttestui/CMakeLists.txt @@ -57,6 +57,14 @@ else() FILES ${bttest_resource_files} ) + + if(MACOS) + # Explicitly link against the static permission plugin because tests + # currently don't have finalizers run for them except for iOS. + # TODO: Remove this when qtbase automatically runs finalizers for tests: QTBUG-112212 + target_link_libraries(bttestui PRIVATE Qt6::QDarwinBluetoothPermissionPlugin) + endif() + endif() set_target_properties(bttestui PROPERTIES diff --git a/tests/bttestui/main.cpp b/tests/bttestui/main.cpp index a4d8b942..8a087815 100644 --- a/tests/bttestui/main.cpp +++ b/tests/bttestui/main.cpp @@ -8,12 +8,35 @@ #include +#if QT_CONFIG(permissions) +#include +#endif + #include "btlocaldevice.h" int main(int argc, char *argv[]) { QLoggingCategory::setFilterRules(QStringLiteral("qt.bluetooth* = true")); QGuiApplication app(argc, argv); + +#if QT_CONFIG(permissions) + // Check Bluetooth permission and request it if the app doesn't have it + auto permissionStatus = app.checkPermission(QBluetoothPermission{}); + if (permissionStatus == Qt::PermissionStatus::Undetermined) { + app.requestPermission(QBluetoothPermission{}, + [&permissionStatus](const QPermission &permission) { + qApp->exit(); // Exit the permission request processing started below + permissionStatus = permission.status(); + }); + // Process permission request + app.exec(); + } + if (permissionStatus == Qt::PermissionStatus::Denied) { + qWarning("Bluetooth permission denied, exiting"); + return -1; + } +#endif + qmlRegisterType("Local", 6, 5, "BluetoothDevice"); QQuickView view; -- cgit v1.2.1