diff --git a/src/plugins/android/androidconfigurations.cpp b/src/plugins/android/androidconfigurations.cpp index c769a744d26..5a09199c9de 100644 --- a/src/plugins/android/androidconfigurations.cpp +++ b/src/plugins/android/androidconfigurations.cpp @@ -418,6 +418,28 @@ QString AndroidConfig::apiLevelNameFor(const SdkPlatform *platform) QString("android-%1").arg(platform->apiLevel()) : ""; } +int AndroidConfig::platformNameToApiLevel(const QString &platformName) +{ + int apiLevel = -1; + static const QRegularExpression re("(android-)(?[0-9A-Z]{1,})", + QRegularExpression::CaseInsensitiveOption); + QRegularExpressionMatch match = re.match(platformName); + if (match.hasMatch()) { + QString apiLevelStr = match.captured("apiLevel"); + bool isUInt; + apiLevel = apiLevelStr.toUInt(&isUInt); + if (!isUInt) { + if (apiLevelStr == 'Q') + apiLevel = 29; + else if (apiLevelStr == 'R') + apiLevel = 30; + else if (apiLevelStr == 'S') + apiLevel = 31; + } + } + return apiLevel; +} + bool AndroidConfig::isCmdlineSdkToolsInstalled() const { QString toolPath("cmdline-tools/latest/bin/sdkmanager"); diff --git a/src/plugins/android/androidconfigurations.h b/src/plugins/android/androidconfigurations.h index 09f7ac85f1d..db65168896e 100644 --- a/src/plugins/android/androidconfigurations.h +++ b/src/plugins/android/androidconfigurations.h @@ -91,6 +91,7 @@ public: static QStringList apiLevelNamesFor(const SdkPlatformList &platforms); static QString apiLevelNameFor(const SdkPlatform *platform); + static int platformNameToApiLevel(const QString &platformName); Utils::FilePath sdkLocation() const; void setSdkLocation(const Utils::FilePath &sdkLocation); diff --git a/src/plugins/android/androidsdkmanager.cpp b/src/plugins/android/androidsdkmanager.cpp index 943e371178a..eaa6996014a 100644 --- a/src/plugins/android/androidsdkmanager.cpp +++ b/src/plugins/android/androidsdkmanager.cpp @@ -69,28 +69,6 @@ Q_GLOBAL_STATIC_WITH_ARGS(QRegularExpression, assertionReg, using namespace Utils; using SdkCmdFutureInterface = QFutureInterface; -int platformNameToApiLevel(const QString &platformName) -{ - int apiLevel = -1; - QRegularExpression re("(android-)(?[0-9A-Z]{1,})", - QRegularExpression::CaseInsensitiveOption); - QRegularExpressionMatch match = re.match(platformName); - if (match.hasMatch()) { - QString apiLevelStr = match.captured("apiLevel"); - bool isUInt; - apiLevel = apiLevelStr.toUInt(&isUInt); - if (!isUInt) { - if (apiLevelStr == 'Q') - apiLevel = 29; - else if (apiLevelStr == 'R') - apiLevel = 30; - else if (apiLevelStr == 'S') - apiLevel = 31; - } - } - return apiLevel; -} - /*! Parses the \a line for a [spaces]key[spaces]value[spaces] pattern and returns \c true if \a key is found, false otherwise. Result is copied into \a value. @@ -714,7 +692,7 @@ AndroidSdkPackage *SdkManagerOutputParser::parsePlatform(const QStringList &data SdkPlatform *platform = nullptr; GenericPackageData packageData; if (parseAbstractData(packageData, data, 2, "Platform")) { - int apiLevel = platformNameToApiLevel(packageData.headerParts.at(1)); + const int apiLevel = AndroidConfig::platformNameToApiLevel(packageData.headerParts.at(1)); if (apiLevel == -1) { qCDebug(sdkManagerLog) << "Platform: Cannot parse api level:"<< data; return nullptr; @@ -734,7 +712,7 @@ QPair SdkManagerOutputParser::parseSystemImage(const QString QPair result(nullptr, -1); GenericPackageData packageData; if (parseAbstractData(packageData, data, 4, "System-image")) { - int apiLevel = platformNameToApiLevel(packageData.headerParts.at(1)); + const int apiLevel = AndroidConfig::platformNameToApiLevel(packageData.headerParts.at(1)); if (apiLevel == -1) { qCDebug(sdkManagerLog) << "System-image: Cannot parse api level:"<< data; return result; diff --git a/src/plugins/android/avdmanageroutputparser.cpp b/src/plugins/android/avdmanageroutputparser.cpp index 0ca8a74e734..ac758f41c7c 100644 --- a/src/plugins/android/avdmanageroutputparser.cpp +++ b/src/plugins/android/avdmanageroutputparser.cpp @@ -24,6 +24,7 @@ ****************************************************************************/ #include "avdmanageroutputparser.h" +#include "androidconfigurations.h" #include #include @@ -97,7 +98,7 @@ static Utils::optional parseAvd(const QStringList &deviceInfo QSettings avdInfo(avdInfoFile.toString(), QSettings::IniFormat); value = avdInfo.value(avdInfoTargetKey).toString(); if (!value.isEmpty()) - avd.sdk = value.section('-', -1).toInt(); + avd.sdk = AndroidConfig::platformNameToApiLevel(value); else qCDebug(avdOutputParserLog) << "Avd Parsing: Cannot find sdk API:" << avdInfoFile.toString(); diff --git a/tests/auto/android/CMakeLists.txt b/tests/auto/android/CMakeLists.txt index 8f328fe98e2..bf132fe599a 100644 --- a/tests/auto/android/CMakeLists.txt +++ b/tests/auto/android/CMakeLists.txt @@ -1,5 +1,6 @@ add_qtc_test(tst_avdmanageroutputparser DEPENDS Utils + PLUGIN_DEPENDS Android INCLUDES "${PROJECT_SOURCE_DIR}/src/plugins" "${PROJECT_SOURCE_DIR}/src/plugins/android" @@ -9,6 +10,8 @@ add_qtc_test(tst_avdmanageroutputparser "${PROJECT_SOURCE_DIR}/src/plugins/android/avdmanageroutputparser.h" "${PROJECT_SOURCE_DIR}/src/plugins/android/androiddeviceinfo.cpp" "${PROJECT_SOURCE_DIR}/src/plugins/android/androiddeviceinfo.h" + "${PROJECT_SOURCE_DIR}/src/plugins/android/androidmanager.cpp" + "${PROJECT_SOURCE_DIR}/src/plugins/android/androidmanager.h" ) qtc_add_resources(tst_avdmanageroutputparser tst_avdmanageroutputparser_rcc