aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/android/androidsdkmanager.cpp
diff options
context:
space:
mode:
authorJarek Kobus <[email protected]>2024-05-02 14:43:08 +0200
committerJarek Kobus <[email protected]>2024-05-03 14:03:05 +0000
commit5b7dbf129de1a57dc07118c68ff7c30f315bb755 (patch)
tree093c8590b6746ec250b53a51ceb80ddd1dc39d44 /src/plugins/android/androidsdkmanager.cpp
parentf0ea3a0db5166c0c2fb38f4aff635cbbbdf8a5a4 (diff)
Android: Reuse recipes
Change-Id: I9b4a0fdc793a5eb2ea80be38f1a48b51a6bdeeb1 Reviewed-by: Alessandro Portale <[email protected]>
Diffstat (limited to 'src/plugins/android/androidsdkmanager.cpp')
-rw-r--r--src/plugins/android/androidsdkmanager.cpp68
1 files changed, 66 insertions, 2 deletions
diff --git a/src/plugins/android/androidsdkmanager.cpp b/src/plugins/android/androidsdkmanager.cpp
index 173a4af9f3a..181cdec183e 100644
--- a/src/plugins/android/androidsdkmanager.cpp
+++ b/src/plugins/android/androidsdkmanager.cpp
@@ -21,6 +21,7 @@
#include <QFutureWatcher>
#include <QDialogButtonBox>
#include <QLoggingCategory>
+#include <QMessageBox>
#include <QPlainTextEdit>
#include <QProgressBar>
#include <QReadWriteLock>
@@ -467,14 +468,16 @@ public:
void reloadSdkPackages();
void clearPackages();
+ void runDialogRecipe(const Storage<DialogStorage> &dialogStorage,
+ const GroupItem &licenseRecipe, const GroupItem &continuationRecipe);
+
AndroidSdkManager &m_sdkManager;
AndroidSdkPackageList m_allPackages;
FilePath lastSdkManagerPath;
QByteArray m_licenseUserInput;
mutable QReadWriteLock m_licenseInputLock;
-
-public:
bool m_packageListingSuccessful = false;
+ TaskTreeRunner m_taskTreeRunner;
};
AndroidSdkManager::AndroidSdkManager()
@@ -927,6 +930,67 @@ void AndroidSdkManagerPrivate::clearPackages()
m_allPackages.clear();
}
+void AndroidSdkManagerPrivate::runDialogRecipe(const Storage<DialogStorage> &dialogStorage,
+ const GroupItem &licensesRecipe,
+ const GroupItem &continuationRecipe)
+{
+ const auto onCancelSetup = [dialogStorage] {
+ return std::make_pair(dialogStorage->m_dialog.get(), &QDialog::rejected);
+ };
+ const Group root {
+ dialogStorage,
+ Group {
+ licensesRecipe,
+ Sync([dialogStorage] { dialogStorage->m_dialog->setQuestionVisible(false); }),
+ continuationRecipe
+ }.withCancel(onCancelSetup)
+ };
+ m_taskTreeRunner.start(root, {}, [this](DoneWith) {
+ QMetaObject::invokeMethod(&m_sdkManager, &AndroidSdkManager::reloadPackages,
+ Qt::QueuedConnection);
+ });
+}
+
+void AndroidSdkManager::runInstallationChange(const InstallationChange &change,
+ const QString &extraMessage)
+{
+ QString message = Tr::tr("%n Android SDK packages shall be updated.", "", change.count());
+ if (!extraMessage.isEmpty())
+ message.prepend(extraMessage + "\n\n");
+
+ QMessageBox messageDlg(QMessageBox::Information, Tr::tr("Android SDK Changes"),
+ message, QMessageBox::Ok | QMessageBox::Cancel,
+ Core::ICore::dialogParent());
+
+ QString details;
+ if (!change.toUninstall.isEmpty()) {
+ QStringList toUninstall = {Tr::tr("[Packages to be uninstalled:]")};
+ toUninstall += change.toUninstall;
+ details += toUninstall.join("\n ");
+ }
+ if (!change.toInstall.isEmpty()) {
+ if (!change.toUninstall.isEmpty())
+ details.append("\n\n");
+ QStringList toInstall = {Tr::tr("[Packages to be installed:]")};
+ toInstall += change.toInstall;
+ details += toInstall.join("\n ");
+ }
+ messageDlg.setDetailedText(details);
+ if (messageDlg.exec() == QMessageBox::Cancel)
+ return;
+
+ const Storage<DialogStorage> dialogStorage;
+ m_d->runDialogRecipe(dialogStorage,
+ change.toInstall.count() ? licensesRecipe(dialogStorage) : nullItem,
+ installationRecipe(dialogStorage, change));
+}
+
+void AndroidSdkManager::runUpdate()
+{
+ const Storage<DialogStorage> dialogStorage;
+ m_d->runDialogRecipe(dialogStorage, licensesRecipe(dialogStorage), updateRecipe(dialogStorage));
+}
+
} // namespace Internal
} // namespace Android