diff --git a/src/plugins/android/androidavdmanager.cpp b/src/plugins/android/androidavdmanager.cpp index 3b5c6ccf916..c9453bb9084 100644 --- a/src/plugins/android/androidavdmanager.cpp +++ b/src/plugins/android/androidavdmanager.cpp @@ -20,10 +20,10 @@ namespace Android::Internal::AndroidAvdManager { static Q_LOGGING_CATEGORY(avdManagerLog, "qtc.android.avdManager", QtWarningMsg) -QString startAvd(const QString &name) +QString startAvd(const QString &name, const std::optional> &future) { if (!findAvd(name).isEmpty() || startAvdAsync(name)) - return waitForAvd(name); + return waitForAvd(name, future); return {}; } diff --git a/src/plugins/android/androidavdmanager.h b/src/plugins/android/androidavdmanager.h index 5a1f188038c..7f1b094bdd2 100644 --- a/src/plugins/android/androidavdmanager.h +++ b/src/plugins/android/androidavdmanager.h @@ -8,7 +8,7 @@ namespace Android::Internal::AndroidAvdManager { -QString startAvd(const QString &name); +QString startAvd(const QString &name, const std::optional> &future = {}); bool startAvdAsync(const QString &avdName); QString findAvd(const QString &avdName); QString waitForAvd(const QString &avdName, const std::optional> &future = {}); diff --git a/src/plugins/android/androiddevice.cpp b/src/plugins/android/androiddevice.cpp index 4972c653c9d..2e24eae73a8 100644 --- a/src/plugins/android/androiddevice.cpp +++ b/src/plugins/android/androiddevice.cpp @@ -111,15 +111,14 @@ static void startAvd(const IDevice::Ptr &device, QWidget *parent) const AndroidDevice *androidDev = static_cast(device.get()); const QString name = androidDev->avdName(); qCDebug(androidDeviceLog, "Starting Android AVD id \"%s\".", qPrintable(name)); - auto future = Utils::asyncRun([name, device] { - const QString serialNumber = AndroidAvdManager::startAvd(name); + Utils::futureSynchronizer()->addFuture(Utils::asyncRun([name, device](QPromise &promise) { + const QString serialNumber = AndroidAvdManager::startAvd(name, promise.future()); // Mark the AVD as ReadyToUse once we know it's started if (!serialNumber.isEmpty()) { DeviceManager *const devMgr = DeviceManager::instance(); devMgr->setDeviceState(device->id(), IDevice::DeviceReadyToUse); } - }); - // TODO: use future! + })); } static void setEmulatorArguments(QWidget *parent)