Android: Remove SystemInfo from CreateAvdInfo

Replace it with sdkStylePath and apiLevel fields what makes this
structure safe to be used in different threads.

Get rid of isValid() method.

Change-Id: Iafce161457f05698fb3d5ea4a2a7fa15f8d95b38
Reviewed-by: <github-actions-qt-creator@cristianadam.eu>
Reviewed-by: Alessandro Portale <alessandro.portale@qt.io>
This commit is contained in:
Jarek Kobus
2024-05-07 17:18:07 +02:00
parent f82a68221f
commit 668e824299
3 changed files with 17 additions and 15 deletions

View File

@@ -65,7 +65,7 @@ static CreateAvdInfo createAvdCommand(const CreateAvdInfo &info)
{ {
CreateAvdInfo result = info; CreateAvdInfo result = info;
CommandLine avdManager(androidConfig().avdManagerToolPath(), {"create", "avd", "-n", result.name}); CommandLine avdManager(androidConfig().avdManagerToolPath(), {"create", "avd", "-n", result.name});
avdManager.addArgs({"-k", result.systemImage->sdkStylePath()}); avdManager.addArgs({"-k", result.sdkStylePath});
if (result.sdcardSize > 0) if (result.sdcardSize > 0)
avdManager.addArgs({"-c", QString("%1M").arg(result.sdcardSize)}); avdManager.addArgs({"-c", QString("%1M").arg(result.sdcardSize)});

View File

@@ -28,8 +28,8 @@ namespace Internal { class AndroidSdkManager; }
class CreateAvdInfo class CreateAvdInfo
{ {
public: public:
bool isValid() const { return systemImage && systemImage->isValid() && !name.isEmpty(); } QString sdkStylePath;
const SystemImage *systemImage = nullptr; int apiLevel = -1;
QString name; QString name;
QString abi; QString abi;
QString deviceDefinition; QString deviceDefinition;

View File

@@ -31,6 +31,7 @@
#include <QSpinBox> #include <QSpinBox>
#include <QToolTip> #include <QToolTip>
using namespace ProjectExplorer;
using namespace Utils; using namespace Utils;
namespace Android::Internal { namespace Android::Internal {
@@ -121,20 +122,22 @@ int AvdDialog::exec()
{ {
const int execResult = QDialog::exec(); const int execResult = QDialog::exec();
if (execResult == QDialog::Accepted) { if (execResult == QDialog::Accepted) {
const SystemImage *si = systemImage();
if (!si || !si->isValid() || name().isEmpty()) {
QMessageBox::warning(Core::ICore::dialogParent(),
Tr::tr("Create new AVD"), Tr::tr("Cannot create AVD. Invalid input."));
return QDialog::Rejected;
}
CreateAvdInfo result; CreateAvdInfo result;
result.systemImage = systemImage(); result.sdkStylePath = si->sdkStylePath();
result.apiLevel = si->apiLevel();
result.name = name(); result.name = name();
result.abi = abi(); result.abi = abi();
result.deviceDefinition = deviceDefinition(); result.deviceDefinition = deviceDefinition();
result.sdcardSize = sdcardSize(); result.sdcardSize = sdcardSize();
result.overwrite = m_overwriteCheckBox->isChecked(); result.overwrite = m_overwriteCheckBox->isChecked();
if (!result.isValid()) {
QMessageBox::warning(Core::ICore::dialogParent(),
Tr::tr("Create new AVD"), Tr::tr("Cannot create AVD. Invalid input."));
return QDialog::Rejected;
}
const AndroidAvdManager avdManager; const AndroidAvdManager avdManager;
QFutureWatcher<CreateAvdInfo> createAvdFutureWatcher; QFutureWatcher<CreateAvdInfo> createAvdFutureWatcher;
@@ -167,22 +170,21 @@ bool AvdDialog::isValid() const
return !name().isEmpty() && systemImage() && systemImage()->isValid() && !abi().isEmpty(); return !name().isEmpty() && systemImage() && systemImage()->isValid() && !abi().isEmpty();
} }
ProjectExplorer::IDevice::Ptr AvdDialog::device() const IDevice::Ptr AvdDialog::device() const
{ {
if (!m_createdAvdInfo.systemImage) { if (m_createdAvdInfo.apiLevel < 0) {
qCWarning(avdDialogLog) << "System image of the created AVD is nullptr"; qCWarning(avdDialogLog) << "System image of the created AVD is nullptr";
return IDevice::Ptr(); return IDevice::Ptr();
} }
AndroidDevice *dev = new AndroidDevice(); AndroidDevice *dev = new AndroidDevice;
const Utils::Id deviceId = AndroidDevice::idFromAvdInfo(m_createdAvdInfo); const Utils::Id deviceId = AndroidDevice::idFromAvdInfo(m_createdAvdInfo);
using namespace ProjectExplorer;
dev->setupId(IDevice::AutoDetected, deviceId); dev->setupId(IDevice::AutoDetected, deviceId);
dev->setMachineType(IDevice::Emulator); dev->setMachineType(IDevice::Emulator);
dev->settings()->displayName.setValue(m_createdAvdInfo.name); dev->settings()->displayName.setValue(m_createdAvdInfo.name);
dev->setDeviceState(IDevice::DeviceConnected); dev->setDeviceState(IDevice::DeviceConnected);
dev->setExtraData(Constants::AndroidAvdName, m_createdAvdInfo.name); dev->setExtraData(Constants::AndroidAvdName, m_createdAvdInfo.name);
dev->setExtraData(Constants::AndroidCpuAbi, {m_createdAvdInfo.abi}); dev->setExtraData(Constants::AndroidCpuAbi, {m_createdAvdInfo.abi});
dev->setExtraData(Constants::AndroidSdk, m_createdAvdInfo.systemImage->apiLevel()); dev->setExtraData(Constants::AndroidSdk, m_createdAvdInfo.apiLevel);
return IDevice::Ptr(dev); return IDevice::Ptr(dev);
} }