From 3eecf663a481b9a7a859566f41ae057ee0278fba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nils=20Petter=20Sk=C3=A5lerud?= Date: Fri, 6 Sep 2024 09:32:48 +0200 Subject: [PATCH] iOS: Handle new contacts permission enumerator MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit iOS 18 added a new enumerator value for contact permissions, "Limited". This value has not been added for any other permission enumerator types such as camera. Currently we get compiler errors for not explicitly handling this value in a switch case. This change explicitly handles this enumerator and enables compilation. Pick-to: 6.7 6.5 Change-Id: Idfc45902f9ae2e555fab8ba3d860a58d89651964 Reviewed-by: Tor Arne Vestbø (cherry picked from commit 0bc5e5ad0e490a1d8e140855b23abbb087c6f9a5) Reviewed-by: Qt Cherry-pick Bot --- .../darwin/qdarwinpermissionplugin_contacts.mm | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/src/corelib/platform/darwin/qdarwinpermissionplugin_contacts.mm b/src/corelib/platform/darwin/qdarwinpermissionplugin_contacts.mm index 3221b6dc1db..5ec612bf782 100644 --- a/src/corelib/platform/darwin/qdarwinpermissionplugin_contacts.mm +++ b/src/corelib/platform/darwin/qdarwinpermissionplugin_contacts.mm @@ -5,8 +5,6 @@ #include -QT_DEFINE_PERMISSION_STATUS_CONVERTER(CNAuthorizationStatus); - @interface QDarwinContactsPermissionHandler () @property (nonatomic, retain) CNContactStore *contactStore; @end @@ -21,7 +19,21 @@ QT_DEFINE_PERMISSION_STATUS_CONVERTER(CNAuthorizationStatus); - (Qt::PermissionStatus)currentStatus { const auto status = [CNContactStore authorizationStatusForEntityType:CNEntityTypeContacts]; - return nativeStatusToQtStatus(status); + switch (status) { + case CNAuthorizationStatusAuthorized: +#if defined(Q_OS_IOS) && QT_IOS_PLATFORM_SDK_EQUAL_OR_ABOVE(180000) + case CNAuthorizationStatusLimited: +#endif + return Qt::PermissionStatus::Granted; + case CNAuthorizationStatusDenied: + case CNAuthorizationStatusRestricted: + return Qt::PermissionStatus::Denied; + case CNAuthorizationStatusNotDetermined: + return Qt::PermissionStatus::Undetermined; + } + qCWarning(lcPermissions) << "Unknown permission status" << status << "detected in" + << QT_STRINGIFY(QT_DARWIN_PERMISSION_PLUGIN); + return Qt::PermissionStatus::Denied; } - (QStringList)usageDescriptionsFor:(QPermission)permission