forked from qt-creator/qt-creator
Android: Fix freeze when showing Devices settings category
It looks like executing blocking process from inside AndroidDevice::createWidget(), which is executed from show event, may interferre with GUI. The fix is to execute the blocking process with a delay. Fixes: QTCREATORBUG-31912 Change-Id: Id5a065364e0992c31e586547fc520f76a89f95cf Reviewed-by: Alessandro Portale <alessandro.portale@qt.io>
This commit is contained in:
@@ -295,16 +295,14 @@ AndroidDeviceWidget::AndroidDeviceWidget(const IDevice::Ptr &device)
|
||||
setLayout(formLayout);
|
||||
formLayout->setFieldGrowthPolicy(QFormLayout::ExpandingFieldsGrow);
|
||||
|
||||
if (!dev->isValid())
|
||||
if (dev->avdName().isEmpty())
|
||||
return;
|
||||
|
||||
formLayout->addRow(Tr::tr("Device name:"), new QLabel(dev->displayName()));
|
||||
formLayout->addRow(Tr::tr("Device type:"), new QLabel(dev->deviceTypeName()));
|
||||
|
||||
const QString serialNumber = dev->serialNumber();
|
||||
const QString printableSerialNumber = serialNumber.isEmpty() ? Tr::tr("Unknown")
|
||||
: serialNumber;
|
||||
formLayout->addRow(Tr::tr("Serial number:"), new QLabel(printableSerialNumber));
|
||||
QLabel *serialNumberLabel = new QLabel;
|
||||
formLayout->addRow(Tr::tr("Serial number:"), serialNumberLabel);
|
||||
|
||||
const QString abis = dev->supportedAbis().join(", ");
|
||||
formLayout->addRow(Tr::tr("CPU architecture:"), new QLabel(abis));
|
||||
@@ -327,6 +325,14 @@ AndroidDeviceWidget::AndroidDeviceWidget(const IDevice::Ptr &device)
|
||||
const QString openGlStatus = dev->openGLStatus();
|
||||
formLayout->addRow(Tr::tr("OpenGL status:"), new QLabel(openGlStatus));
|
||||
}
|
||||
|
||||
// See QTCREATORBUG-31912 why this needs to be delayed.
|
||||
QTimer::singleShot(0, this, [serialNumberLabel, dev] {
|
||||
const QString serialNumber = dev->serialNumber(); // This executes a blocking process.
|
||||
const QString printableSerialNumber = serialNumber.isEmpty() ? Tr::tr("Unknown")
|
||||
: serialNumber;
|
||||
serialNumberLabel->setText(printableSerialNumber);
|
||||
});
|
||||
}
|
||||
|
||||
QString AndroidDeviceWidget::dialogTitle()
|
||||
@@ -522,11 +528,6 @@ bool AndroidDevice::canHandleDeployments() const
|
||||
return true;
|
||||
}
|
||||
|
||||
bool AndroidDevice::isValid() const
|
||||
{
|
||||
return !serialNumber().isEmpty() || !avdName().isEmpty();
|
||||
}
|
||||
|
||||
QString AndroidDevice::serialNumber() const
|
||||
{
|
||||
const QString serialNumber = extraData(Constants::AndroidSerialNumber).toString();
|
||||
|
@@ -31,7 +31,6 @@ public:
|
||||
|
||||
bool canHandleDeployments() const;
|
||||
|
||||
bool isValid() const;
|
||||
QString serialNumber() const;
|
||||
QString avdName() const;
|
||||
int sdkLevel() const;
|
||||
|
Reference in New Issue
Block a user