2022-08-19 15:59:36 +02:00
|
|
|
// Copyright (C) 2017 The Qt Company Ltd.
|
2022-12-21 10:12:09 +01:00
|
|
|
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
|
2017-08-18 08:22:34 +02:00
|
|
|
#include "androidsdkpackage.h"
|
|
|
|
|
|
2019-01-08 16:05:57 +01:00
|
|
|
#include <utils/algorithm.h>
|
2017-08-30 13:35:07 +02:00
|
|
|
|
2017-08-18 08:22:34 +02:00
|
|
|
namespace Android {
|
|
|
|
|
|
2021-05-28 18:22:44 +03:00
|
|
|
AndroidSdkPackage::AndroidSdkPackage(const QVersionNumber &version, const QString &sdkStylePathStr,
|
2017-08-18 08:22:34 +02:00
|
|
|
QObject *parent) :
|
|
|
|
|
QObject(parent),
|
|
|
|
|
m_revision(version),
|
|
|
|
|
m_sdkStylePath(sdkStylePathStr)
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool AndroidSdkPackage::operator <(const AndroidSdkPackage &other) const
|
|
|
|
|
{
|
|
|
|
|
if (typeid(*this) != typeid(other))
|
|
|
|
|
return type() < other.type();
|
|
|
|
|
return displayText() < other.displayText();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
QString AndroidSdkPackage::displayText() const
|
|
|
|
|
{
|
|
|
|
|
return m_displayText;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
QString AndroidSdkPackage::descriptionText() const
|
|
|
|
|
{
|
|
|
|
|
return m_descriptionText;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const QVersionNumber &AndroidSdkPackage::revision() const
|
|
|
|
|
{
|
|
|
|
|
return m_revision;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
AndroidSdkPackage::PackageState AndroidSdkPackage::state() const
|
|
|
|
|
{
|
|
|
|
|
return m_state;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const QString &AndroidSdkPackage::sdkStylePath() const
|
|
|
|
|
{
|
|
|
|
|
return m_sdkStylePath;
|
|
|
|
|
}
|
|
|
|
|
|
2019-05-28 13:49:26 +02:00
|
|
|
const Utils::FilePath &AndroidSdkPackage::installedLocation() const
|
2017-08-18 08:22:34 +02:00
|
|
|
{
|
|
|
|
|
return m_installedLocation;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void AndroidSdkPackage::setDisplayText(const QString &str)
|
|
|
|
|
{
|
|
|
|
|
m_displayText = str;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void AndroidSdkPackage::setDescriptionText(const QString &str)
|
|
|
|
|
{
|
|
|
|
|
m_descriptionText = str;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void AndroidSdkPackage::setState(AndroidSdkPackage::PackageState state)
|
|
|
|
|
{
|
|
|
|
|
m_state = state;
|
|
|
|
|
}
|
|
|
|
|
|
2019-05-28 13:49:26 +02:00
|
|
|
void AndroidSdkPackage::setInstalledLocation(const Utils::FilePath &path)
|
2017-08-18 08:22:34 +02:00
|
|
|
{
|
|
|
|
|
m_installedLocation = path;
|
|
|
|
|
if (m_installedLocation.exists())
|
|
|
|
|
updatePackageDetails();
|
|
|
|
|
}
|
|
|
|
|
|
2023-01-17 16:03:23 +01:00
|
|
|
void AndroidSdkPackage::setExtension(const QString &extension)
|
|
|
|
|
{
|
|
|
|
|
m_extension = extension;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
QString AndroidSdkPackage::extension() const
|
|
|
|
|
{
|
|
|
|
|
return m_extension;
|
|
|
|
|
}
|
|
|
|
|
|
2017-08-18 08:22:34 +02:00
|
|
|
void AndroidSdkPackage::updatePackageDetails()
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
2021-05-28 18:22:44 +03:00
|
|
|
SystemImage::SystemImage(const QVersionNumber &version, const QString &sdkStylePathStr,
|
|
|
|
|
const QString &abi, SdkPlatform *platform):
|
2017-08-18 08:22:34 +02:00
|
|
|
AndroidSdkPackage(version, sdkStylePathStr, platform),
|
|
|
|
|
m_platform(platform),
|
|
|
|
|
m_abiName(abi)
|
|
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool SystemImage::isValid() const
|
|
|
|
|
{
|
|
|
|
|
return m_platform && m_platform->isValid();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
AndroidSdkPackage::PackageType SystemImage::type() const
|
|
|
|
|
{
|
|
|
|
|
return SystemImagePackage;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const QString &SystemImage::abiName() const
|
|
|
|
|
{
|
|
|
|
|
return m_abiName;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const SdkPlatform *SystemImage::platform() const
|
|
|
|
|
{
|
|
|
|
|
return m_platform.data();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void SystemImage::setPlatform(SdkPlatform *platform)
|
|
|
|
|
{
|
|
|
|
|
m_platform = platform;
|
|
|
|
|
}
|
|
|
|
|
|
2020-01-08 14:55:16 +02:00
|
|
|
int SystemImage::apiLevel() const
|
|
|
|
|
{
|
|
|
|
|
return m_apiLevel;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void SystemImage::setApiLevel(const int apiLevel)
|
|
|
|
|
{
|
|
|
|
|
m_apiLevel = apiLevel;
|
|
|
|
|
}
|
|
|
|
|
|
2021-05-28 18:22:44 +03:00
|
|
|
SdkPlatform::SdkPlatform(const QVersionNumber &version, const QString &sdkStylePathStr,
|
|
|
|
|
int api, QObject *parent) :
|
2017-08-18 08:22:34 +02:00
|
|
|
AndroidSdkPackage(version, sdkStylePathStr, parent),
|
|
|
|
|
m_apiLevel(api)
|
|
|
|
|
{
|
|
|
|
|
setDisplayText(QString("android-%1")
|
|
|
|
|
.arg(m_apiLevel != -1 ? QString::number(m_apiLevel) : "Unknown"));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
SdkPlatform::~SdkPlatform()
|
|
|
|
|
{
|
2022-10-07 14:46:06 +02:00
|
|
|
for (SystemImage *image : std::as_const(m_systemImages))
|
2017-08-18 08:22:34 +02:00
|
|
|
delete image;
|
|
|
|
|
m_systemImages.clear();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool SdkPlatform::isValid() const
|
|
|
|
|
{
|
|
|
|
|
return m_apiLevel != -1;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
AndroidSdkPackage::PackageType SdkPlatform::type() const
|
|
|
|
|
{
|
|
|
|
|
return SdkPlatformPackage;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool SdkPlatform::operator <(const AndroidSdkPackage &other) const
|
|
|
|
|
{
|
|
|
|
|
if (typeid(*this) != typeid(other))
|
|
|
|
|
return AndroidSdkPackage::operator <(other);
|
|
|
|
|
|
2018-07-25 12:19:15 +02:00
|
|
|
const auto &platform = static_cast<const SdkPlatform &>(other);
|
2017-08-18 08:22:34 +02:00
|
|
|
if (platform.m_apiLevel == m_apiLevel)
|
|
|
|
|
return AndroidSdkPackage::operator <(other);
|
|
|
|
|
|
|
|
|
|
return platform.m_apiLevel < m_apiLevel;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
int SdkPlatform::apiLevel() const
|
|
|
|
|
{
|
|
|
|
|
return m_apiLevel;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
QVersionNumber SdkPlatform::version() const
|
|
|
|
|
{
|
|
|
|
|
return m_version;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void SdkPlatform::addSystemImage(SystemImage *image)
|
|
|
|
|
{
|
2017-09-18 13:48:00 +02:00
|
|
|
// Ordered insert. Installed images on top with lexical comparison of the display name.
|
2022-11-29 21:11:25 +01:00
|
|
|
auto itr = m_systemImages.cbegin();
|
|
|
|
|
while (itr != m_systemImages.cend()) {
|
2017-09-18 13:48:00 +02:00
|
|
|
SystemImage *currentImage = *itr;
|
|
|
|
|
if (currentImage->state() == image->state()) {
|
|
|
|
|
if (currentImage->displayText() > image->displayText())
|
|
|
|
|
break;
|
|
|
|
|
} else if (currentImage->state() > image->state()) {
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
++itr;
|
|
|
|
|
}
|
|
|
|
|
m_systemImages.insert(itr, image);
|
2017-08-18 08:22:34 +02:00
|
|
|
image->setPlatform(this);
|
|
|
|
|
}
|
|
|
|
|
|
2017-08-30 13:35:07 +02:00
|
|
|
SystemImageList SdkPlatform::systemImages(PackageState state) const
|
2017-08-18 08:22:34 +02:00
|
|
|
{
|
2017-08-30 13:35:07 +02:00
|
|
|
return Utils::filtered(m_systemImages, [state](const SystemImage *image) {
|
|
|
|
|
return image->state() & state;
|
|
|
|
|
});
|
2017-08-18 08:22:34 +02:00
|
|
|
}
|
|
|
|
|
|
2021-05-28 18:22:44 +03:00
|
|
|
BuildTools::BuildTools(const QVersionNumber &revision, const QString &sdkStylePathStr,
|
|
|
|
|
QObject *parent)
|
|
|
|
|
: AndroidSdkPackage(revision, sdkStylePathStr, parent)
|
2017-08-31 10:34:46 +02:00
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool BuildTools::isValid() const
|
|
|
|
|
{
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
AndroidSdkPackage::PackageType BuildTools::type() const
|
|
|
|
|
{
|
|
|
|
|
return AndroidSdkPackage::BuildToolsPackage;
|
|
|
|
|
}
|
|
|
|
|
|
2021-05-28 18:22:44 +03:00
|
|
|
SdkTools::SdkTools(const QVersionNumber &revision, const QString &sdkStylePathStr, QObject *parent)
|
|
|
|
|
: AndroidSdkPackage(revision, sdkStylePathStr, parent)
|
2017-08-31 10:34:46 +02:00
|
|
|
{
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool SdkTools::isValid() const
|
|
|
|
|
{
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
AndroidSdkPackage::PackageType SdkTools::type() const
|
|
|
|
|
{
|
|
|
|
|
return AndroidSdkPackage::SdkToolsPackage;
|
|
|
|
|
}
|
|
|
|
|
|
2021-05-28 18:22:44 +03:00
|
|
|
PlatformTools::PlatformTools(const QVersionNumber &revision, const QString &sdkStylePathStr,
|
|
|
|
|
QObject *parent)
|
|
|
|
|
: AndroidSdkPackage(revision, sdkStylePathStr, parent)
|
2017-08-31 10:34:46 +02:00
|
|
|
{
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool PlatformTools::isValid() const
|
|
|
|
|
{
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
AndroidSdkPackage::PackageType PlatformTools::type() const
|
|
|
|
|
{
|
|
|
|
|
return AndroidSdkPackage::PlatformToolsPackage;
|
|
|
|
|
}
|
|
|
|
|
|
2021-05-28 18:22:44 +03:00
|
|
|
EmulatorTools::EmulatorTools(const QVersionNumber &revision, const QString &sdkStylePathStr,
|
|
|
|
|
QObject *parent)
|
|
|
|
|
: AndroidSdkPackage(revision, sdkStylePathStr, parent)
|
2017-11-20 12:26:19 +01:00
|
|
|
{
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool EmulatorTools::isValid() const
|
|
|
|
|
{
|
|
|
|
|
return installedLocation().exists();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
AndroidSdkPackage::PackageType EmulatorTools::type() const
|
|
|
|
|
{
|
|
|
|
|
return AndroidSdkPackage::EmulatorToolsPackage;
|
|
|
|
|
}
|
|
|
|
|
|
2021-05-28 18:22:44 +03:00
|
|
|
ExtraTools::ExtraTools(const QVersionNumber &revision, const QString &sdkStylePathStr,
|
|
|
|
|
QObject *parent)
|
|
|
|
|
: AndroidSdkPackage(revision, sdkStylePathStr, parent)
|
2018-11-21 08:07:07 +01:00
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool ExtraTools::isValid() const
|
|
|
|
|
{
|
|
|
|
|
return installedLocation().exists();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
AndroidSdkPackage::PackageType ExtraTools::type() const
|
|
|
|
|
{
|
|
|
|
|
return AndroidSdkPackage::ExtraToolsPackage;
|
|
|
|
|
}
|
|
|
|
|
|
2021-05-28 18:22:44 +03:00
|
|
|
Ndk::Ndk(const QVersionNumber &revision, const QString &sdkStylePathStr, QObject *parent)
|
|
|
|
|
: AndroidSdkPackage(revision, sdkStylePathStr, parent)
|
2019-12-23 16:13:23 +02:00
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool Ndk::isValid() const
|
|
|
|
|
{
|
|
|
|
|
return installedLocation().exists();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
AndroidSdkPackage::PackageType Ndk::type() const
|
|
|
|
|
{
|
|
|
|
|
return AndroidSdkPackage::NDKPackage;
|
|
|
|
|
}
|
|
|
|
|
|
2021-05-28 18:22:44 +03:00
|
|
|
GenericSdkPackage::GenericSdkPackage(const QVersionNumber &revision, const QString &sdkStylePathStr,
|
|
|
|
|
QObject *parent)
|
|
|
|
|
: AndroidSdkPackage(revision, sdkStylePathStr, parent)
|
2020-05-02 14:40:05 +03:00
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool GenericSdkPackage::isValid() const
|
|
|
|
|
{
|
|
|
|
|
return installedLocation().exists();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
AndroidSdkPackage::PackageType GenericSdkPackage::type() const
|
|
|
|
|
{
|
|
|
|
|
return AndroidSdkPackage::GenericSdkPackage;
|
|
|
|
|
}
|
|
|
|
|
|
2017-08-18 08:22:34 +02:00
|
|
|
} // namespace Android
|