diff --git a/src/plugins/android/androidconfigurations.cpp b/src/plugins/android/androidconfigurations.cpp index 49c7265f545..dcbc8f401a4 100644 --- a/src/plugins/android/androidconfigurations.cpp +++ b/src/plugins/android/androidconfigurations.cpp @@ -848,20 +848,51 @@ bool AndroidConfig::isBootToQt(const QString &device) const return adbProc.readAll().contains("Boot2Qt"); } -int AndroidConfig::getSDKVersion(const QString &device) const +QString AndroidConfig::getDeviceProperty(const QString &device, const QString &property) const { // workaround for '????????????' serial numbers QStringList arguments = AndroidDeviceInfo::adbSelector(device); arguments << QLatin1String("shell") << QLatin1String("getprop") - << QLatin1String("ro.build.version.sdk"); + << property; QProcess adbProc; adbProc.start(adbToolPath().toString(), arguments); if (!adbProc.waitForFinished(10000)) { adbProc.kill(); - return -1; + return QString(); } - return adbProc.readAll().trimmed().toInt(); + + return QString::fromLocal8Bit(adbProc.readAll()); +} + +int AndroidConfig::getSDKVersion(const QString &device) const +{ + QString tmp = getDeviceProperty(device, QLatin1String("ro.build.version.sdk")); + if (tmp.isEmpty()) + return -1; + return tmp.trimmed().toInt(); +} + +AndroidConfig::OpenGl AndroidConfig::getOpenGLEnabled(const QString &emulator) const +{ + QDir dir = QDir::home(); + if (!dir.cd(QLatin1String(".android"))) + return OpenGl::Unknown; + if (!dir.cd(QLatin1String("avd"))) + return OpenGl::Unknown; + if (!dir.cd(emulator + QLatin1String(".avd"))) + return OpenGl::Unknown; + QFile file(dir.filePath(QLatin1String("config.ini"))); + if (!file.exists()) + return OpenGl::Unknown; + if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) + return OpenGl::Unknown; + while (!file.atEnd()) { + QByteArray line = file.readLine(); + if (line.contains("hw.gpu.enabled") && line.contains("yes")) + return OpenGl::Enabled; + } + return OpenGl::Disabled; } //! @@ -873,20 +904,11 @@ QString AndroidConfig::getProductModel(const QString &device) const { if (m_serialNumberToDeviceName.contains(device)) return m_serialNumberToDeviceName.value(device); - // workaround for '????????????' serial numbers - QStringList arguments = AndroidDeviceInfo::adbSelector(device); - arguments << QLatin1String("shell") << QLatin1String("getprop") - << QLatin1String("ro.product.model"); - QProcess adbProc; - adbProc.start(adbToolPath().toString(), arguments); - if (!adbProc.waitForFinished(10000)) { - adbProc.kill(); - return device; - } - QString model = QString::fromLocal8Bit(adbProc.readAll().trimmed()); + QString model = getDeviceProperty(device, QLatin1String("ro.product.model")).trimmed(); if (model.isEmpty()) return device; + if (!device.startsWith(QLatin1String("????"))) m_serialNumberToDeviceName.insert(device, model); return model; diff --git a/src/plugins/android/androidconfigurations.h b/src/plugins/android/androidconfigurations.h index f35cce897a1..7ac2f929e55 100644 --- a/src/plugins/android/androidconfigurations.h +++ b/src/plugins/android/androidconfigurations.h @@ -164,6 +164,8 @@ public: static QLatin1String displayName(const ProjectExplorer::Abi &abi); QString getProductModel(const QString &device) const; + enum class OpenGl { Enabled, Disabled, Unknown }; + OpenGl getOpenGLEnabled(const QString &emulator) const; bool hasFinishedBooting(const QString &device) const; bool waitForBooted(const QString &serialNumber, const QFutureInterface &fi) const; bool isConnected(const QString &serialNumber) const; @@ -172,6 +174,7 @@ public: private: static CreateAvdInfo createAVDImpl(CreateAvdInfo info, Utils::FileName androidToolPath, Utils::Environment env); static QVector androidVirtualDevicesImpl(const Utils::FileName &androidTool, const Utils::Environment &environment); + QString getDeviceProperty(const QString &device, const QString &property) const; Utils::FileName toolPath(const ProjectExplorer::Abi &abi, const QString &ndkToolChainVersion) const; Utils::FileName openJDKBinPath() const; diff --git a/src/plugins/android/androiddevicedialog.cpp b/src/plugins/android/androiddevicedialog.cpp index 874d1a0b999..b0e531cf4c9 100644 --- a/src/plugins/android/androiddevicedialog.cpp +++ b/src/plugins/android/androiddevicedialog.cpp @@ -169,10 +169,28 @@ public: topLeft = AndroidConfigurations::currentConfig().getProductModel(device.serialNumber); painter->drawText(size + 12, 2 + opt.rect.top() + fm.ascent(), topLeft); - QString topRight = device.serialNumber; + // topRight - if (device.type == AndroidDeviceInfo::Hardware) // otherwise it's not very informative - painter->drawText(opt.rect.right() - fm.width(topRight) - 6 , 2 + opt.rect.top() + fm.ascent(), topRight); + auto drawTopRight = [&](const QString text, const QFontMetrics &fm) { + painter->drawText(opt.rect.right() - fm.width(text) - 6 , 2 + opt.rect.top() + fm.ascent(), text); + }; + + if (device.type == AndroidDeviceInfo::Hardware) { + drawTopRight(device.serialNumber, fm); + } else { + AndroidConfig::OpenGl openGl = AndroidConfigurations::currentConfig().getOpenGLEnabled(device.serialNumber); + if (openGl == AndroidConfig::OpenGl::Enabled) { + drawTopRight(tr("Open GL enabled"), fm); + } else if (openGl == AndroidConfig::OpenGl::Disabled) { + QFont font = painter->font(); + font.setBold(true); + painter->setFont(font); + QFontMetrics fmBold(font); + drawTopRight(tr("OpenGL disabled"), fmBold); + font.setBold(false); + painter->setFont(font); + } + } // Directory QColor mix;