8QDarwinPermissionPlugin::QDarwinPermissionPlugin(QDarwinPermissionHandler *handler)
14QDarwinPermissionPlugin::~QDarwinPermissionPlugin()
19Qt::PermissionStatus QDarwinPermissionPlugin::checkPermission(
const QPermission &permission)
21 return [m_handler checkPermission:permission];
24void QDarwinPermissionPlugin::requestPermission(
const QPermission &permission,
const PermissionCallback &callback)
26 if (!verifyUsageDescriptions(permission)) {
27 callback(Qt::PermissionStatus::Denied);
34 [m_handler requestPermission:permission withCallback:[&, callback](Qt::PermissionStatus status) {
40 QMetaObject::invokeMethod(
this,
"permissionUpdated", Qt::QueuedConnection,
41 Q_ARG(Qt::PermissionStatus, status), Q_ARG(PermissionCallback, callback));
45void QDarwinPermissionPlugin::permissionUpdated(Qt::PermissionStatus status,
const PermissionCallback &callback)
50bool QDarwinPermissionPlugin::verifyUsageDescriptions(
const QPermission &permission)
55 auto *infoDictionary = NSBundle.mainBundle.infoDictionary;
56 for (
auto description : [m_handler usageDescriptionsFor:permission]) {
57 if (!infoDictionary[description.toNSString()]) {
58 qCWarning(lcPermissions) <<
59 "Requesting" << permission.type().name() <<
60 "requires" << description <<
"in Info.plist";
71@implementation QDarwinPermissionHandler
73- (Qt::PermissionStatus)checkPermission:(QPermission)permission
78- (
void)requestPermission:(QPermission)permission withCallback:(PermissionCallback)callback
81 qCWarning(lcPermissions).nospace() <<
"Could not request " << permission.type().name() <<
". "
82 <<
"Please make sure you have included the required usage description in your Info.plist";
83 callback(Qt::PermissionStatus::Denied);
86- (
QStringList)usageDescriptionsFor:(QPermission)permission
93#include "moc_qdarwinpermissionplugin_p.cpp"
Combined button and popup list for selecting options.
QList< QString > QStringList
Constructs a string list that contains the given string, str.