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;
CommandLine avdManager(androidConfig().avdManagerToolPath(), {"create", "avd", "-n", result.name});
avdManager.addArgs({"-k", result.systemImage->sdkStylePath()});
avdManager.addArgs({"-k", result.sdkStylePath});
if (result.sdcardSize > 0)
avdManager.addArgs({"-c", QString("%1M").arg(result.sdcardSize)});

View File

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

View File

@@ -31,6 +31,7 @@
#include <QSpinBox>
#include <QToolTip>
using namespace ProjectExplorer;
using namespace Utils;
namespace Android::Internal {
@@ -121,20 +122,22 @@ int AvdDialog::exec()
{
const int execResult = QDialog::exec();
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;
result.systemImage = systemImage();
result.sdkStylePath = si->sdkStylePath();
result.apiLevel = si->apiLevel();
result.name = name();
result.abi = abi();
result.deviceDefinition = deviceDefinition();
result.sdcardSize = sdcardSize();
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;
QFutureWatcher<CreateAvdInfo> createAvdFutureWatcher;
@@ -167,22 +170,21 @@ bool AvdDialog::isValid() const
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";
return IDevice::Ptr();
}
AndroidDevice *dev = new AndroidDevice();
AndroidDevice *dev = new AndroidDevice;
const Utils::Id deviceId = AndroidDevice::idFromAvdInfo(m_createdAvdInfo);
using namespace ProjectExplorer;
dev->setupId(IDevice::AutoDetected, deviceId);
dev->setMachineType(IDevice::Emulator);
dev->settings()->displayName.setValue(m_createdAvdInfo.name);
dev->setDeviceState(IDevice::DeviceConnected);
dev->setExtraData(Constants::AndroidAvdName, m_createdAvdInfo.name);
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);
}