summaryrefslogtreecommitdiffstats
path: root/src/corelib/platform/darwin/qdarwinpermissionplugin_location.mm
diff options
context:
space:
mode:
Diffstat (limited to 'src/corelib/platform/darwin/qdarwinpermissionplugin_location.mm')
-rw-r--r--src/corelib/platform/darwin/qdarwinpermissionplugin_location.mm32
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;
}
}