forked from qt-creator/qt-creator
		
	Change-Id: I2ea6cebd16c09a8a4502f4719d99a9d85e5e7d02 Reviewed-by: Alessandro Portale <alessandro.portale@qt.io>
		
			
				
	
	
		
			334 lines
		
	
	
		
			8.0 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			334 lines
		
	
	
		
			8.0 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
/****************************************************************************
 | 
						|
**
 | 
						|
** Copyright (C) 2017 The Qt Company Ltd.
 | 
						|
** Contact: https://www.qt.io/licensing/
 | 
						|
**
 | 
						|
** This file is part of Qt Creator.
 | 
						|
**
 | 
						|
** Commercial License Usage
 | 
						|
** Licensees holding valid commercial Qt licenses may use this file in
 | 
						|
** accordance with the commercial license agreement provided with the
 | 
						|
** Software or, alternatively, in accordance with the terms contained in
 | 
						|
** a written agreement between you and The Qt Company. For licensing terms
 | 
						|
** and conditions see https://www.qt.io/terms-conditions. For further
 | 
						|
** information use the contact form at https://www.qt.io/contact-us.
 | 
						|
**
 | 
						|
** GNU General Public License Usage
 | 
						|
** Alternatively, this file may be used under the terms of the GNU
 | 
						|
** General Public License version 3 as published by the Free Software
 | 
						|
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
 | 
						|
** included in the packaging of this file. Please review the following
 | 
						|
** information to ensure the GNU General Public License requirements will
 | 
						|
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
 | 
						|
**
 | 
						|
****************************************************************************/
 | 
						|
#include "androidsdkpackage.h"
 | 
						|
 | 
						|
#include <utils/algorithm.h>
 | 
						|
 | 
						|
namespace Android {
 | 
						|
 | 
						|
AndroidSdkPackage::AndroidSdkPackage(const QVersionNumber &version, const QString &sdkStylePathStr,
 | 
						|
                                     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;
 | 
						|
}
 | 
						|
 | 
						|
const Utils::FilePath &AndroidSdkPackage::installedLocation() const
 | 
						|
{
 | 
						|
    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;
 | 
						|
}
 | 
						|
 | 
						|
void AndroidSdkPackage::setInstalledLocation(const Utils::FilePath &path)
 | 
						|
{
 | 
						|
    m_installedLocation = path;
 | 
						|
    if (m_installedLocation.exists())
 | 
						|
        updatePackageDetails();
 | 
						|
}
 | 
						|
 | 
						|
void AndroidSdkPackage::updatePackageDetails()
 | 
						|
{
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
SystemImage::SystemImage(const QVersionNumber &version, const QString &sdkStylePathStr,
 | 
						|
                         const QString &abi, SdkPlatform *platform):
 | 
						|
    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;
 | 
						|
}
 | 
						|
 | 
						|
int SystemImage::apiLevel() const
 | 
						|
{
 | 
						|
    return m_apiLevel;
 | 
						|
}
 | 
						|
 | 
						|
void SystemImage::setApiLevel(const int apiLevel)
 | 
						|
{
 | 
						|
    m_apiLevel = apiLevel;
 | 
						|
}
 | 
						|
 | 
						|
SdkPlatform::SdkPlatform(const QVersionNumber &version, const QString &sdkStylePathStr,
 | 
						|
                         int api, QObject *parent) :
 | 
						|
    AndroidSdkPackage(version, sdkStylePathStr, parent),
 | 
						|
    m_apiLevel(api)
 | 
						|
{
 | 
						|
    setDisplayText(QString("android-%1")
 | 
						|
                   .arg(m_apiLevel != -1 ? QString::number(m_apiLevel) : "Unknown"));
 | 
						|
}
 | 
						|
 | 
						|
SdkPlatform::~SdkPlatform()
 | 
						|
{
 | 
						|
    for (SystemImage *image : qAsConst(m_systemImages))
 | 
						|
        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);
 | 
						|
 | 
						|
    const auto &platform = static_cast<const SdkPlatform &>(other);
 | 
						|
    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)
 | 
						|
{
 | 
						|
    // Ordered insert. Installed images on top with lexical comparison of the display name.
 | 
						|
    auto itr = m_systemImages.begin();
 | 
						|
    while (itr != m_systemImages.end()) {
 | 
						|
        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);
 | 
						|
    image->setPlatform(this);
 | 
						|
}
 | 
						|
 | 
						|
SystemImageList SdkPlatform::systemImages(PackageState state) const
 | 
						|
{
 | 
						|
    return Utils::filtered(m_systemImages, [state](const SystemImage *image) {
 | 
						|
        return image->state() & state;
 | 
						|
    });
 | 
						|
}
 | 
						|
 | 
						|
