diff --git a/src/plugins/android/androidconfigurations.cpp b/src/plugins/android/androidconfigurations.cpp
index e836ba8c3f3..764a6586570 100644
--- a/src/plugins/android/androidconfigurations.cpp
+++ b/src/plugins/android/androidconfigurations.cpp
@@ -1159,25 +1159,14 @@ AndroidDeviceInfo AndroidConfigurations::showDeviceDialog(Project *project,
Options options)
{
QString serialNumber = defaultDevice(project, abi);
- if (!serialNumber.isEmpty()) {
- // search for that device
- foreach (const AndroidDeviceInfo &info, AndroidConfigurations::currentConfig().connectedDevices())
- if (info.serialNumber == serialNumber
- && info.sdk >= apiLevel)
- return info;
-
- foreach (const AndroidDeviceInfo &info, AndroidConfigurations::currentConfig().androidVirtualDevices())
- if (info.serialNumber == serialNumber
- && info.sdk >= apiLevel)
- return info;
- }
-
- AndroidDeviceDialog dialog(apiLevel, abi, options, Core::ICore::mainWindow());
+ AndroidDeviceDialog dialog(apiLevel, abi, options, serialNumber, Core::ICore::mainWindow());
if (dialog.exec() == QDialog::Accepted) {
AndroidDeviceInfo info = dialog.device();
if (dialog.saveDeviceSelection()) {
- if (!info.serialNumber.isEmpty())
- AndroidConfigurations::setDefaultDevice(project, abi, info.serialNumber);
+ const QString serialNumber = info.type == AndroidDeviceInfo::Hardware ?
+ info.serialNumber : info.avdname;
+ if (!serialNumber.isEmpty())
+ AndroidConfigurations::setDefaultDevice(project, abi, serialNumber);
}
return info;
}
diff --git a/src/plugins/android/androiddevicedialog.cpp b/src/plugins/android/androiddevicedialog.cpp
index d9f2a2155e4..f26e7bc24d2 100644
--- a/src/plugins/android/androiddevicedialog.cpp
+++ b/src/plugins/android/androiddevicedialog.cpp
@@ -420,12 +420,14 @@ static inline QString msgAdbListDevices()
return AndroidDeviceDialog::tr("
The adb tool in the Android SDK lists all connected devices if run via "adb devices".
");
}
-AndroidDeviceDialog::AndroidDeviceDialog(int apiLevel, const QString &abi, AndroidConfigurations::Options options, QWidget *parent) :
+AndroidDeviceDialog::AndroidDeviceDialog(int apiLevel, const QString &abi, AndroidConfigurations::Options options,
+ const QString &serialNumber, QWidget *parent) :
QDialog(parent),
m_model(new AndroidDeviceModel(apiLevel, abi, options)),
m_ui(new Ui::AndroidDeviceDialog),
m_apiLevel(apiLevel),
- m_abi(abi)
+ m_abi(abi),
+ m_defaultDevice(serialNumber)
{
m_ui->setupUi(this);
m_ui->deviceView->setModel(m_model);
@@ -466,6 +468,19 @@ AndroidDeviceDialog::AndroidDeviceDialog(int apiLevel, const QString &abi, Andro
m_progressIndicator = new Utils::ProgressIndicator(Utils::ProgressIndicator::Large, this);
m_progressIndicator->attachToWidget(m_ui->deviceView);
+
+ if (serialNumber.isEmpty()) {
+ m_ui->lookingForDevice->setVisible(false);
+ m_ui->lookingForDeviceCancel->setVisible(false);
+ } else {
+ m_ui->lookingForDevice->setVisible(true);
+ m_ui->lookingForDevice->setText(tr("Looking for default device %1.").arg(serialNumber));
+ m_ui->lookingForDeviceCancel->setVisible(true);
+ }
+
+ connect(m_ui->lookingForDeviceCancel, &QPushButton::clicked,
+ this, &AndroidDeviceDialog::defaultDeviceClear);
+ m_defaultDeviceTimer.start();
}
AndroidDeviceDialog::~AndroidDeviceDialog()
@@ -523,17 +538,11 @@ void AndroidDeviceDialog::devicesRefreshed()
m_progressIndicator->hide();
QString serialNumber;
AndroidDeviceInfo::AndroidDeviceType deviceType;
- if (!m_avdNameFromAdd.isEmpty()) {
- serialNumber = m_avdNameFromAdd;
- m_avdNameFromAdd.clear();
- deviceType = AndroidDeviceInfo::Emulator;
- } else {
- QModelIndex currentIndex = m_ui->deviceView->currentIndex();
- if (currentIndex.isValid()) {
- AndroidDeviceInfo info = m_model->device(currentIndex);
- deviceType = info.type;
- serialNumber = deviceType == AndroidDeviceInfo::Hardware ? info.serialNumber : info.avdname;
- }
+ QModelIndex currentIndex = m_ui->deviceView->currentIndex();
+ if (currentIndex.isValid()) { // save currently selected index
+ AndroidDeviceInfo info = m_model->device(currentIndex);
+ deviceType = info.type;
+ serialNumber = deviceType == AndroidDeviceInfo::Hardware ? info.serialNumber : info.avdname;
}
QVector devices = m_futureWatcherRefreshDevices.result();
@@ -545,7 +554,20 @@ void AndroidDeviceDialog::devicesRefreshed()
// Smartly select a index
QModelIndex newIndex;
- if (!serialNumber.isEmpty())
+ if (!m_defaultDevice.isEmpty()) {
+ newIndex = m_model->indexFor(AndroidDeviceInfo::Hardware, m_defaultDevice);
+ if (!newIndex.isValid())
+ newIndex = m_model->indexFor(AndroidDeviceInfo::Emulator, m_defaultDevice);
+ if (!newIndex.isValid()) // not found the default device
+ defaultDeviceClear();
+ }
+
+ if (!newIndex.isValid() && !m_avdNameFromAdd.isEmpty()) {
+ newIndex = m_model->indexFor(AndroidDeviceInfo::Emulator, m_avdNameFromAdd);
+ m_avdNameFromAdd.clear();
+ }
+
+ if (!newIndex.isValid() && !serialNumber.isEmpty())
newIndex = m_model->indexFor(deviceType, serialNumber);
if (!newIndex.isValid() && !devices.isEmpty()) {
@@ -559,6 +581,26 @@ void AndroidDeviceDialog::devicesRefreshed()
m_ui->stackedWidget->setCurrentIndex(devices.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();
}
void AndroidDeviceDialog::createAvd()
@@ -614,3 +656,10 @@ void AndroidDeviceDialog::showHelp()
pos = m_ui->missingLabel->parentWidget()->mapToGlobal(pos);
QToolTip::showText(pos, msgConnect() + msgAdbListDevices(), this);
}
+
+void AndroidDeviceDialog::defaultDeviceClear()
+{
+ m_ui->lookingForDevice->setVisible(false);
+ m_ui->lookingForDeviceCancel->setVisible(false);
+ m_defaultDevice.clear();
+}
diff --git a/src/plugins/android/androiddevicedialog.h b/src/plugins/android/androiddevicedialog.h
index 51e18959302..2317c4e2c23 100644
--- a/src/plugins/android/androiddevicedialog.h
+++ b/src/plugins/android/androiddevicedialog.h
@@ -36,6 +36,7 @@
#include
#include
#include
+#include
QT_BEGIN_NAMESPACE
class QModelIndex;
@@ -54,7 +55,8 @@ class AndroidDeviceDialog : public QDialog
Q_OBJECT
public:
- explicit AndroidDeviceDialog(int apiLevel, const QString &abi, AndroidConfigurations::Options opts, QWidget *parent = 0);
+ explicit AndroidDeviceDialog(int apiLevel, const QString &abi, AndroidConfigurations::Options opts,
+ const QString &serialNumber, QWidget *parent = 0);
~AndroidDeviceDialog();
AndroidDeviceInfo device();
@@ -74,6 +76,8 @@ private:
const Utils::Environment &environment);
void devicesRefreshed();
void enableOkayButton();
+ void useDefaultDevice();
+ void defaultDeviceClear();
AndroidDeviceModel *m_model;
Ui::AndroidDeviceDialog *m_ui;
@@ -81,6 +85,8 @@ private:
int m_apiLevel;
QString m_abi;
QString m_avdNameFromAdd;
+ QString m_defaultDevice;
+ QTime m_defaultDeviceTimer;
QFutureWatcher m_futureWatcherAddDevice;
QFutureWatcher> m_futureWatcherRefreshDevices;
};
diff --git a/src/plugins/android/androiddevicedialog.ui b/src/plugins/android/androiddevicedialog.ui
index f480a9d54ee..625d6657fc9 100644
--- a/src/plugins/android/androiddevicedialog.ui
+++ b/src/plugins/android/androiddevicedialog.ui
@@ -6,53 +6,54 @@
0
0
- 636
- 438
+ 788
+ 466
Select Android Device
- -
+
-
+
+
+ Qt::Horizontal
+
+
+
+ 40
+ 20
+
+
+
+
+ -
Always use this device for architecture %1
- -
-
-
- Create Android Virtual Device
-
-
-
- -
-
-
- Qt::Horizontal
-
-
- QDialogButtonBox::Cancel|QDialogButtonBox::Ok
-
-
-
- -
-
-
- Refresh Device List
-
-
-
- -
+
-
0
-
-
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
-
@@ -62,7 +63,7 @@
- -
+
-
<html><head/><body><p><a href="aaa"><span style=" text-decoration: underline; color:#0057ae;">My device is missing</span></a></p></body></html>
@@ -72,10 +73,42 @@
+ -
+
+
+
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+ Cancel
+
+
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
-
@@ -96,6 +129,42 @@
+ -
+
+
+ Qt::Horizontal
+
+
+ QDialogButtonBox::Cancel|QDialogButtonBox::Ok
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+ Create Android Virtual Device
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+ Refresh Device List
+
+
+