Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Toggle main menu visibility
Loading...
Searching...
No Matches
qpermissions_harmony.cpp
Go to the documentation of this file.
1
// Copyright (C) 2026 The Qt Company Ltd.
2
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3
4
#
include
"qpermissions.h"
5
#
include
"qpermissions_p.h"
6
#
include
<
QtCore
/
qcoreapplication
.
h
>
7
#
include
<
QtCore
/
private
/
qohospermissionshelper_p
.
h
>
8
#
include
<
QtCore
/
qstringlist
.
h
>
9
10
QT_BEGIN_NAMESPACE
11
12
static
QOhosPermissionsHelper
*
s_permissionsHelper
=
nullptr
;
13
14
static
QString
makeOhosPermissionStr
(
const
char
*permissionSubString)
15
{
16
if
(permissionSubString ==
nullptr
)
17
return
QString();
18
19
return
QString::fromUtf8(
"ohos.permission.%1"
).arg(permissionSubString);
20
}
21
22
static
QStringList
ohosPermissionStrings
(
const
QPermission
&permission)
23
{
24
const
auto
id = permission.type().id();
25
if
(id == qMetaTypeId<QCameraPermission>()) {
26
return
{ makeOhosPermissionStr(
"CAMERA"
) };
27
}
else
if
(id == qMetaTypeId<
QBluetoothPermission
>()) {
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"
) };
42
}
43
Q_UNREACHABLE_RETURN({});
44
}
else
if
(id == qMetaTypeId<QContactsPermission>()) {
45
// The contact permission goes under the category of the restricted permission
46
// and this requires special previlege from the application
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"
) };
53
}
54
Q_UNREACHABLE_RETURN({});
55
}
56
57
return
{};
58
}
59
60
static
void
requestPermissionsFromUser
(
61
const
QStringList &qPermissionNames,
62
const
QPermissions::Private::PermissionCallback &callback)
63
{
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;
69
break
;
70
}
71
}
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);
76
};
77
s_permissionsHelper
->requestPermissionsOnSettingIfNeeded(
78
qPermissionNames, QCoreApplication::instance(), settingsPermissionResultConsumer);
79
}
else
{
80
callback(status);
81
}
82
};
83
84
s_permissionsHelper
->requestPermissionsFromUserIfNeeded(
85
qPermissionNames, QCoreApplication::instance(), userPermissionResultConsumer);
86
}
87
88
namespace
QPermissions::
Private
89
{
90
Qt
::
PermissionStatus
checkPermission
(
const
QPermission
&permission)
91
{
92
if
(s_permissionsHelper ==
nullptr
)
93
return
Qt::PermissionStatus::Undetermined;
94
95
const
auto
permissionStatuses = s_permissionsHelper->checkStatusesOfPermissions(
96
ohosPermissionStrings(permission));
97
if
(permissionStatuses.contains(Qt::PermissionStatus::Denied))
98
return
Qt::PermissionStatus::Denied;
99
if
(permissionStatuses.contains(Qt::PermissionStatus::Undetermined))
100
return
Qt::PermissionStatus::Undetermined;
101
return
Qt::PermissionStatus::Granted;
102
}
103
104
void
requestPermission
(
105
const
QPermission
&permission,
106
const
QPermissions::Private::PermissionCallback &callback)
107
{
108
if
(
s_permissionsHelper
==
nullptr
) {
109
callback(Qt::PermissionStatus::Undetermined);
110
return
;
111
}
112
113
const
auto
permissionNames = ohosPermissionStrings(permission);
114
if
(permissionNames.isEmpty())
115
callback(Qt::PermissionStatus::Granted);
116
else
117
requestPermissionsFromUser(permissionNames, callback);
118
}
119
}
120
121
void
qt_setQOhosPermissionsHelper
(QOhosPermissionsHelper *permissionsHelper)
122
{
123
s_permissionsHelper
= permissionsHelper;
124
}
125
126
QT_END_NAMESPACE
QBluetoothPermission
Access Bluetooth peripherals.
Definition
qpermissions.h:180
QPermission
\inmodule QtCore \inheaderfile QPermissions
Definition
qpermissions.h:36
QPermissions::Private::requestPermission
void requestPermission(const QPermission &permission, const PermissionCallback &callback)
Definition
qpermissions.cpp:701
QPermissions::Private::checkPermission
Qt::PermissionStatus checkPermission(const QPermission &permission)
Definition
qpermissions.cpp:694
QPermissions
Definition
qpermissions.cpp:693
QT_BEGIN_NAMESPACE
Combined button and popup list for selecting options.
Definition
qsequentialanimationgroup.cpp:47
makeOhosPermissionStr
static QString makeOhosPermissionStr(const char *permissionSubString)
Definition
qpermissions_harmony.cpp:14
requestPermissionsFromUser
static void requestPermissionsFromUser(const QStringList &qPermissionNames, const QPermissions::Private::PermissionCallback &callback)
Definition
qpermissions_harmony.cpp:60
qt_setQOhosPermissionsHelper
void qt_setQOhosPermissionsHelper(QOhosPermissionsHelper *permissionsHelper)
Definition
qpermissions_harmony.cpp:121
ohosPermissionStrings
static QStringList ohosPermissionStrings(const QPermission &permission)
Definition
qpermissions_harmony.cpp:22
s_permissionsHelper
static QT_BEGIN_NAMESPACE QOhosPermissionsHelper * s_permissionsHelper
Definition
qpermissions_harmony.cpp:12
qtbase
src
corelib
kernel
qpermissions_harmony.cpp
Generated on
for Qt by
1.18.0