Android: Make use of the error reported

Don't call createAvd() in case of the invalid systemImage().

Detect the erroneous result and handle it accordingly.

Change-Id: Ieb869d12ea24f22dcf29beb362d934484929cdad
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 16:08:21 +02:00
parent 6164937b42
commit 3ead49ed33
2 changed files with 16 additions and 9 deletions

View File

@@ -64,14 +64,6 @@ static bool checkForTimeout(const chrono::steady_clock::time_point &start,
static CreateAvdInfo createAvdCommand(const CreateAvdInfo &info) static CreateAvdInfo createAvdCommand(const CreateAvdInfo &info)
{ {
CreateAvdInfo result = info; CreateAvdInfo result = info;
if (!result.isValid()) {
qCDebug(avdManagerLog) << "AVD Create failed. Invalid CreateAvdInfo" << result.name
<< result.systemImage->displayText() << result.systemImage->apiLevel();
result.error = Tr::tr("Cannot create AVD. Invalid input.");
return result;
}
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.systemImage->sdkStylePath()});

View File

@@ -8,6 +8,8 @@
#include "androiddevice.h" #include "androiddevice.h"
#include "androidsdkmanager.h" #include "androidsdkmanager.h"
#include <coreplugin/icore.h>
#include <projectexplorer/projectexplorerconstants.h> #include <projectexplorer/projectexplorerconstants.h>
#include <utils/algorithm.h> #include <utils/algorithm.h>
@@ -24,6 +26,7 @@
#include <QKeyEvent> #include <QKeyEvent>
#include <QLineEdit> #include <QLineEdit>
#include <QLoggingCategory> #include <QLoggingCategory>
#include <QMessageBox>
#include <QPushButton> #include <QPushButton>
#include <QSpinBox> #include <QSpinBox>
#include <QToolTip> #include <QToolTip>
@@ -126,6 +129,12 @@ int AvdDialog::exec()
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;
@@ -139,7 +148,13 @@ int AvdDialog::exec()
const QFuture<CreateAvdInfo> future = createAvdFutureWatcher.future(); const QFuture<CreateAvdInfo> future = createAvdFutureWatcher.future();
if (future.isResultReadyAt(0)) { if (future.isResultReadyAt(0)) {
m_createdAvdInfo = future.result(); const CreateAvdInfo &info = future.result();
if (!info.error.isEmpty()) {
QMessageBox::warning(Core::ICore::dialogParent(),
Tr::tr("Create new AVD"), info.error);
return QDialog::Rejected;
}
m_createdAvdInfo = info;
AndroidDeviceManager::instance()->updateAvdsList(); AndroidDeviceManager::instance()->updateAvdsList();
} }
} }