8#include <CoreBluetooth/CoreBluetooth.h>
10@interface QDarwinBluetoothPermissionHandler () <CBCentralManagerDelegate>
11@property (nonatomic, retain) CBCentralManager *manager;
14@implementation QDarwinBluetoothPermissionHandler {
15 std::deque<PermissionCallback> m_callbacks;
20 if ((self = [super init]))
26- (Qt::PermissionStatus)checkPermission:(QPermission)permission
29 return [self currentStatus];
32- (Qt::PermissionStatus)currentStatus
34 auto status = CBCentralManager.authorization;
36 case CBManagerAuthorizationNotDetermined:
37 return Qt::PermissionStatus::Undetermined;
38 case CBManagerAuthorizationRestricted:
39 case CBManagerAuthorizationDenied:
40 return Qt::PermissionStatus::Denied;
41 case CBManagerAuthorizationAllowedAlways:
42 return Qt::PermissionStatus::Granted;
45 qCWarning(lcPermissions) <<
"Unknown permission status" << status <<
"detected in" << self;
46 return Qt::PermissionStatus::Denied;
49- (
void)requestPermission:(QPermission)permission withCallback:(PermissionCallback)callback
51 m_callbacks.push_back(callback);
53 self.manager = [[[CBCentralManager alloc]
54 initWithDelegate:self queue:dispatch_get_main_queue()] autorelease];
58- (
void)centralManagerDidUpdateState:(CBCentralManager *)manager
60 Q_ASSERT(manager == self.manager);
61 Q_ASSERT(!m_callbacks.empty());
63 auto status = [self currentStatus];
65 for (
auto callback : m_callbacks)
69 self.manager.delegate = nil;
73- (
QStringList)usageDescriptionsFor:(QPermission)permission
77 if (QOperatingSystemVersion::current() > QOperatingSystemVersion::MacOSBigSur)
80 return {
"NSBluetoothAlwaysUsageDescription" };
87#include "moc_qdarwinpermissionplugin_p_p.cpp"
QList< QString > QStringList
Constructs a string list that contains the given string, str.