7#include <QtCore/qstringlist.h>
8#include <QtCore/qfuture.h>
9#include <QtCore/qhash.h>
11#include "private/qandroidextras_p.h"
21 static QString backgroundLocation = u
"android.permission.ACCESS_BACKGROUND_LOCATION"_s;
22 static QString fineLocation = u
"android.permission.ACCESS_FINE_LOCATION"_s;
23 static QString coarseLocation = u
"android.permission.ACCESS_COARSE_LOCATION"_s;
31 nativeLocationPermissionList << coarseLocation;
33 nativeLocationPermissionList << fineLocation;
38 nativeLocationPermissionList << coarseLocation;
47 nativeLocationPermissionList.prepend(backgroundLocation);
49 return nativeLocationPermissionList;
58 static QString bluetoothGeneral = u
"android.permission.BLUETOOTH"_s;
60 static QString bluetoothScan = u
"android.permission.BLUETOOTH_SCAN"_s;
61 static QString bluetoothAdvertise = u
"android.permission.BLUETOOTH_ADVERTISE"_s;
62 static QString bluetoothConnect = u
"android.permission.BLUETOOTH_CONNECT"_s;
65 static QString fineLocation = u
"android.permission.ACCESS_FINE_LOCATION"_s;
68 return {bluetoothGeneral, fineLocation};
73 permissionList << bluetoothAdvertise;
75 permissionList << bluetoothScan << bluetoothConnect << fineLocation;
76 return permissionList;
82 const auto id = permission.
type().
id();
83 if (
id == qMetaTypeId<QLocationPermission>()) {
85 }
else if (
id == qMetaTypeId<QCameraPermission>()) {
86 return { u
"android.permission.CAMERA"_s };
87 }
else if (
id == qMetaTypeId<QMicrophonePermission>()) {
88 return { u
"android.permission.RECORD_AUDIO"_s };
89 }
else if (
id == qMetaTypeId<QBluetoothPermission>()) {
91 }
else if (
id == qMetaTypeId<QContactsPermission>()) {
92 const auto readContactsString = u
"android.permission.READ_CONTACTS"_s;
95 return { readContactsString };
97 return { readContactsString, u
"android.permission.WRITE_CONTACTS"_s };
99 Q_UNREACHABLE_RETURN({});
100 }
else if (
id == qMetaTypeId<QCalendarPermission>()) {
101 const auto readContactsString = u
"android.permission.READ_CALENDAR"_s;
104 return { readContactsString };
106 return { readContactsString, u
"android.permission.WRITE_CALENDAR"_s };
108 Q_UNREACHABLE_RETURN({});
138 for (
const auto &
result : androidResults) {
151 if (nativePermissionList.isEmpty())
155 androidResults.
reserve(nativePermissionList.size());
156 for (
const auto &nativePermission : nativePermissionList)
161 const bool foundStatus = (
it != g_permissionStatusHash->
constEnd());
172 if (nativePermissionList.isEmpty()) {
177 QtAndroidPrivate::requestPermissions(nativePermissionList).then(
qApp,
179 const auto androidResults =
future.isValid() ?
future.results()
182 g_permissionStatusHash->insert(permission.
type().
id(), status);
Access Bluetooth peripherals.
Q_CORE_EXPORT CommunicationModes communicationModes() const
Access the user's calendar.
Q_CORE_EXPORT AccessMode accessMode() const
Returns AccessMode::ReadWrite when the request is for read-write and AccessMode::ReadOnly when it is ...
void reserve(qsizetype size)
Access the user's location.
Q_CORE_EXPORT Availability availability() const
Returns the availability of the request.
Q_CORE_EXPORT Accuracy accuracy() const
Returns the accuracy of the request.
\inmodule QtCore \inheaderfile QPermissions
std::optional< T > value() const
QMetaType type() const
Returns the type of the permission.
const_iterator constEnd() const noexcept
const_iterator constFind(const T &value) const
\macro QT_RESTRICTED_CAST_FROM_ASCII
QSet< QString >::iterator it
void requestPermission(const QPermission &permission, const PermissionCallback &callback)
std::function< void(Qt::PermissionStatus)> PermissionCallback
Qt::PermissionStatus checkPermission(const QPermission &permission)
Combined button and popup list for selecting options.
\preliminary \inmodule QtCorePrivate
Q_CORE_EXPORT jint androidSdkVersion()
#define Q_GLOBAL_STATIC_WITH_ARGS(TYPE, NAME, ARGS)
static QStringList nativeBluetoothPermission(const QBluetoothPermission &permission)
static Qt::PermissionStatus permissionStatusForAndroidResult(QtAndroidPrivate::PermissionResult result)
static Qt::PermissionStatus getCombinedStatus(const QList< QtAndroidPrivate::PermissionResult > &androidResults)
static QStringList nativeStringsFromPermission(const QPermission &permission)
static QStringList nativeLocationPermission(const QLocationPermission &permission)
QFuture< void > future
[5]