diff --git a/src/core/positioning/bluetoothdevicemodel.cpp b/src/core/positioning/bluetoothdevicemodel.cpp index ded277f46b..03ffcca0a3 100644 --- a/src/core/positioning/bluetoothdevicemodel.cpp +++ b/src/core/positioning/bluetoothdevicemodel.cpp @@ -62,19 +62,29 @@ void BluetoothDeviceModel::startServiceDiscovery( const bool fullDiscovery ) { QBluetoothPermission bluetoothPermission; bluetoothPermission.setCommunicationModes( QBluetoothPermission::Access ); - qApp->requestPermission( bluetoothPermission, [=]( const QPermission &permission ) { - if ( permission.status() == Qt::PermissionStatus::Granted ) - { - mPermissionChecked = true; - startServiceDiscovery( fullDiscovery ); - } - else - { - mLastError = tr( "Bluetooth permission denied" ); - emit lastErrorChanged( mLastError ); - } - } ); - return; + Qt::PermissionStatus permissionStatus = qApp->checkPermission( bluetoothPermission ); + if ( permissionStatus == Qt::PermissionStatus::Undetermined ) + { + qApp->requestPermission( bluetoothPermission, this, [=]( const QPermission &permission ) { + if ( permission.status() == Qt::PermissionStatus::Granted ) + { + mPermissionChecked = true; + startServiceDiscovery( fullDiscovery ); + } + else + { + mLastError = tr( "Bluetooth permission denied" ); + emit lastErrorChanged( mLastError ); + } + } ); + return; + } + else if ( permissionStatus == Qt::PermissionStatus::Denied ) + { + mLastError = tr( "Bluetooth permission denied" ); + emit lastErrorChanged( mLastError ); + return; + } } #endif diff --git a/src/core/positioning/bluetoothreceiver.cpp b/src/core/positioning/bluetoothreceiver.cpp index 88551cc639..93b0751084 100644 --- a/src/core/positioning/bluetoothreceiver.cpp +++ b/src/core/positioning/bluetoothreceiver.cpp @@ -97,20 +97,31 @@ void BluetoothReceiver::handleConnectDevice() { QBluetoothPermission bluetoothPermission; bluetoothPermission.setCommunicationModes( QBluetoothPermission::Access ); - qApp->requestPermission( bluetoothPermission, [=]( const QPermission &permission ) { - if ( permission.status() == Qt::PermissionStatus::Granted ) - { - mPermissionChecked = true; - handleConnectDevice(); - } - else - { - setValid( false ); - mLastError = tr( "Bluetooth permission denied" ); - emit lastErrorChanged( mLastError ); - } - } ); - return; + Qt::PermissionStatus permissionStatus = qApp->checkPermission( bluetoothPermission ); + if ( permissionStatus == Qt::PermissionStatus::Undetermined ) + { + qApp->requestPermission( bluetoothPermission, this, [=]( const QPermission &permission ) { + if ( permission.status() == Qt::PermissionStatus::Granted ) + { + mPermissionChecked = true; + handleConnectDevice(); + } + else + { + setValid( false ); + mLastError = tr( "Bluetooth permission denied" ); + emit lastErrorChanged( mLastError ); + } + } ); + return; + } + else if ( permissionStatus == Qt::PermissionStatus::Denied ) + { + setValid( false ); + mLastError = tr( "Bluetooth permission denied" ); + emit lastErrorChanged( mLastError ); + return; + } } #endif if ( mAddress.isEmpty() ) diff --git a/src/core/positioning/internalgnssreceiver.cpp b/src/core/positioning/internalgnssreceiver.cpp index 0d34063531..d6a0cf8651 100644 --- a/src/core/positioning/internalgnssreceiver.cpp +++ b/src/core/positioning/internalgnssreceiver.cpp @@ -112,20 +112,31 @@ void InternalGnssReceiver::handleConnectDevice() { QLocationPermission locationPermission; locationPermission.setAccuracy( QLocationPermission::Precise ); - qApp->requestPermission( locationPermission, [=]( const QPermission &permission ) { - if ( permission.status() == Qt::PermissionStatus::Granted ) - { - mPermissionChecked = true; - handleConnectDevice(); - } - else - { - setValid( false ); - mLastError = tr( "Location permission denied" ); - emit lastErrorChanged( mLastError ); - } - } ); - return; + Qt::PermissionStatus permissionStatus = qApp->checkPermission( locationPermission ); + if ( permissionStatus == Qt::PermissionStatus::Undetermined ) + { + qApp->requestPermission( locationPermission, [=]( const QPermission &permission ) { + if ( permission.status() == Qt::PermissionStatus::Granted ) + { + mPermissionChecked = true; + handleConnectDevice(); + } + else + { + setValid( false ); + mLastError = tr( "Location permission denied" ); + emit lastErrorChanged( mLastError ); + } + } ); + return; + } + else if ( permissionStatus == Qt::PermissionStatus::Denied ) + { + setValid( false ); + mLastError = tr( "Location permission denied" ); + emit lastErrorChanged( mLastError ); + return; + } } #endif if ( mGeoPositionSource )