1 /****************************************************************************
2 **
3 ** Copyright (C) 2017 The Qt Company Ltd.
4 ** Contact: https://www.qt.io/licensing/
5 **
6 ** This file is part of Qt Creator.
7 **
8 ** Commercial License Usage
9 ** Licensees holding valid commercial Qt licenses may use this file in
10 ** accordance with the commercial license agreement provided with the
11 ** Software or, alternatively, in accordance with the terms contained in
12 ** a written agreement between you and The Qt Company. For licensing terms
13 ** and conditions see https://www.qt.io/terms-conditions. For further
14 ** information use the contact form at https://www.qt.io/contact-us.
15 **
16 ** GNU General Public License Usage
17 ** Alternatively, this file may be used under the terms of the GNU
18 ** General Public License version 3 as published by the Free Software
19 ** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
20 ** included in the packaging of this file. Please review the following
21 ** information to ensure the GNU General Public License requirements will
22 ** be met: https://www.gnu.org/licenses/gpl-3.0.html.
23 **
24 ****************************************************************************/
25 #include "androidsdkpackage.h"
26
27 #include <utils/algorithm.h>
28
29 namespace Android {
30
AndroidSdkPackage(const QVersionNumber & version,const QString & sdkStylePathStr,QObject * parent)31 AndroidSdkPackage::AndroidSdkPackage(const QVersionNumber &version, const QString &sdkStylePathStr,
32 QObject *parent) :
33 QObject(parent),
34 m_revision(version),
35 m_sdkStylePath(sdkStylePathStr)
36 {
37
38 }
39
operator <(const AndroidSdkPackage & other) const40 bool AndroidSdkPackage::operator <(const AndroidSdkPackage &other) const
41 {
42 if (typeid(*this) != typeid(other))
43 return type() < other.type();
44 return displayText() < other.displayText();
45 }
46
displayText() const47 QString AndroidSdkPackage::displayText() const
48 {
49 return m_displayText;
50 }
51
descriptionText() const52 QString AndroidSdkPackage::descriptionText() const
53 {
54 return m_descriptionText;
55 }
56
revision() const57 const QVersionNumber &AndroidSdkPackage::revision() const
58 {
59 return m_revision;
60 }
61
state() const62 AndroidSdkPackage::PackageState AndroidSdkPackage::state() const
63 {
64 return m_state;
65 }
66
sdkStylePath() const67 const QString &AndroidSdkPackage::sdkStylePath() const
68 {
69 return m_sdkStylePath;
70 }
71
installedLocation() const72 const Utils::FilePath &AndroidSdkPackage::installedLocation() const
73 {
74 return m_installedLocation;
75 }
76
setDisplayText(const QString & str)77 void AndroidSdkPackage::setDisplayText(const QString &str)
78 {
79 m_displayText = str;
80 }
81
setDescriptionText(const QString & str)82 void AndroidSdkPackage::setDescriptionText(const QString &str)
83 {
84 m_descriptionText = str;
85 }
86
setState(AndroidSdkPackage::PackageState state)87 void AndroidSdkPackage::setState(AndroidSdkPackage::PackageState state)
88 {
89 m_state = state;
90 }
91
setInstalledLocation(const Utils::FilePath & path)92 void AndroidSdkPackage::setInstalledLocation(const Utils::FilePath &path)
93 {
94 m_installedLocation = path;
95 if (m_installedLocation.exists())
96 updatePackageDetails();
97 }
98
updatePackageDetails()99 void AndroidSdkPackage::updatePackageDetails()
100 {
101
102 }
103
SystemImage(const QVersionNumber & version,const QString & sdkStylePathStr,const QString & abi,SdkPlatform * platform)104 SystemImage::SystemImage(const QVersionNumber &version, const QString &sdkStylePathStr,
105 const QString &abi, SdkPlatform *platform):
106 AndroidSdkPackage(version, sdkStylePathStr, platform),
107 m_platform(platform),
108 m_abiName(abi)
109 {
110 }
111
isValid() const112 bool SystemImage::isValid() const
113 {
114 return m_platform && m_platform->isValid();
115 }
116
type() const117 AndroidSdkPackage::PackageType SystemImage::type() const
118 {
119 return SystemImagePackage;
120 }
121
abiName() const122 const QString &SystemImage::abiName() const
123 {
124 return m_abiName;
125 }
126
platform() const127 const SdkPlatform *SystemImage::platform() const
128 {
129 return m_platform.data();
130 }
131
setPlatform(SdkPlatform * platform)132 void SystemImage::setPlatform(SdkPlatform *platform)
133 {
134 m_platform = platform;
135 }
136
apiLevel() const137 int SystemImage::apiLevel() const
138 {
139 return m_apiLevel;
140 }
141
setApiLevel(const int apiLevel)142 void SystemImage::setApiLevel(const int apiLevel)
143 {
144 m_apiLevel = apiLevel;
145 }
146
SdkPlatform(const QVersionNumber & version,const QString & sdkStylePathStr,int api,QObject * parent)147 SdkPlatform::SdkPlatform(const QVersionNumber &version, const QString &sdkStylePathStr,
148 int api, QObject *parent) :
149 AndroidSdkPackage(version, sdkStylePathStr, parent),
150 m_apiLevel(api)
151 {
152 setDisplayText(QString("android-%1")
153 .arg(m_apiLevel != -1 ? QString::number(m_apiLevel) : "Unknown"));
154 }
155
~SdkPlatform()156 SdkPlatform::~SdkPlatform()
157 {
158 for (SystemImage *image : qAsConst(m_systemImages))
159 delete image;
160 m_systemImages.clear();
161 }
162
isValid() const163 bool SdkPlatform::isValid() const
164 {
165 return m_apiLevel != -1;
166 }
167
type() const168 AndroidSdkPackage::PackageType SdkPlatform::type() const
169 {
170 return SdkPlatformPackage;
171 }
172
operator <(const AndroidSdkPackage & other) const173 bool SdkPlatform::operator <(const AndroidSdkPackage &other) const
174 {
175 if (typeid(*this) != typeid(other))
176 return AndroidSdkPackage::operator <(other);
177
178 const auto &platform = static_cast<const SdkPlatform &>(other);
179 if (platform.m_apiLevel == m_apiLevel)
180 return AndroidSdkPackage::operator <(other);
181
182 return platform.m_apiLevel < m_apiLevel;
183 }
184
apiLevel() const185 int SdkPlatform::apiLevel() const
186 {
187 return m_apiLevel;
188 }
189
version() const190 QVersionNumber SdkPlatform::version() const
191 {
192 return m_version;
193 }
194
addSystemImage(SystemImage * image)195 void SdkPlatform::addSystemImage(SystemImage *image)
196 {
197 // Ordered insert. Installed images on top with lexical comparison of the display name.
198 auto itr = m_systemImages.begin();
199 while (itr != m_systemImages.end()) {
200 SystemImage *currentImage = *itr;
201 if (currentImage->state() == image->state()) {
202 if (currentImage->displayText() > image->displayText())
203 break;
204 } else if (currentImage->state() > image->state()) {
205 break;
206 }
207 ++itr;
208 }
209 m_systemImages.insert(itr, image);
210 image->setPlatform(this);
211 }
212
systemImages(PackageState state) const213 SystemImageList SdkPlatform::systemImages(PackageState state) const
214 {
215 return Utils::filtered(m_systemImages, [state](const SystemImage *image) {
216 return image->state() & state;
217 });
218 }
219
BuildTools(const QVersionNumber & revision,const QString & sdkStylePathStr,QObject * parent)220 BuildTools::BuildTools(const QVersionNumber &revision, const QString &sdkStylePathStr,
221 QObject *parent)
222 : AndroidSdkPackage(revision, sdkStylePathStr, parent)
223 {
224 }
225
isValid() const226 bool BuildTools::isValid() const
227 {
228 return true;
229 }
230
type() const231 AndroidSdkPackage::PackageType BuildTools::type() const
232 {
233 return AndroidSdkPackage::BuildToolsPackage;
234 }
235
SdkTools(const QVersionNumber & revision,const QString & sdkStylePathStr,QObject * parent)236 SdkTools::SdkTools(const QVersionNumber &revision, const QString &sdkStylePathStr, QObject *parent)
237 : AndroidSdkPackage(revision, sdkStylePathStr, parent)
238 {
239
240 }
241
isValid() const242 bool SdkTools::isValid() const
243 {
244 return true;
245 }
246
type() const247 AndroidSdkPackage::PackageType SdkTools::type() const
248 {
249 return AndroidSdkPackage::SdkToolsPackage;
250 }
251
PlatformTools(const QVersionNumber & revision,const QString & sdkStylePathStr,QObject * parent)252 PlatformTools::PlatformTools(const QVersionNumber &revision, const QString &sdkStylePathStr,
253 QObject *parent)
254 : AndroidSdkPackage(revision, sdkStylePathStr, parent)
255 {
256
257 }
258
isValid() const259 bool PlatformTools::isValid() const
260 {
261 return true;
262 }
263
type() const264 AndroidSdkPackage::PackageType PlatformTools::type() const
265 {
266 return AndroidSdkPackage::PlatformToolsPackage;
267 }
268
EmulatorTools(const QVersionNumber & revision,const QString & sdkStylePathStr,QObject * parent)269 EmulatorTools::EmulatorTools(const QVersionNumber &revision, const QString &sdkStylePathStr,
270 QObject *parent)
271 : AndroidSdkPackage(revision, sdkStylePathStr, parent)
272 {
273
274 }
275
isValid() const276 bool EmulatorTools::isValid() const
277 {
278 return installedLocation().exists();
279 }
280
type() const281 AndroidSdkPackage::PackageType EmulatorTools::type() const
282 {
283 return AndroidSdkPackage::EmulatorToolsPackage;
284 }
285
ExtraTools(const QVersionNumber & revision,const QString & sdkStylePathStr,QObject * parent)286 ExtraTools::ExtraTools(const QVersionNumber &revision, const QString &sdkStylePathStr,
287 QObject *parent)
288 : AndroidSdkPackage(revision, sdkStylePathStr, parent)
289 {
290 }
291
isValid() const292 bool ExtraTools::isValid() const
293 {
294 return installedLocation().exists();
295 }
296
type() const297 AndroidSdkPackage::PackageType ExtraTools::type() const
298 {
299 return AndroidSdkPackage::ExtraToolsPackage;
300 }
301
Ndk(const QVersionNumber & revision,const QString & sdkStylePathStr,QObject * parent)302 Ndk::Ndk(const QVersionNumber &revision, const QString &sdkStylePathStr, QObject *parent)
303 : AndroidSdkPackage(revision, sdkStylePathStr, parent)
304 {
305 }
306
isValid() const307 bool Ndk::isValid() const
308 {
309 return installedLocation().exists();
310 }
311
type() const312 AndroidSdkPackage::PackageType Ndk::type() const
313 {
314 return AndroidSdkPackage::NDKPackage;
315 }
316
GenericSdkPackage(const QVersionNumber & revision,const QString & sdkStylePathStr,QObject * parent)317 GenericSdkPackage::GenericSdkPackage(const QVersionNumber &revision, const QString &sdkStylePathStr,
318 QObject *parent)
319 : AndroidSdkPackage(revision, sdkStylePathStr, parent)
320 {
321 }
322
isValid() const323 bool GenericSdkPackage::isValid() const
324 {
325 return installedLocation().exists();
326 }
327
type() const328 AndroidSdkPackage::PackageType GenericSdkPackage::type() const
329 {
330 return AndroidSdkPackage::GenericSdkPackage;
331 }
332
333 } // namespace Android
334