From bf059bff7df9c3d7534496721e07933e1883f402 Mon Sep 17 00:00:00 2001 From: Jarek Kobus Date: Thu, 9 Mar 2023 12:04:09 +0100 Subject: [PATCH] Android: Replace QFutureInterfaceBase with QFuture In case a passed future interface is used only for checking for cancel, use QFuture instead. This will properly integrate with QPromise API. Change-Id: I33e5e9c62dbcfb1f7aa71eace6158e5b7c0a7098 Reviewed-by: Alessandro Portale --- src/plugins/android/androidavdmanager.cpp | 20 ++++++++------------ src/plugins/android/androidavdmanager.h | 9 +++++---- src/plugins/android/androiddeployqtstep.cpp | 3 ++- 3 files changed, 15 insertions(+), 17 deletions(-) diff --git a/src/plugins/android/androidavdmanager.cpp b/src/plugins/android/androidavdmanager.cpp index 7cf62fadf86..d64d810e1de 100644 --- a/src/plugins/android/androidavdmanager.cpp +++ b/src/plugins/android/androidavdmanager.cpp @@ -14,21 +14,17 @@ #include #include -#include #include #include #include -#include #include -#include using namespace Utils; +using namespace std; namespace Android::Internal { -using namespace std; - const int avdCreateTimeoutMs = 30000; static Q_LOGGING_CATEGORY(avdManagerLog, "qtc.android.avdManager", QtWarningMsg) @@ -228,7 +224,7 @@ QString AndroidAvdManager::startAvd(const QString &name) const { if (!findAvd(name).isEmpty() || startAvdAsync(name)) return waitForAvd(name); - return QString(); + return {}; } static bool is32BitUserSpace() @@ -301,21 +297,21 @@ QString AndroidAvdManager::findAvd(const QString &avdName) const if (device.avdName == avdName) return device.serialNumber; } - return QString(); + return {}; } QString AndroidAvdManager::waitForAvd(const QString &avdName, - const QFutureInterfaceBase &fi) const + const std::optional> &future) const { // we cannot use adb -e wait-for-device, since that doesn't work if a emulator is already running // 60 rounds of 2s sleeping, two minutes for the avd to start QString serialNumber; for (int i = 0; i < 60; ++i) { - if (fi.isCanceled()) + if (future && future->isCanceled()) return {}; serialNumber = findAvd(avdName); if (!serialNumber.isEmpty()) - return waitForBooted(serialNumber, fi) ? serialNumber : QString(); + return waitForBooted(serialNumber, future) ? serialNumber : QString(); QThread::sleep(2); } return {}; @@ -339,11 +335,11 @@ bool AndroidAvdManager::isAvdBooted(const QString &device) const } bool AndroidAvdManager::waitForBooted(const QString &serialNumber, - const QFutureInterfaceBase &fi) const + const std::optional> &future) const { // found a serial number, now wait until it's done booting... for (int i = 0; i < 60; ++i) { - if (fi.isCanceled()) + if (future && future->isCanceled()) return false; if (isAvdBooted(serialNumber)) return true; diff --git a/src/plugins/android/androidavdmanager.h b/src/plugins/android/androidavdmanager.h index cad3a2efe73..545dedbfe21 100644 --- a/src/plugins/android/androidavdmanager.h +++ b/src/plugins/android/androidavdmanager.h @@ -4,8 +4,9 @@ #include "androidconfigurations.h" -#include -#include +#include + +#include namespace Android::Internal { @@ -22,14 +23,14 @@ public: QString startAvd(const QString &name) const; bool startAvdAsync(const QString &avdName) const; QString findAvd(const QString &avdName) const; - QString waitForAvd(const QString &avdName, const QFutureInterfaceBase &fi = {}) const; + QString waitForAvd(const QString &avdName, const std::optional> &future = {}) const; bool isAvdBooted(const QString &device) const; static bool avdManagerCommand(const AndroidConfig &config, const QStringList &args, QString *output); private: - bool waitForBooted(const QString &serialNumber, const QFutureInterfaceBase &fi = {}) const; + bool waitForBooted(const QString &serialNumber, const std::optional> &future = {}) const; private: const AndroidConfig &m_config; diff --git a/src/plugins/android/androiddeployqtstep.cpp b/src/plugins/android/androiddeployqtstep.cpp index c305987a502..120a89b33b1 100644 --- a/src/plugins/android/androiddeployqtstep.cpp +++ b/src/plugins/android/androiddeployqtstep.cpp @@ -404,7 +404,8 @@ void AndroidDeployQtStep::slotAskForUninstall(DeployErrorCode errorCode) void AndroidDeployQtStep::runImpl(QFutureInterface &fi) { if (!m_avdName.isEmpty()) { - QString serialNumber = AndroidAvdManager().waitForAvd(m_avdName, fi); + const QString serialNumber = AndroidAvdManager().waitForAvd(m_avdName, + QFuture(fi.future())); qCDebug(deployStepLog) << "Deploying to AVD:" << m_avdName << serialNumber; if (serialNumber.isEmpty()) { reportWarningOrError(Tr::tr("The deployment AVD \"%1\" cannot be started.")