diff options
| author | Marc Mutz <marc.mutz@qt.io> | 2022-12-29 07:10:33 +0100 |
|---|---|---|
| committer | Marc Mutz <marc.mutz@qt.io> | 2023-01-05 19:01:21 +0000 |
| commit | 91f18c92d75be6f1fda40778d85f60748eb0c5ca (patch) | |
| tree | 72124578aca2fa84ef4f3291add28a3d44f0d0e3 | |
| parent | 5761f254a01f3fc941b87cbbc9392e7a8a12b6c0 (diff) | |
Android: requestPermissionsInternal(): use more makeReadyFuture()
Only use an actual QPromise when the calculation will be async.
Change-Id: I5900c6498f56721dd04c4da204c0270492f52eee
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
| -rw-r--r-- | src/corelib/platform/android/qandroidextras.cpp | 27 |
1 files changed, 13 insertions, 14 deletions
diff --git a/src/corelib/platform/android/qandroidextras.cpp b/src/corelib/platform/android/qandroidextras.cpp index 3d2425134ac..89b4bed283c 100644 --- a/src/corelib/platform/android/qandroidextras.cpp +++ b/src/corelib/platform/android/qandroidextras.cpp @@ -1083,25 +1083,24 @@ static void sendRequestPermissionsResult(JNIEnv *env, jobject *obj, jint request QFuture<QtAndroidPrivate::PermissionResult> requestPermissionsInternal(const QStringList &permissions) { - QSharedPointer<QPromise<QtAndroidPrivate::PermissionResult>> promise; - promise.reset(new QPromise<QtAndroidPrivate::PermissionResult>()); - QFuture<QtAndroidPrivate::PermissionResult> future = promise->future(); - promise->start(); - // No mechanism to request permission for SDK version below 23, because // permissions defined in the manifest are granted at install time. if (QtAndroidPrivate::androidSdkVersion() < 23) { - for (int i = 0; i < permissions.size(); ++i) - promise->addResult(QtAndroidPrivate::checkPermission(permissions.at(i)).result(), i); - promise->finish(); - return future; + QList<QtAndroidPrivate::PermissionResult> result; + result.reserve(permissions.size()); + // ### can we kick off all checkPermission()s, and whenAll() collect results? + for (const QString &permission : permissions) + result.push_back(QtAndroidPrivate::checkPermission(permission).result()); + return QtFuture::makeReadyFuture(std::as_const(result)); // as_const d/t QTBUG-109677 } - if (!QtAndroidPrivate::acquireAndroidDeadlockProtector()) { - promise->addResult(QtAndroidPrivate::Denied); - promise->finish(); - return future; - } + if (!QtAndroidPrivate::acquireAndroidDeadlockProtector()) + return QtFuture::makeReadyFuture(QtAndroidPrivate::Denied); + + QSharedPointer<QPromise<QtAndroidPrivate::PermissionResult>> promise; + promise.reset(new QPromise<QtAndroidPrivate::PermissionResult>()); + QFuture<QtAndroidPrivate::PermissionResult> future = promise->future(); + promise->start(); const int requestCode = nextRequestCode(); QMutexLocker locker(&g_pendingPermissionRequestsMutex); |
