5#ifndef QQMLPERMISSIONS_P_H
6#define QQMLPERMISSIONS_P_H
19#include <private/qqmlglobal_p.h>
21#if QT_CONFIG(permissions)
23#include <QtQml/qqmlregistration.h>
25#include <QtCore/qpermissions.h>
26#include <QtCore/qnamespace.h>
27#include <QtCore/qproperty.h>
28#include <QtCore/qglobal.h>
30#include <QtCore/qcoreapplication.h>
34#define QML_PERMISSION(Permission)
36 QML_NAMED_ELEMENT(Permission) public
38 Q_PROPERTY(Qt::PermissionStatus status READ status NOTIFY statusChanged)
39 Qt::PermissionStatus status() const { return qApp->checkPermission(m_permission); }
40 Q_SIGNAL void statusChanged();
41 Q_INVOKABLE void request() {
42 const auto previousStatus = status();
43 qApp->requestPermission(m_permission, this,
44 [this, previousStatus](const QPermission &permission) {
45 if (previousStatus != permission.status())
50 Q##Permission m_permission; public
53#define QML_PERMISSION_PROPERTY(PropertyType, getterName, setterName)
54 Q_PROPERTY(PropertyType getterName READ getterName WRITE setterName NOTIFY getterName##Changed)
55 PropertyType getterName() const { return m_permission.getterName(); }
56 void setterName(const PropertyType &value) {
57 const auto previousValue = m_permission.getterName();
58 const auto previousStatus = status();
59 m_permission.setterName(value);
60 if (m_permission.getterName() != previousValue) {
61 emit getterName##Changed();
62 if (status() != previousStatus)
66 Q_SIGNAL void getterName##Changed();
69struct QQmlQLocationPermission :
public QObject
71 QML_PERMISSION(LocationPermission)
72 QML_ADDED_IN_VERSION(6, 6)
73 QML_EXTENDED_NAMESPACE(QLocationPermission)
74 QML_PERMISSION_PROPERTY(QLocationPermission::Availability, availability, setAvailability)
75 QML_PERMISSION_PROPERTY(QLocationPermission::Accuracy, accuracy, setAccuracy)
78struct QQmlCalendarPermission :
public QObject
80 QML_PERMISSION(CalendarPermission)
81 QML_ADDED_IN_VERSION(6, 6)
82 QML_EXTENDED_NAMESPACE(QCalendarPermission)
83 QML_PERMISSION_PROPERTY(QCalendarPermission::AccessMode, accessMode, setAccessMode)
86struct QQmlContactsPermission :
public QObject
88 QML_PERMISSION(ContactsPermission)
89 QML_ADDED_IN_VERSION(6, 6)
90 QML_EXTENDED_NAMESPACE(QContactsPermission)
91 QML_PERMISSION_PROPERTY(QContactsPermission::AccessMode, accessMode, setAccessMode)
94struct QQmlBluetoothPermission :
public QObject
96 QML_PERMISSION(BluetoothPermission)
97 QML_ADDED_IN_VERSION(6, 6)
98 QML_EXTENDED_NAMESPACE(QBluetoothPermission)
99 QML_PERMISSION_PROPERTY(QBluetoothPermission::CommunicationModes, communicationModes, setCommunicationModes)
102struct QQmlCameraPermission :
public QObject
104 QML_PERMISSION(CameraPermission)
105 QML_ADDED_IN_VERSION(6, 6)
108struct QQmlMicrophonePermission :
public QObject
110 QML_PERMISSION(MicrophonePermission)
111 QML_ADDED_IN_VERSION(6, 6)