Android: Enable emulator tool installation

Let Android sdk manager UI install the emulator tool. AVD needs this
tool to manage AVD's.

Task-number: QTCREATORBUG-19332
Change-Id: If836c511ca4a5673470d42c14115afa21b1b96fd
Reviewed-by: Tobias Hunger <tobias.hunger@qt.io>
This commit is contained in:
Vikas Pachdha
2017-11-20 12:26:19 +01:00
parent 216e40b3f0
commit 59e3d9af1e
3 changed files with 53 additions and 2 deletions

View File

@@ -260,6 +260,7 @@ public:
BuildToolsMarker = 0x080, BuildToolsMarker = 0x080,
SdkToolsMarker = 0x100, SdkToolsMarker = 0x100,
PlatformToolsMarker = 0x200, PlatformToolsMarker = 0x200,
EmulatorToolsMarker = 0x400,
SectionMarkers = InstalledPackagesMarker | AvailablePackagesMarkers | AvailableUpdatesMarker SectionMarkers = InstalledPackagesMarker | AvailablePackagesMarkers | AvailableUpdatesMarker
}; };
@@ -278,6 +279,7 @@ private:
BuildTools *parseBuildToolsPackage(const QStringList &data) const; BuildTools *parseBuildToolsPackage(const QStringList &data) const;
SdkTools *parseSdkToolsPackage(const QStringList &data) const; SdkTools *parseSdkToolsPackage(const QStringList &data) const;
PlatformTools *parsePlatformToolsPackage(const QStringList &data) const; PlatformTools *parsePlatformToolsPackage(const QStringList &data) const;
EmulatorTools *parseEmulatorToolsPackage(const QStringList &data) const;
MarkerTag parseMarkers(const QString &line); MarkerTag parseMarkers(const QString &line);
MarkerTag m_currentSection = MarkerTag::None; MarkerTag m_currentSection = MarkerTag::None;
@@ -292,7 +294,8 @@ const std::map<SdkManagerOutputParser::MarkerTag, const char *> markerTags {
{SdkManagerOutputParser::MarkerTag::SystemImageMarker, "system-images"}, {SdkManagerOutputParser::MarkerTag::SystemImageMarker, "system-images"},
{SdkManagerOutputParser::MarkerTag::BuildToolsMarker, "build-tools"}, {SdkManagerOutputParser::MarkerTag::BuildToolsMarker, "build-tools"},
{SdkManagerOutputParser::MarkerTag::SdkToolsMarker, "tools"}, {SdkManagerOutputParser::MarkerTag::SdkToolsMarker, "tools"},
{SdkManagerOutputParser::MarkerTag::PlatformToolsMarker, "platform-tools"} {SdkManagerOutputParser::MarkerTag::PlatformToolsMarker, "platform-tools"},
{SdkManagerOutputParser::MarkerTag::EmulatorToolsMarker, "emulator"}
}; };
AndroidSdkManager::AndroidSdkManager(const AndroidConfig &config, QObject *parent): AndroidSdkManager::AndroidSdkManager(const AndroidConfig &config, QObject *parent):
@@ -543,6 +546,10 @@ void SdkManagerOutputParser::parsePackageData(MarkerTag packageMarker, const QSt
createPackage(&SdkManagerOutputParser::parsePlatformToolsPackage); createPackage(&SdkManagerOutputParser::parsePlatformToolsPackage);
break; break;
case MarkerTag::EmulatorToolsMarker:
createPackage(&SdkManagerOutputParser::parseEmulatorToolsPackage);
break;
case MarkerTag::PlatformMarker: case MarkerTag::PlatformMarker:
createPackage(&SdkManagerOutputParser::parsePlatform); createPackage(&SdkManagerOutputParser::parsePlatform);
break; break;
@@ -705,6 +712,22 @@ PlatformTools *SdkManagerOutputParser::parsePlatformToolsPackage(const QStringLi
return platformTools; return platformTools;
} }
EmulatorTools *SdkManagerOutputParser::parseEmulatorToolsPackage(const QStringList &data) const
{
EmulatorTools *emulatorTools = nullptr;
GenericPackageData packageData;
if (parseAbstractData(packageData, data, 1, "Emulator-tools")) {
emulatorTools = new EmulatorTools(packageData.revision, data.at(0));
emulatorTools->setDescriptionText(packageData.description);
emulatorTools->setDisplayText(packageData.description);
emulatorTools->setInstalledLocation(packageData.installedLocation);
} else {
qCDebug(sdkManagerLog) << "Emulator-tools: Parsing failed. Minimum required data "
"unavailable:" << data;
}
return emulatorTools;
}
SdkManagerOutputParser::MarkerTag SdkManagerOutputParser::parseMarkers(const QString &line) SdkManagerOutputParser::MarkerTag SdkManagerOutputParser::parseMarkers(const QString &line)
{ {
if (line.isEmpty()) if (line.isEmpty())

View File

@@ -253,4 +253,20 @@ AndroidSdkPackage::PackageType PlatformTools::type() const
return AndroidSdkPackage::PlatformToolsPackage; return AndroidSdkPackage::PlatformToolsPackage;
} }
EmulatorTools::EmulatorTools(QVersionNumber revision, QString sdkStylePathStr, QObject *parent):
AndroidSdkPackage(revision, sdkStylePathStr, parent)
{
}
bool EmulatorTools::isValid() const
{
return installedLocation().exists();
}
AndroidSdkPackage::PackageType EmulatorTools::type() const
{
return AndroidSdkPackage::EmulatorToolsPackage;
}
} // namespace Android } // namespace Android

View File

@@ -52,8 +52,9 @@ public:
PlatformToolsPackage = 1 << 3, PlatformToolsPackage = 1 << 3,
SdkPlatformPackage = 1 << 4, SdkPlatformPackage = 1 << 4,
SystemImagePackage = 1 << 5, SystemImagePackage = 1 << 5,
EmulatorToolsPackage = 1 << 6,
AnyValidType = SdkToolsPackage | BuildToolsPackage | PlatformToolsPackage | AnyValidType = SdkToolsPackage | BuildToolsPackage | PlatformToolsPackage |
SdkPlatformPackage | SystemImagePackage SdkPlatformPackage | SystemImagePackage | EmulatorToolsPackage
}; };
enum PackageState { enum PackageState {
@@ -169,6 +170,17 @@ public:
PackageType type() const override; PackageType type() const override;
}; };
class EmulatorTools : public AndroidSdkPackage
{
public:
EmulatorTools(QVersionNumber revision, QString sdkStylePathStr, QObject *parent = nullptr);
// AndroidSdkPackage Overrides
public:
bool isValid() const override;
PackageType type() const override;
};
class SdkTools : public AndroidSdkPackage class SdkTools : public AndroidSdkPackage
{ {
public: public: