forked from qt-creator/qt-creator
Monitor Android devices in non-polling method
Use ADB's track-devices command to watch for device events which would replace the current polling method with a timer. For AVDs, a QFileSystemWatcher is used to watch for changes in the AVDs home folder which would allow updating the AVDs only when a change is done like edition, deletion, start, stop, even from outside Qt Creator. This method would also make device updates faster, instead of unexpected waits due to timer use. Task-number: QTCREATORBUG-23991 Change-Id: I08a92252c99c02bc111e597d671f2350817458c7 Reviewed-by: Alessandro Portale <alessandro.portale@qt.io>
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2022 The Qt Company Ltd.
|
||||
** Copyright (C) 2016 BogDan Vatra <bog_dan_ro@yahoo.com>
|
||||
** Contact: https://www.qt.io/licensing/
|
||||
**
|
||||
@@ -752,48 +753,6 @@ QString AndroidConfig::getAvdName(const QString &serialnumber)
|
||||
return QString::fromLatin1(name).trimmed();
|
||||
}
|
||||
|
||||
static SdkToolResult emulatorNameAdbCommand(const QString &serialNumber)
|
||||
{
|
||||
QStringList args = AndroidDeviceInfo::adbSelector(serialNumber);
|
||||
args.append({"emu", "avd", "name"});
|
||||
return AndroidManager::runAdbCommand(args);
|
||||
}
|
||||
|
||||
QString AndroidConfig::getRunningAvdsSerialNumber(const QString &name) const
|
||||
{
|
||||
for (const AndroidDeviceInfo &dev : connectedDevices()) {
|
||||
if (!dev.serialNumber.startsWith("emulator"))
|
||||
continue;
|
||||
SdkToolResult result = emulatorNameAdbCommand(dev.serialNumber);
|
||||
const QString stdOut = result.stdOut();
|
||||
if (stdOut.isEmpty())
|
||||
continue; // Not an avd
|
||||
const QStringList outputLines = stdOut.split('\n');
|
||||
if (outputLines.size() > 1 && outputLines.first() == name)
|
||||
return dev.serialNumber;
|
||||
}
|
||||
|
||||
return {};
|
||||
}
|
||||
|
||||
QStringList AndroidConfig::getRunningAvdsFromDevices(const QVector<AndroidDeviceInfo> &devs)
|
||||
{
|
||||
QStringList runningDevs;
|
||||
for (const AndroidDeviceInfo &dev : devs) {
|
||||
if (!dev.serialNumber.startsWith("emulator"))
|
||||
continue;
|
||||
SdkToolResult result = emulatorNameAdbCommand(dev.serialNumber);
|
||||
const QString stdOut = result.stdOut();
|
||||
if (stdOut.isEmpty())
|
||||
continue; // Not an avd
|
||||
const QStringList outputLines = stdOut.split('\n');
|
||||
if (outputLines.size() > 1)
|
||||
runningDevs.append(outputLines.first());
|
||||
}
|
||||
|
||||
return runningDevs;
|
||||
}
|
||||
|
||||
AndroidConfig::OpenGl AndroidConfig::getOpenGLEnabled(const QString &emulator) const
|
||||
{
|
||||
QDir dir = QDir::home();
|
||||
|
Reference in New Issue
Block a user