aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJarek Kobus <jaroslaw.kobus@qt.io>2024-05-07 17:18:07 +0200
committerJarek Kobus <jaroslaw.kobus@qt.io>2024-05-08 13:36:41 +0000
commit668e82429970898be494a855ad5fa085054e101b (patch)
tree35635857f283e7666a55411e9981d1913b8c1bd0
parentf82a68221fd36ffc183abb9dc898dbcda47ebd55 (diff)
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>
-rw-r--r--src/plugins/android/androidavdmanager.cpp2
-rw-r--r--src/plugins/android/androidconfigurations.h4
-rw-r--r--src/plugins/android/avddialog.cpp26
3 files changed, 17 insertions, 15 deletions
diff --git a/src/plugins/android/androidavdmanager.cpp b/src/plugins/android/androidavdmanager.cpp
index ffa8b2ce7a..4670a90462 100644
--- a/src/plugins/android/androidavdmanager.cpp
+++ b/src/plugins/android/androidavdmanager.cpp
@@ -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)});
diff --git a/src/plugins/android/androidconfigurations.h b/src/plugins/android/androidconfigurations.h
index ce4604de18..aa8f1da33a 100644
--- a/src/plugins/android/androidconfigurations.h
+++ b/src/plugins/android/androidconfigurations.h
@@ -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;
diff --git a/src/plugins/android/avddialog.cpp b/src/plugins/android/avddialog.cpp
index a33e56bc6d..1d61385534 100644
--- a/src/plugins/android/avddialog.cpp
+++ b/src/plugins/android/avddialog.cpp
@@ -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);
}