diff --git a/src/plugins/android/androidsdkmanager.cpp b/src/plugins/android/androidsdkmanager.cpp index 293094cbbe4..50e4d5e01d8 100644 --- a/src/plugins/android/androidsdkmanager.cpp +++ b/src/plugins/android/androidsdkmanager.cpp @@ -169,8 +169,7 @@ public: void parseCommonArguments(QPromise &promise); void updateInstalled(SdkCmdPromise &fi); - void update(SdkCmdPromise &fi, const QStringList &install, - const QStringList &uninstall); + void update(SdkCmdPromise &fi, const InstallationChange &change); void checkPendingLicense(SdkCmdPromise &fi); void getPendingLicense(SdkCmdPromise &fi); @@ -321,12 +320,11 @@ QFuture AndroidSdkManager::updateAll() return future; } -QFuture -AndroidSdkManager::update(const QStringList &install, const QStringList &uninstall) +QFuture AndroidSdkManager::update(const InstallationChange &change) { if (isBusy()) return QFuture(); - auto future = Utils::asyncRun(&AndroidSdkManagerPrivate::update, m_d.get(), install, uninstall); + auto future = Utils::asyncRun(&AndroidSdkManagerPrivate::update, m_d.get(), change); m_d->addWatcher(future); return future; } @@ -426,12 +424,11 @@ void AndroidSdkManagerPrivate::updateInstalled(SdkCmdPromise &promise) promise.setProgressValue(100); } -void AndroidSdkManagerPrivate::update(SdkCmdPromise &fi, const QStringList &install, - const QStringList &uninstall) +void AndroidSdkManagerPrivate::update(SdkCmdPromise &fi, const InstallationChange &change) { fi.setProgressRange(0, 100); fi.setProgressValue(0); - double progressQuota = 100.0 / (install.count() + uninstall.count()); + double progressQuota = 100.0 / change.count(); int currentProgress = 0; QString installTag = Tr::tr("Installing"); @@ -459,7 +456,7 @@ void AndroidSdkManagerPrivate::update(SdkCmdPromise &fi, const QStringList &inst // Uninstall packages - for (const QString &sdkStylePath : uninstall) { + for (const QString &sdkStylePath : change.toUninstall) { // Uninstall operations are not interptible. We don't want to leave half uninstalled. QStringList args; args << "--uninstall" << sdkStylePath << androidConfig().sdkManagerToolArgs(); @@ -468,7 +465,7 @@ void AndroidSdkManagerPrivate::update(SdkCmdPromise &fi, const QStringList &inst } // Install packages - for (const QString &sdkStylePath : install) { + for (const QString &sdkStylePath : change.toInstall) { QStringList args(sdkStylePath); args << androidConfig().sdkManagerToolArgs(); if (doOperation(sdkStylePath, args, true)) diff --git a/src/plugins/android/androidsdkmanager.h b/src/plugins/android/androidsdkmanager.h index 9e5a080684e..fcae035ab91 100644 --- a/src/plugins/android/androidsdkmanager.h +++ b/src/plugins/android/androidsdkmanager.h @@ -19,6 +19,13 @@ namespace Internal { class AndroidSdkManagerPrivate; +struct InstallationChange +{ + QStringList toInstall; + QStringList toUninstall = {}; + int count() const { return toInstall.count() + toUninstall.count(); } +}; + class AndroidSdkManager : public QObject { Q_OBJECT @@ -65,7 +72,7 @@ public: QFuture availableArguments() const; QFuture updateAll(); - QFuture update(const QStringList &install, const QStringList &uninstall); + QFuture update(const InstallationChange &change); QFuture checkPendingLicenses(); QFuture runLicenseCommand(); diff --git a/src/plugins/android/androidsdkmanagerwidget.cpp b/src/plugins/android/androidsdkmanagerwidget.cpp index 6eebe0adb46..e8c46efcdcd 100644 --- a/src/plugins/android/androidsdkmanagerwidget.cpp +++ b/src/plugins/android/androidsdkmanagerwidget.cpp @@ -452,7 +452,7 @@ void AndroidSdkManagerWidget::beginExecution() Tr::tr("preferences") : Tr::tr("options")), LogMessageFormat); - addPackageFuture(m_sdkManager->update(installSdkPaths, uninstallSdkPaths)); + addPackageFuture(m_sdkManager->update({installSdkPaths, uninstallSdkPaths})); } void AndroidSdkManagerWidget::beginUpdate()