aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/android
diff options
context:
space:
mode:
authorAssam Boudjelthia <assam.boudjelthia@qt.io>2021-09-05 19:44:16 +0300
committerAssam Boudjelthia <assam.boudjelthia@qt.io>2021-10-13 14:56:06 +0000
commit78da7e2922274c429bb677abf63157b8ae679d03 (patch)
tree902734cd4f666ae49f724ad863b771b8bcc38e29 /src/plugins/android
parente1a69fccb15a87ffc637898cf2248358edb01258 (diff)
Move sdkmanager's sdk level parsing to AndroidConfig
Both the sdkmanger and avdmanager (maybe more) need to parse the sdk level for packages and devices which may contain letters, make them use the same logic. Change-Id: Iff7fef3a66e00fac11b833f73f2f334a4cf1a766 Reviewed-by: hjk <hjk@qt.io> Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Diffstat (limited to 'src/plugins/android')
-rw-r--r--src/plugins/android/androidconfigurations.cpp22
-rw-r--r--src/plugins/android/androidconfigurations.h1
-rw-r--r--src/plugins/android/androidsdkmanager.cpp26
-rw-r--r--src/plugins/android/avdmanageroutputparser.cpp3
4 files changed, 27 insertions, 25 deletions
diff --git a/src/plugins/android/androidconfigurations.cpp b/src/plugins/android/androidconfigurations.cpp
index c769a744d2..5a09199c9d 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-)(?<apiLevel>[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 09f7ac85f1..db65168896 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 943e371178..eaa6996014 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<AndroidSdkManager::OperationOutput>;
-int platformNameToApiLevel(const QString &platformName)
-{
- int apiLevel = -1;
- QRegularExpression re("(android-)(?<apiLevel>[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<SystemImage *, int> SdkManagerOutputParser::parseSystemImage(const QString
QPair <SystemImage *, int> 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 0ca8a74e73..ac758f41c7 100644
--- a/src/plugins/android/avdmanageroutputparser.cpp
+++ b/src/plugins/android/avdmanageroutputparser.cpp
@@ -24,6 +24,7 @@
****************************************************************************/
#include "avdmanageroutputparser.h"
+#include "androidconfigurations.h"
#include <projectexplorer/projectexplorerconstants.h>
#include <utils/algorithm.h>
@@ -97,7 +98,7 @@ static Utils::optional<AndroidDeviceInfo> 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();