Android: Replace AVD partition-size spinbox with emulator args input

The android emulator supports many more command-line startup options
than "-partition-size". Let's allow the user to take advantage of the
full functionalty, by providing a free-text input field for the options.

A link to the online documentation is also provided.

As a side-effect, the issue that an overridden parition size can cause
the "Cold Boot: different AVD configuration" warning is solved by not
having -partition-size by default.

Task-number: QTCREATORBUG-24735
Change-Id: I41d7b826133708c7ff447c1e257f62368745dea1
Reviewed-by: Assam Boudjelthia <assam.boudjelthia@qt.io>
This commit is contained in:
Alessandro Portale
2020-10-06 18:49:15 +02:00
parent 790a8bc78d
commit 323f353c6c
5 changed files with 41 additions and 43 deletions

View File

@@ -52,6 +52,7 @@
#include <QDir>
#include <QFileDialog>
#include <QFutureWatcher>
#include <QInputDialog>
#include <QList>
#include <QLoggingCategory>
#include <QMessageBox>
@@ -119,7 +120,7 @@ private:
void removeAVD();
void startAVD();
void avdActivated(const QModelIndex &);
void dataPartitionSizeEditingFinished();
void editEmulatorArgsAVD();
void createKitToggled();
void updateUI();
@@ -428,7 +429,6 @@ AndroidSettingsWidget::AndroidSettingsWidget()
m_androidConfig.setOpenSslLocation(m_androidConfig.sdkLocation() / ("android_openssl"));
m_ui.openSslPathChooser->setFilePath(m_androidConfig.openSslLocation());
m_ui.DataPartitionSizeSpinBox->setValue(m_androidConfig.partitionSize());
m_ui.CreateKitCheckBox->setChecked(m_androidConfig.automaticKitCreation());
m_ui.AVDTableView->setModel(&m_AVDModel);
m_ui.AVDTableView->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);
@@ -489,8 +489,8 @@ AndroidSettingsWidget::AndroidSettingsWidget()
this, &AndroidSettingsWidget::avdActivated);
connect(m_ui.AVDTableView, &QAbstractItemView::clicked,
this, &AndroidSettingsWidget::avdActivated);
connect(m_ui.DataPartitionSizeSpinBox, &QAbstractSpinBox::editingFinished,
this, &AndroidSettingsWidget::dataPartitionSizeEditingFinished);
connect(m_ui.AVDAdvancedOptionsPushButton, &QAbstractButton::clicked,
this, &AndroidSettingsWidget::editEmulatorArgsAVD);
connect(m_ui.CreateKitCheckBox, &QAbstractButton::toggled,
this, &AndroidSettingsWidget::createKitToggled);
connect(m_ui.downloadNDKToolButton, &QAbstractButton::clicked,
@@ -807,9 +807,25 @@ void AndroidSettingsWidget::avdActivated(const QModelIndex &index)
m_ui.AVDStartPushButton->setEnabled(index.isValid());
}
void AndroidSettingsWidget::dataPartitionSizeEditingFinished()
void AndroidSettingsWidget::editEmulatorArgsAVD()
{
m_androidConfig.setPartitionSize(m_ui.DataPartitionSizeSpinBox->value());
const QString helpUrl =
"https://developer.android.com/studio/run/emulator-commandline#startup-options";
QInputDialog dialog(this);
dialog.setWindowTitle(tr("Emulator Command-line Startup Options"));
dialog.setLabelText(tr("Emulator command-line startup options (<a href=\"%1\">Help Web Page</a>):").arg(helpUrl));
dialog.setTextValue(m_androidConfig.emulatorArgs().join(' '));
if (auto label = dialog.findChild<QLabel*>()) {
label->setOpenExternalLinks(true);
label->setMinimumWidth(500);
}
if (dialog.exec() != QDialog::Accepted)
return;
m_androidConfig.setEmulatorArgs(QtcProcess::splitArgs(dialog.textValue()));
}
void AndroidSettingsWidget::createKitToggled()