summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBogDan Vatra <bogdan@kdab.com>2015-12-04 10:03:45 +0200
committerBogDan Vatra <bogdan@kdab.com>2015-12-10 10:47:31 +0000
commit957c0af5705ef1b5affad7c4e130b4bd5b14044f (patch)
treeb12692d6840ae9d39ed5328607f25b38bd4e855d
parent255611f3e798b7b25744f0215fb898a4aa7519c2 (diff)
downloadqt-creator-957c0af5705ef1b5affad7c4e130b4bd5b14044f.tar.gz
Immediately return the default device if is found
Task-number: QTCREATORBUG-15422 Change-Id: I7be44fbe43c320c171ffb724ffd25414e184fd9a Reviewed-by: Tobias Hunger <tobias.hunger@theqtcompany.com>
-rw-r--r--src/plugins/android/androidconfigurations.cpp19
-rw-r--r--src/plugins/android/androidconfigurations.h2
-rw-r--r--src/plugins/android/androiddevicedialog.cpp86
-rw-r--r--src/plugins/android/androiddevicedialog.h9
-rw-r--r--src/plugins/android/androidmanager.cpp4
5 files changed, 45 insertions, 75 deletions
diff --git a/src/plugins/android/androidconfigurations.cpp b/src/plugins/android/androidconfigurations.cpp
index ee4c7198ee..0c115965e6 100644
--- a/src/plugins/android/androidconfigurations.cpp
+++ b/src/plugins/android/androidconfigurations.cpp
@@ -688,7 +688,7 @@ bool AndroidConfig::removeAVD(const QString &name) const
return !proc.exitCode();
}
-QFuture<QVector<AndroidDeviceInfo>> AndroidConfig::androidVirtualDevicesFuture()
+QFuture<QVector<AndroidDeviceInfo>> AndroidConfig::androidVirtualDevicesFuture() const
{
return QtConcurrent::run(&AndroidConfig::androidVirtualDevices, androidToolPath().toString(), androidToolEnvironment());
}
@@ -1177,17 +1177,14 @@ AndroidDeviceInfo AndroidConfigurations::showDeviceDialog(Project *project,
{
QString serialNumber = defaultDevice(project, abi);
AndroidDeviceDialog dialog(apiLevel, abi, options, serialNumber, Core::ICore::mainWindow());
- if (dialog.exec() == QDialog::Accepted) {
- AndroidDeviceInfo info = dialog.device();
- if (dialog.saveDeviceSelection()) {
- const QString serialNumber = info.type == AndroidDeviceInfo::Hardware ?
- info.serialNumber : info.avdname;
- if (!serialNumber.isEmpty())
- AndroidConfigurations::setDefaultDevice(project, abi, serialNumber);
- }
- return info;
+ AndroidDeviceInfo info = dialog.device();
+ if (dialog.saveDeviceSelection() && info.isValid()) {
+ const QString serialNumber = info.type == AndroidDeviceInfo::Hardware ?
+ info.serialNumber : info.avdname;
+ if (!serialNumber.isEmpty())
+ AndroidConfigurations::setDefaultDevice(project, abi, serialNumber);
}
- return AndroidDeviceInfo();
+ return info;
}
void AndroidConfigurations::clearDefaultDevices(Project *project)
diff --git a/src/plugins/android/androidconfigurations.h b/src/plugins/android/androidconfigurations.h
index 605929b05f..c50aba6fbf 100644
--- a/src/plugins/android/androidconfigurations.h
+++ b/src/plugins/android/androidconfigurations.h
@@ -154,7 +154,7 @@ public:
QVector<AndroidDeviceInfo> connectedDevices(QString *error = 0) const;
static QVector<AndroidDeviceInfo> connectedDevices(const QString &adbToolPath, QString *error = 0);
- QFuture<QVector<AndroidDeviceInfo> > androidVirtualDevicesFuture();
+ QFuture<QVector<AndroidDeviceInfo> > androidVirtualDevicesFuture() const;
static QVector<AndroidDeviceInfo> androidVirtualDevices(const QString &androidTool, const Utils::Environment &environment);
QString startAVD(const QString &name) const;
diff --git a/src/plugins/android/androiddevicedialog.cpp b/src/plugins/android/androiddevicedialog.cpp
index bc8bda7090..d5faea1399 100644
--- a/src/plugins/android/androiddevicedialog.cpp
+++ b/src/plugins/android/androiddevicedialog.cpp
@@ -480,9 +480,8 @@ AndroidDeviceDialog::AndroidDeviceDialog(int apiLevel, const QString &abi, Andro
connect(m_ui->lookingForDeviceCancel, &QPushButton::clicked,
this, &AndroidDeviceDialog::defaultDeviceClear);
- m_defaultDeviceTimer.start();
- refreshDeviceList();
+ m_connectedDevices = AndroidConfig::connectedDevices(AndroidConfigurations::currentConfig().adbToolPath().toString());
}
AndroidDeviceDialog::~AndroidDeviceDialog()
@@ -494,17 +493,25 @@ AndroidDeviceDialog::~AndroidDeviceDialog()
AndroidDeviceInfo AndroidDeviceDialog::device()
{
- if (result() == QDialog::Accepted)
+ if (!m_defaultDevice.isEmpty()) {
+ auto device = std::find_if(m_connectedDevices.begin(), m_connectedDevices.end(), [this](const AndroidDeviceInfo& info) {
+ return info.serialNumber == m_defaultDevice ||
+ info.avdname == m_defaultDevice;
+ });
+
+ if (device != m_connectedDevices.end())
+ return *device;
+ m_defaultDevice.clear();
+ }
+
+ refreshDeviceList();
+
+ if (exec() == QDialog::Accepted)
return m_model->device(m_ui->deviceView->currentIndex());
return AndroidDeviceInfo();
}
-void AndroidDeviceDialog::accept()
-{
- QDialog::accept();
-}
-
-bool AndroidDeviceDialog::saveDeviceSelection()
+bool AndroidDeviceDialog::saveDeviceSelection() const
{
return m_ui->defaultDeviceCheckBox->isChecked();
}
@@ -513,27 +520,8 @@ void AndroidDeviceDialog::refreshDeviceList()
{
m_ui->refreshDevicesButton->setEnabled(false);
m_progressIndicator->show();
- m_futureWatcherRefreshDevices.setFuture(QtConcurrent::run(&AndroidDeviceDialog::refreshDevices,
- AndroidConfigurations::currentConfig().adbToolPath().toString(),
- AndroidConfigurations::currentConfig().androidToolPath().toString(),
- AndroidConfigurations::currentConfig().androidToolEnvironment()));
-}
-
-QVector<AndroidDeviceInfo> AndroidDeviceDialog::refreshDevices(const QString &adbToolPath,
- const QString &androidToolPath,
- const Utils::Environment &environment)
-{
- QVector<AndroidDeviceInfo> devices = AndroidConfig::connectedDevices(adbToolPath);
-
- QSet<QString> startedAvds = Utils::transform<QSet>(devices,
- [] (const AndroidDeviceInfo &info) {
- return info.avdname;
- });
-
- for (const AndroidDeviceInfo &dev : AndroidConfig::androidVirtualDevices(androidToolPath, environment))
- if (!startedAvds.contains(dev.avdname))
- devices << dev;
- return devices;
+ m_connectedDevices = AndroidConfig::connectedDevices(AndroidConfigurations::currentConfig().adbToolPath().toString());
+ m_futureWatcherRefreshDevices.setFuture(AndroidConfigurations::currentConfig().androidVirtualDevicesFuture());
}
void AndroidDeviceDialog::devicesRefreshed()
@@ -549,7 +537,16 @@ void AndroidDeviceDialog::devicesRefreshed()
}
QVector<AndroidDeviceInfo> devices = m_futureWatcherRefreshDevices.result();
- m_model->setDevices(devices);
+ QSet<QString> startedAvds = Utils::transform<QSet>(m_connectedDevices,
+ [] (const AndroidDeviceInfo &info) {
+ return info.avdname;
+ });
+
+ for (const AndroidDeviceInfo &dev : devices)
+ if (!startedAvds.contains(dev.avdname))
+ m_connectedDevices << dev;
+
+ m_model->setDevices(m_connectedDevices);
m_ui->deviceView->expand(m_model->index(0, 0));
if (m_model->rowCount() > 1) // we have a incompatible device node
@@ -573,37 +570,18 @@ void AndroidDeviceDialog::devicesRefreshed()
if (!newIndex.isValid() && !serialNumber.isEmpty())
newIndex = m_model->indexFor(deviceType, serialNumber);
- if (!newIndex.isValid() && !devices.isEmpty()) {
- AndroidDeviceInfo info = devices.first();
+ if (!newIndex.isValid() && !m_connectedDevices.isEmpty()) {
+ AndroidDeviceInfo info = m_connectedDevices.first();
const QString &name = info.type == AndroidDeviceInfo::Hardware ? info.serialNumber : info.avdname;
newIndex = m_model->indexFor(info.type, name);
}
m_ui->deviceView->setCurrentIndex(newIndex);
- m_ui->stackedWidget->setCurrentIndex(devices.isEmpty() ? 1 : 0);
+ m_ui->stackedWidget->setCurrentIndex(m_connectedDevices.isEmpty() ? 1 : 0);
m_ui->refreshDevicesButton->setEnabled(true);
-
- if (!m_defaultDevice.isEmpty()) {
- int elapsed = m_defaultDeviceTimer.elapsed();
- if (elapsed > 4000)
- accept();
- else
- QTimer::singleShot(4000 - elapsed, this, &AndroidDeviceDialog::useDefaultDevice);
- }
-}
-
-void AndroidDeviceDialog::useDefaultDevice()
-{
- if (m_defaultDevice.isEmpty())
- return;
- AndroidDeviceInfo info = m_model->device(m_ui->deviceView->currentIndex());
- if (info.serialNumber == m_defaultDevice
- || info.avdname == m_defaultDevice)
- accept();
- else // something different is selected
- defaultDeviceClear();
+ m_connectedDevices.clear();
}
void AndroidDeviceDialog::createAvd()
diff --git a/src/plugins/android/androiddevicedialog.h b/src/plugins/android/androiddevicedialog.h
index 2317c4e2c2..7967a7ff05 100644
--- a/src/plugins/android/androiddevicedialog.h
+++ b/src/plugins/android/androiddevicedialog.h
@@ -60,9 +60,8 @@ public:
~AndroidDeviceDialog();
AndroidDeviceInfo device();
- void accept();
- bool saveDeviceSelection();
+ bool saveDeviceSelection() const;
private slots:
void refreshDeviceList();
@@ -71,12 +70,8 @@ private slots:
void showHelp();
void avdAdded();
private:
- static QVector<AndroidDeviceInfo> refreshDevices(const QString &adbToolPath,
- const QString &androidToolPath,
- const Utils::Environment &environment);
void devicesRefreshed();
void enableOkayButton();
- void useDefaultDevice();
void defaultDeviceClear();
AndroidDeviceModel *m_model;
@@ -86,7 +81,7 @@ private:
QString m_abi;
QString m_avdNameFromAdd;
QString m_defaultDevice;
- QTime m_defaultDeviceTimer;
+ QVector<AndroidDeviceInfo> m_connectedDevices;
QFutureWatcher<AndroidConfig::CreateAvdInfo> m_futureWatcherAddDevice;
QFutureWatcher<QVector<AndroidDeviceInfo>> m_futureWatcherRefreshDevices;
};
diff --git a/src/plugins/android/androidmanager.cpp b/src/plugins/android/androidmanager.cpp
index cff67ce283..86a6a3ade5 100644
--- a/src/plugins/android/androidmanager.cpp
+++ b/src/plugins/android/androidmanager.cpp
@@ -307,7 +307,7 @@ void AndroidManager::cleanLibsOnDevice(ProjectExplorer::Target *target)
return;
const int deviceAPILevel = AndroidManager::minimumSDK(target);
AndroidDeviceInfo info = AndroidConfigurations::showDeviceDialog(target->project(), deviceAPILevel, targetArch, AndroidConfigurations::None);
- if (info.serialNumber.isEmpty() && info.avdname.isEmpty()) // aborted
+ if (!info.isValid()) // aborted
return;
QString deviceSerialNumber = info.serialNumber;
@@ -336,7 +336,7 @@ void AndroidManager::installQASIPackage(ProjectExplorer::Target *target, const Q
return;
const int deviceAPILevel = AndroidManager::minimumSDK(target);
AndroidDeviceInfo info = AndroidConfigurations::showDeviceDialog(target->project(), deviceAPILevel, targetArch, AndroidConfigurations::None);
- if (info.serialNumber.isEmpty() && info.avdname.isEmpty()) // aborted
+ if (!info.isValid()) // aborted
return;
QString deviceSerialNumber = info.serialNumber;