6#include <QtCore/qcoreapplication.h>
7#include <QtCore/private/qohospermissionshelper_p.h>
8#include <QtCore/qstringlist.h>
16 if (permissionSubString ==
nullptr)
19 return QString::fromUtf8(
"ohos.permission.%1").arg(permissionSubString);
24 const auto id = permission.type().id();
25 if (id == qMetaTypeId<QCameraPermission>()) {
26 return { makeOhosPermissionStr(
"CAMERA") };
28 return { makeOhosPermissionStr(
"ACCESS_BLUETOOTH") };
29 }
else if (id == qMetaTypeId<QLocationPermission>()) {
30 return { makeOhosPermissionStr(
"LOCATION") };
31 }
else if (id == qMetaTypeId<QMicrophonePermission>()) {
32 return { makeOhosPermissionStr(
"MICROPHONE") };
33 }
else if (id == qMetaTypeId<QCalendarPermission>()) {
34 switch (permission.value<QCalendarPermission>()->accessMode()) {
35 case QCalendarPermission::AccessMode::ReadOnly:
36 return { makeOhosPermissionStr(
"READ_CALENDAR") };
37 case QCalendarPermission::AccessMode::WriteOnly:
38 return { makeOhosPermissionStr(
"WRITE_CALENDAR") };
39 case QCalendarPermission::AccessMode::ReadWrite:
40 return { makeOhosPermissionStr(
"READ_CALENDAR"),
41 makeOhosPermissionStr(
"WRITE_CALENDAR") };
43 Q_UNREACHABLE_RETURN({});
44 }
else if (id == qMetaTypeId<QContactsPermission>()) {
47 switch (permission.value<QContactsPermission>()->accessMode()) {
48 case QContactsPermission::AccessMode::ReadOnly:
49 return { makeOhosPermissionStr(
"READ_CONTACTS") };
50 case QContactsPermission::AccessMode::ReadWrite:
51 return { makeOhosPermissionStr(
"READ_CONTACTS"),
52 makeOhosPermissionStr(
"WRITE_CONTACTS") };
54 Q_UNREACHABLE_RETURN({});
61 const QStringList &qPermissionNames,
62 const QPermissions::Private::PermissionCallback &callback)
64 auto userPermissionResultConsumer = [=](QList<QOhosPermissionsHelper::PermissionRequestResult> appPermissionResults) {
65 Qt::PermissionStatus status = Qt::PermissionStatus::Granted;
66 for (
const auto &permissionResult : appPermissionResults) {
67 if (!permissionResult.permissionGranted) {
68 status = permissionResult.dialogShown ? Qt::PermissionStatus::Denied : Qt::PermissionStatus::Undetermined;
72 if (status == Qt::PermissionStatus::Undetermined) {
73 auto settingsPermissionResultConsumer = [callback](QList<
bool> status) {
74 auto granted = std::none_of(status.begin(), status.end(), std::logical_not<>{});
75 callback(granted ? Qt::PermissionStatus::Granted : Qt::PermissionStatus::Denied);
78 qPermissionNames, QCoreApplication::instance(), settingsPermissionResultConsumer);
85 qPermissionNames, QCoreApplication::instance(), userPermissionResultConsumer);
92 if (s_permissionsHelper ==
nullptr)
93 return Qt::PermissionStatus::Undetermined;
95 const auto permissionStrList = ohosPermissionStrings(permission);
96 if (!permissionStrList.isEmpty()) {
97 for (
const auto &ohosPermissionStr : permissionStrList)
98 if (!s_permissionsHelper->isPermissionGranted(ohosPermissionStr))
99 return Qt::PermissionStatus::Undetermined;
101 return Qt::PermissionStatus::Granted;
106 const QPermissions::Private::PermissionCallback &callback)
109 callback(Qt::PermissionStatus::Undetermined);
113 const auto permissionNames = ohosPermissionStrings(permission);
114 if (permissionNames.isEmpty())
115 callback(Qt::PermissionStatus::Granted);
117 requestPermissionsFromUser(permissionNames, callback);
Access Bluetooth peripherals.
\inmodule QtCore \inheaderfile QPermissions
void requestPermission(const QPermission &permission, const PermissionCallback &callback)
Qt::PermissionStatus checkPermission(const QPermission &permission)
Combined button and popup list for selecting options.
static QString makeOhosPermissionStr(const char *permissionSubString)
static void requestPermissionsFromUser(const QStringList &qPermissionNames, const QPermissions::Private::PermissionCallback &callback)
void qt_setQOhosPermissionsHelper(QOhosPermissionsHelper *permissionsHelper)
static QStringList ohosPermissionStrings(const QPermission &permission)
static QT_BEGIN_NAMESPACE QOhosPermissionsHelper * s_permissionsHelper