From affe3ccf510e40ee21709db581dff08089f03725 Mon Sep 17 00:00:00 2001 From: Assam Boudjelthia Date: Sun, 26 Sep 2021 23:06:00 +0300 Subject: [PATCH] Android: Make refresh action device specific Change-Id: I18386ad88e04696068f5f127cadb7ffcc6f25a56 Reviewed-by: hjk Reviewed-by: Alessandro Portale --- src/plugins/android/androiddevice.cpp | 27 +++++++++++++++++++++++++-- src/plugins/android/androiddevice.h | 1 + 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/src/plugins/android/androiddevice.cpp b/src/plugins/android/androiddevice.cpp index ea4ddbf8e16..662becee339 100644 --- a/src/plugins/android/androiddevice.cpp +++ b/src/plugins/android/androiddevice.cpp @@ -151,8 +151,9 @@ AndroidDevice::AndroidDevice() setOsType(Utils::OsTypeOtherUnix); setDeviceState(DeviceConnected); - addDeviceAction({tr("Refresh"), [](const IDevice::Ptr &, QWidget *) { - AndroidDeviceManager::instance()->updateDevicesListOnce(); + addDeviceAction({tr("Refresh"), [](const IDevice::Ptr &device, QWidget *parent) { + Q_UNUSED(parent) + AndroidDeviceManager::instance()->updateDeviceState(device); }}); addEmulatorActionsIfNotFound(); @@ -448,6 +449,28 @@ void AndroidDeviceManager::updateDevicesListOnce() } } +void AndroidDeviceManager::updateDeviceState(const ProjectExplorer::IDevice::Ptr &device) +{ + const AndroidDevice *dev = static_cast(device.data()); + const QString serial = dev->serialNumber(); + DeviceManager *const devMgr = DeviceManager::instance(); + const Utils::Id id = dev->id(); + if (serial.isEmpty() && dev->machineType() == IDevice::Emulator) { + devMgr->setDeviceState(id, IDevice::DeviceConnected); + return; + } + + const QStringList args = AndroidDeviceInfo::adbSelector(serial) << "shell" << "echo" << "1"; + const SdkToolResult result = AndroidManager::runAdbCommand(args); + const int success = result.success(); + if (success) + devMgr->setDeviceState(id, IDevice::DeviceReadyToUse); + else if (dev->machineType() == IDevice::Emulator || result.stdErr().contains("unauthorized")) + devMgr->setDeviceState(id, IDevice::DeviceConnected); + else + devMgr->setDeviceState(id, IDevice::DeviceDisconnected); +} + void AndroidDeviceManager::startAvd(const ProjectExplorer::IDevice::Ptr &device, QWidget *parent) { Q_UNUSED(parent) diff --git a/src/plugins/android/androiddevice.h b/src/plugins/android/androiddevice.h index 31249e84808..e9ba8be038c 100644 --- a/src/plugins/android/androiddevice.h +++ b/src/plugins/android/androiddevice.h @@ -101,6 +101,7 @@ public: void setupDevicesWatcher(); void updateDevicesList(); void updateDevicesListOnce(); + void updateDeviceState(const ProjectExplorer::IDevice::Ptr &device); void startAvd(const ProjectExplorer::IDevice::Ptr &device, QWidget *parent = nullptr); void eraseAvd(const ProjectExplorer::IDevice::Ptr &device, QWidget *parent = nullptr);