From 6daa558fb3adf3ee30332cee93a20955c8af6f5b Mon Sep 17 00:00:00 2001 From: Fawzi Mohamed Date: Fri, 14 Feb 2014 01:08:09 +0100 Subject: [PATCH] ios: detect switch usermode -> dev mode this does polling, but only with devices in user mode connected... Change-Id: I828715a2b4a35f8f9b3bdbcf0da9a74990f3047f Reviewed-by: Daniel Teske Reviewed-by: Kai Koehne Reviewed-by: Fawzi Mohamed --- src/plugins/ios/iosdevice.cpp | 65 +++++++++++++++++++++-------------- src/plugins/ios/iosdevice.h | 6 ++++ 2 files changed, 46 insertions(+), 25 deletions(-) diff --git a/src/plugins/ios/iosdevice.cpp b/src/plugins/ios/iosdevice.cpp index ba4631be823..9dda6e05d2c 100644 --- a/src/plugins/ios/iosdevice.cpp +++ b/src/plugins/ios/iosdevice.cpp @@ -312,34 +312,39 @@ void IosDeviceManager::deviceInfo(IosToolHandler *, const QString &uid, QLatin1String devStatusKey = QLatin1String("developerStatus"); if (info.contains(devStatusKey)) { QString devStatus = info.value(devStatusKey); - if (devStatus == QLatin1String("*off*")) { - devManager->setDeviceState(newDev->id(), IDevice::DeviceConnected); - if (!newDev->m_ignoreDevice && !IosConfigurations::ignoreAllDevices()) { - QMessageBox mBox; - mBox.setText(tr("An iOS device in user mode has been detected.")); - mBox.setInformativeText(tr("Do you want to see how to set it up for development?")); - mBox.setStandardButtons(QMessageBox::NoAll | QMessageBox::No | QMessageBox::Yes); - mBox.setDefaultButton(QMessageBox::Yes); - int ret = mBox.exec(); - switch (ret) { - case QMessageBox::Yes: - Core::HelpManager::handleHelpRequest( - QLatin1String("qthelp://org.qt-project.qtcreator/doc/creator-developing-ios.html")); - break; - case QMessageBox::No: - newDev->m_ignoreDevice = true; - break; - case QMessageBox::NoAll: - IosConfigurations::setIgnoreAllDevices(true); - break; - default: - break; - } - } - } else if (devStatus == QLatin1String("Development")) { + if (devStatus == QLatin1String("Development")) { devManager->setDeviceState(newDev->id(), IDevice::DeviceReadyToUse); + m_userModeDeviceIds.removeOne(uid); } else { devManager->setDeviceState(newDev->id(), IDevice::DeviceConnected); + bool shouldIgnore = newDev->m_ignoreDevice; + newDev->m_ignoreDevice = true; + if (devStatus == QLatin1String("*off*")) { + if (!shouldIgnore && !IosConfigurations::ignoreAllDevices()) { + QMessageBox mBox; + mBox.setText(tr("An iOS device in user mode has been detected.")); + mBox.setInformativeText(tr("Do you want to see how to set it up for development?")); + mBox.setStandardButtons(QMessageBox::NoAll | QMessageBox::No | QMessageBox::Yes); + mBox.setDefaultButton(QMessageBox::Yes); + int ret = mBox.exec(); + switch (ret) { + case QMessageBox::Yes: + Core::HelpManager::handleHelpRequest( + QLatin1String("qthelp://org.qt-project.qtcreator/doc/creator-developing-ios.html")); + break; + case QMessageBox::No: + break; + case QMessageBox::NoAll: + IosConfigurations::setIgnoreAllDevices(true); + break; + default: + break; + } + } + } + if (!m_userModeDeviceIds.contains(uid)) + m_userModeDeviceIds.append(uid); + m_userModeDevicesTimer.start(); } } } @@ -497,6 +502,16 @@ void IosDeviceManager::monitorAvailableDevices() IosDeviceManager::IosDeviceManager(QObject *parent) : QObject(parent) { + m_userModeDevicesTimer.setSingleShot(true); + m_userModeDevicesTimer.setInterval(8000); + connect(&m_userModeDevicesTimer, SIGNAL(timeout()), + SLOT(updateUserModeDevices())); +} + +void IosDeviceManager::updateUserModeDevices() +{ + foreach (const QString &uid, m_userModeDeviceIds) + updateInfo(uid); } IosDeviceManager *IosDeviceManager::instance() diff --git a/src/plugins/ios/iosdevice.h b/src/plugins/ios/iosdevice.h index aa572ef7000..12d11b0c37c 100644 --- a/src/plugins/ios/iosdevice.h +++ b/src/plugins/ios/iosdevice.h @@ -38,6 +38,8 @@ #include #include #include +#include +#include namespace ProjectExplorer{ class Kit; @@ -100,8 +102,12 @@ public slots: const Ios::IosToolHandler::Dict &info); void infoGathererFinished(Ios::IosToolHandler *gatherer); void monitorAvailableDevices(); +private slots: + void updateUserModeDevices(); private: IosDeviceManager(QObject *parent = 0); + QTimer m_userModeDevicesTimer; + QStringList m_userModeDeviceIds; }; namespace IosKitInformation {