diff options
Diffstat (limited to 'tests')
-rw-r--r-- | tests/bttestui/CMakeLists.txt | 8 | ||||
-rw-r--r-- | tests/bttestui/main.cpp | 23 |
2 files changed, 31 insertions, 0 deletions
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 <QtCore/QLoggingCategory> +#if QT_CONFIG(permissions) +#include <QtCore/qpermissions.h> +#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<BtLocalDevice>("Local", 6, 5, "BluetoothDevice"); QQuickView view; |