BuildTools::BuildTools(const QVersionNumber &revision, const QString &sdkStylePathStr,
 | 
						|
                       QObject *parent)
 | 
						|
    : AndroidSdkPackage(revision, sdkStylePathStr, parent)
 | 
						|
{
 | 
						|
}
 | 
						|
 | 
						|
bool BuildTools::isValid() const
 | 
						|
{
 | 
						|
    return true;
 | 
						|
}
 | 
						|
 | 
						|
AndroidSdkPackage::PackageType BuildTools::type() const
 | 
						|
{
 | 
						|
    return AndroidSdkPackage::BuildToolsPackage;
 | 
						|
}
 | 
						|
 | 
						|
SdkTools::SdkTools(const QVersionNumber &revision, const QString &sdkStylePathStr, QObject *parent)
 | 
						|
    : AndroidSdkPackage(revision, sdkStylePathStr, parent)
 | 
						|
{
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
bool SdkTools::isValid() const
 | 
						|
{
 | 
						|
    return true;
 | 
						|
}
 | 
						|
 | 
						|
AndroidSdkPackage::PackageType SdkTools::type() const
 | 
						|
{
 | 
						|
    return AndroidSdkPackage::SdkToolsPackage;
 | 
						|
}
 | 
						|
 | 
						|
PlatformTools::PlatformTools(const QVersionNumber &revision, const QString &sdkStylePathStr,
 | 
						|
                             QObject *parent)
 | 
						|
    : AndroidSdkPackage(revision, sdkStylePathStr, parent)
 | 
						|
{
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
bool PlatformTools::isValid() const
 | 
						|
{
 | 
						|
    return true;
 | 
						|
}
 | 
						|
 | 
						|
AndroidSdkPackage::PackageType PlatformTools::type() const
 | 
						|
{
 | 
						|
    return AndroidSdkPackage::PlatformToolsPackage;
 | 
						|
}
 | 
						|
 | 
						|
EmulatorTools::EmulatorTools(const QVersionNumber &revision, const QString &sdkStylePathStr,
 | 
						|
                             QObject *parent)
 | 
						|
    : AndroidSdkPackage(revision, sdkStylePathStr, parent)
 | 
						|
{
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
bool EmulatorTools::isValid() const
 | 
						|
{
 | 
						|
    return installedLocation().exists();
 | 
						|
}
 | 
						|
 | 
						|
AndroidSdkPackage::PackageType EmulatorTools::type() const
 | 
						|
{
 | 
						|
    return AndroidSdkPackage::EmulatorToolsPackage;
 | 
						|
}
 | 
						|
 | 
						|
ExtraTools::ExtraTools(const QVersionNumber &revision, const QString &sdkStylePathStr,
 | 
						|
                       QObject *parent)
 | 
						|
    : AndroidSdkPackage(revision, sdkStylePathStr, parent)
 | 
						|
{
 | 
						|
}
 | 
						|
 | 
						|
bool ExtraTools::isValid() const
 | 
						|
{
 | 
						|
    return installedLocation().exists();
 | 
						|
}
 | 
						|
 | 
						|
AndroidSdkPackage::PackageType ExtraTools::type() const
 | 
						|
{
 | 
						|
    return AndroidSdkPackage::ExtraToolsPackage;
 | 
						|
}
 | 
						|
 | 
						|
Ndk::Ndk(const QVersionNumber &revision, const QString &sdkStylePathStr, QObject *parent)
 | 
						|
    : AndroidSdkPackage(revision, sdkStylePathStr, parent)
 | 
						|
{
 | 
						|
}
 | 
						|
 | 
						|
bool Ndk::isValid() const
 | 
						|
{
 | 
						|
    return installedLocation().exists();
 | 
						|
}
 | 
						|
 | 
						|
AndroidSdkPackage::PackageType Ndk::type() const
 | 
						|
{
 | 
						|
    return AndroidSdkPackage::NDKPackage;
 | 
						|
}
 | 
						|
 | 
						|
GenericSdkPackage::GenericSdkPackage(const QVersionNumber &revision, const QString &sdkStylePathStr,
 | 
						|
                                     QObject  *parent)
 | 
						|
    : AndroidSdkPackage(revision, sdkStylePathStr, parent)
 | 
						|
{
 | 
						|
}
 | 
						|
 | 
						|
bool GenericSdkPackage::isValid() const
 | 
						|
{
 | 
						|
    return installedLocation().exists();
 | 
						|
}
 | 
						|
 | 
						|
AndroidSdkPackage::PackageType GenericSdkPackage::type() const
 | 
						|
{
 | 
						|
    return AndroidSdkPackage::GenericSdkPackage;
 | 
						|
}
 | 
						|
 | 
						|
} // namespace Android
 |