diff options
Diffstat (limited to 'src/corelib/platform/darwin/qdarwinpermissionplugin_location.mm')
-rw-r--r-- | src/corelib/platform/darwin/qdarwinpermissionplugin_location.mm | 32 |
1 files changed, 21 insertions, 11 deletions
diff --git a/src/corelib/platform/darwin/qdarwinpermissionplugin_location.mm b/src/corelib/platform/darwin/qdarwinpermissionplugin_location.mm index ed6acd3c9f..4aa35f3920 100644 --- a/src/corelib/platform/darwin/qdarwinpermissionplugin_location.mm +++ b/src/corelib/platform/darwin/qdarwinpermissionplugin_location.mm @@ -73,15 +73,23 @@ struct PermissionRequest return Qt::PermissionStatus::Denied; } - switch ([self authorizationStatus]) { +#if defined(Q_OS_VISIONOS) + if (permission.availability() == QLocationPermission::Always) + return Qt::PermissionStatus::Denied; +#endif + + auto status = [self authorizationStatus]; + switch (status) { case kCLAuthorizationStatusRestricted: case kCLAuthorizationStatusDenied: return Qt::PermissionStatus::Denied; case kCLAuthorizationStatusNotDetermined: return Qt::PermissionStatus::Undetermined; +#if !defined(Q_OS_VISIONOS) case kCLAuthorizationStatusAuthorizedAlways: return Qt::PermissionStatus::Granted; -#ifdef Q_OS_IOS +#endif +#if defined(Q_OS_IOS) || defined(Q_OS_VISIONOS) case kCLAuthorizationStatusAuthorizedWhenInUse: if (permission.availability() == QLocationPermission::Always) return Qt::PermissionStatus::Denied; @@ -89,24 +97,21 @@ struct PermissionRequest #endif } - Q_UNREACHABLE(); + qCWarning(lcPermissions) << "Unknown permission status" << status << "detected in" << self; + return Qt::PermissionStatus::Denied; } - (CLAuthorizationStatus)authorizationStatus { - if (self.manager) { - if (@available(macOS 11, iOS 14, *)) - return self.manager.authorizationStatus; - } + if (self.manager) + return self.manager.authorizationStatus; return QT_IGNORE_DEPRECATIONS(CLLocationManager.authorizationStatus); } - (Qt::PermissionStatus)accuracyAuthorization:(QLocationPermission)permission { - auto status = CLAccuracyAuthorizationReducedAccuracy; - if (@available(macOS 11, iOS 14, *)) - status = self.manager.accuracyAuthorization; + auto status = self.manager.accuracyAuthorization; switch (status) { case CLAccuracyAuthorizationFullAccuracy: @@ -118,7 +123,8 @@ struct PermissionRequest return Qt::PermissionStatus::Denied; } - Q_UNREACHABLE(); + qCWarning(lcPermissions) << "Unknown accuracy status" << status << "detected in" << self; + return Qt::PermissionStatus::Denied; } - (QStringList)usageDescriptionsFor:(QPermission)permission @@ -174,6 +180,9 @@ struct PermissionRequest } break; case QLocationPermission::Always: +#if defined(Q_OS_VISIONOS) + [self deliverResult]; // Not supported +#else // The documentation specifies that requestAlwaysAuthorization can only // be called when the current authorization status is either undetermined, // or authorized when in use. @@ -196,6 +205,7 @@ struct PermissionRequest default: [self deliverResult]; } +#endif break; } } |