From 14da061c33498401624e985f9c44bfc31a7ca8f7 Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Mon, 5 Aug 2019 14:46:01 +0200 Subject: [PATCH] Android: Warn if sdkmanager could not be run Add a line in the error checking for "SDK manager runs" Fixes: QTCREATORBUG-22626 Change-Id: I63f783b376056a28c106bad1ce8c874acf6897f2 Reviewed-by: Christian Stenger --- src/plugins/android/androidsdkmanager.cpp | 12 +++++++++++- src/plugins/android/androidsdkmanager.h | 2 ++ src/plugins/android/androidsettingswidget.cpp | 7 ++++++- 3 files changed, 19 insertions(+), 2 deletions(-) diff --git a/src/plugins/android/androidsdkmanager.cpp b/src/plugins/android/androidsdkmanager.cpp index f7ba16ea978..df615f27444 100644 --- a/src/plugins/android/androidsdkmanager.cpp +++ b/src/plugins/android/androidsdkmanager.cpp @@ -227,6 +227,9 @@ private: QString m_licenseTextCache; QByteArray m_licenseUserInput; mutable QReadWriteLock m_licenseInputLock; + +public: + bool m_packageListingSuccessful = true; }; /*! @@ -372,6 +375,11 @@ bool AndroidSdkManager::isBusy() const return m_d->m_activeOperation && !m_d->m_activeOperation->isFinished(); } +bool AndroidSdkManager::packageListingSuccessful() const +{ + return m_d->m_packageListingSuccessful; +} + QFuture AndroidSdkManager::availableArguments() const { return Utils::runAsync(&AndroidSdkManagerPrivate::parseCommonArguments, m_d.get()); @@ -806,6 +814,7 @@ void AndroidSdkManagerPrivate::reloadSdkPackages() if (m_config.sdkToolsVersion() < sdkManagerIntroVersion) { // Old Sdk tools. + m_packageListingSuccessful = true; AndroidToolManager toolManager(m_config); auto toAndroidSdkPackages = [](SdkPlatform *p) -> AndroidSdkPackage *{ return p; @@ -815,7 +824,8 @@ void AndroidSdkManagerPrivate::reloadSdkPackages() QString packageListing; QStringList args({"--list", "--verbose"}); args << m_config.sdkManagerToolArgs(); - if (sdkManagerCommand(m_config, args, &packageListing)) { + m_packageListingSuccessful = sdkManagerCommand(m_config, args, &packageListing); + if (m_packageListingSuccessful) { SdkManagerOutputParser parser(m_allPackages); parser.parsePackageListing(packageListing); } diff --git a/src/plugins/android/androidsdkmanager.h b/src/plugins/android/androidsdkmanager.h index 35b9dd96ad4..a78a9fbaab9 100644 --- a/src/plugins/android/androidsdkmanager.h +++ b/src/plugins/android/androidsdkmanager.h @@ -78,6 +78,8 @@ public: void reloadPackages(bool forceReload = false); bool isBusy() const; + bool packageListingSuccessful() const; + QFuture availableArguments() const; QFuture updateAll(); QFuture update(const QStringList &install, const QStringList &uninstall); diff --git a/src/plugins/android/androidsettingswidget.cpp b/src/plugins/android/androidsettingswidget.cpp index d6bb4bfa96c..0233e940fb9 100644 --- a/src/plugins/android/androidsettingswidget.cpp +++ b/src/plugins/android/androidsettingswidget.cpp @@ -76,6 +76,7 @@ enum AndroidValidation { SdkToolsInstalledRow, PlatformToolsInstalledRow, BuildToolsInstalledRow, + SdkManagerSuccessfulRow, PlatformSdkInstalledRow, NdkPathExistsRow, NdkDirStructureRow, @@ -259,6 +260,8 @@ AndroidSettingsWidget::AndroidSettingsWidget(QWidget *parent) androidValidationPoints[SdkPathWritableRow] = tr("Android SDK path writable."); androidValidationPoints[SdkToolsInstalledRow] = tr("SDK tools installed."); androidValidationPoints[PlatformToolsInstalledRow] = tr("Platform tools installed."); + androidValidationPoints[SdkManagerSuccessfulRow] = tr( + "SDK manager runs (requires exactly Java 1.8)."); androidValidationPoints[BuildToolsInstalledRow] = tr("Build tools installed."); androidValidationPoints[PlatformSdkInstalledRow] = tr("Platform SDK installed."); androidValidationPoints[NdkPathExistsRow] = tr("Android NDK path exists."); @@ -425,12 +428,14 @@ void AndroidSettingsWidget::validateSdk() summaryWidget->setPointValid(BuildToolsInstalledRow, !m_androidConfig.buildToolsVersion().isNull()); + summaryWidget->setPointValid(SdkManagerSuccessfulRow, m_sdkManager->packageListingSuccessful()); // installedSdkPlatforms should not trigger a package reload as validate SDK is only called // after AndroidSdkManager::packageReloadFinished. summaryWidget->setPointValid(PlatformSdkInstalledRow, !m_sdkManager->installedSdkPlatforms().isEmpty()); updateUI(); - bool sdkToolsOk = summaryWidget->rowsOk({SdkPathExistsRow, SdkPathWritableRow, SdkToolsInstalledRow}); + bool sdkToolsOk = summaryWidget->rowsOk( + {SdkPathExistsRow, SdkPathWritableRow, SdkToolsInstalledRow, SdkManagerSuccessfulRow}); bool componentsOk = summaryWidget->rowsOk({PlatformToolsInstalledRow, BuildToolsInstalledRow, PlatformSdkInstalledRow});