Android: Auto installation of missing necessary SDK packages

Task-number: QTCREATORBUG-18978
Change-Id: Iac3e2c956ac3da717c6509f28b8d810827947ea0
Reviewed-by: BogDan Vatra <bogdan@kdab.com>
This commit is contained in:
Vikas Pachdha
2017-09-26 11:24:16 +02:00
parent c52ee5238b
commit 5002372533
6 changed files with 76 additions and 5 deletions

View File

@@ -37,8 +37,10 @@ namespace Internal {
const int packageColCount = 4;
AndroidSdkModel::AndroidSdkModel(AndroidSdkManager *sdkManager, QObject *parent)
AndroidSdkModel::AndroidSdkModel(const AndroidConfig &config, AndroidSdkManager *sdkManager,
QObject *parent)
: QAbstractItemModel(parent),
m_config(config),
m_sdkManager(sdkManager)
{
QTC_CHECK(m_sdkManager);
@@ -268,6 +270,40 @@ bool AndroidSdkModel::setData(const QModelIndex &index, const QVariant &value, i
return false;
}
void AndroidSdkModel::selectMissingEssentials()
{
resetSelection();
bool selectPlatformTool = !m_config.adbToolPath().exists();
bool selectBuildTools = m_config.buildToolsVersion().isNull();
auto addTool = [this](QList<const AndroidSdkPackage *>::const_iterator itr) {
m_changeState << *itr;
auto i = index(std::distance(m_tools.cbegin(), itr), 0, index(0, 0));
emit dataChanged(i, i, {Qt::CheckStateRole});
};
for (auto tool = m_tools.cbegin(); tool != m_tools.cend(); ++tool) {
if (selectPlatformTool && (*tool)->type() == AndroidSdkPackage::PlatformToolsPackage) {
// Select Platform tools
addTool(tool);
selectPlatformTool = false;
}
if (selectBuildTools && (*tool)->type() == AndroidSdkPackage::BuildToolsPackage) {
// Select build tools
addTool(tool);
selectBuildTools = false;
}
if (!selectPlatformTool && !selectBuildTools)
break;
}
// Select SDK platform
if (m_sdkManager->installedSdkPlatforms().isEmpty() && !m_sdkPlatforms.isEmpty()) {
auto i = index(0, 0, index(1,0));
m_changeState << m_sdkPlatforms.at(0);
emit dataChanged(i , i, {Qt::CheckStateRole});
}
}
QList<const AndroidSdkPackage *> AndroidSdkModel::userSelection() const
{
return m_changeState.toList();