diff options
author | Jarek Kobus <[email protected]> | 2024-05-14 09:32:37 +0200 |
---|---|---|
committer | Jarek Kobus <[email protected]> | 2024-05-21 08:58:54 +0000 |
commit | 60f4822d5f91dfc0f8f565c0e57ea233557fe1b2 (patch) | |
tree | 93a7dd5cc9597f02b8b73d0e8bc990e2bfa68231 /src/plugins/android/androiddevice.cpp | |
parent | dda9234255bf4e5ce94d0ae29ff4b985fef5de73 (diff) |
Android: Supply newly created device with path
Otherwise, the newly created device is going to be removed
and recreated on subsequent HandleAvdsListChange()
causing flickering of the devices combobox in settings.
Change-Id: Idcf58f24eb7f4d4200881cfa912d0866f54d362a
Reviewed-by: <[email protected]>
Reviewed-by: Alessandro Portale <[email protected]>
Diffstat (limited to 'src/plugins/android/androiddevice.cpp')
-rw-r--r-- | src/plugins/android/androiddevice.cpp | 52 |
1 files changed, 37 insertions, 15 deletions
diff --git a/src/plugins/android/androiddevice.cpp b/src/plugins/android/androiddevice.cpp index 0c1b29b46b6..997c0ced0af 100644 --- a/src/plugins/android/androiddevice.cpp +++ b/src/plugins/android/androiddevice.cpp @@ -644,6 +644,18 @@ QString AndroidDeviceManager::getRunningAvdsSerialNumber(const QString &name) co return {}; } +static FilePath avdFilePath() +{ + QString avdEnvVar = qtcEnvironmentVariable("ANDROID_AVD_HOME"); + if (avdEnvVar.isEmpty()) { + avdEnvVar = qtcEnvironmentVariable("ANDROID_SDK_HOME"); + if (avdEnvVar.isEmpty()) + avdEnvVar = qtcEnvironmentVariable("HOME"); + avdEnvVar.append("/.android/avd"); + } + return FilePath::fromUserInput(avdEnvVar); +} + void AndroidDeviceManager::setupDevicesWatcher() { if (!androidConfig().adbToolPath().exists()) { @@ -686,15 +698,7 @@ void AndroidDeviceManager::setupDevicesWatcher() // Setup AVD filesystem watcher to listen for changes when an avd is created/deleted, // or started/stopped - QString avdEnvVar = qtcEnvironmentVariable("ANDROID_AVD_HOME"); - if (avdEnvVar.isEmpty()) { - avdEnvVar = qtcEnvironmentVariable("ANDROID_SDK_HOME"); - if (avdEnvVar.isEmpty()) - avdEnvVar = qtcEnvironmentVariable("HOME"); - avdEnvVar.append("/.android/avd"); - } - const FilePath avdPath = FilePath::fromUserInput(avdEnvVar); - m_avdFileSystemWatcher.addPath(avdPath.toString()); + m_avdFileSystemWatcher.addPath(avdFilePath().toString()); connect(&m_avdsFutureWatcher, &QFutureWatcherBase::finished, this, &AndroidDeviceManager::HandleAvdsListChange); connect(&m_avdFileSystemWatcher, &QFileSystemWatcher::directoryChanged, this, [this] { @@ -708,6 +712,25 @@ void AndroidDeviceManager::setupDevicesWatcher() updateAvdsList(); } +IDevice::Ptr AndroidDeviceManager::createDeviceFromInfo(const CreateAvdInfo &info) +{ + if (info.apiLevel < 0) { + qCWarning(androidDeviceLog) << "System image of the created AVD is nullptr"; + return IDevice::Ptr(); + } + AndroidDevice *dev = new AndroidDevice; + const Utils::Id deviceId = AndroidDevice::idFromAvdInfo(info); + dev->setupId(IDevice::AutoDetected, deviceId); + dev->setMachineType(IDevice::Emulator); + dev->settings()->displayName.setValue(info.name); + dev->setDeviceState(IDevice::DeviceConnected); + dev->setAvdPath(avdFilePath() / (info.name + ".avd")); + dev->setExtraData(Constants::AndroidAvdName, info.name); + dev->setExtraData(Constants::AndroidCpuAbi, {info.abi}); + dev->setExtraData(Constants::AndroidSdk, info.apiLevel); + return IDevice::Ptr(dev); +} + void AndroidDeviceManager::HandleAvdsListChange() { DeviceManager *const devMgr = DeviceManager::instance(); @@ -892,16 +915,15 @@ public: if (dialog.exec() != QDialog::Accepted) return IDevice::Ptr(); - const IDevice::Ptr dev = dialog.device(); + const IDevice::Ptr dev = AndroidDeviceManager::createDeviceFromInfo(dialog.avdInfo()); if (const auto androidDev = static_cast<AndroidDevice *>(dev.get())) { qCDebug(androidDeviceLog, "Created new Android AVD id \"%s\".", qPrintable(androidDev->avdName())); - } else { - AndroidDeviceWidget::criticalDialog( - Tr::tr("The device info returned from AvdDialog is invalid.")); + return dev; } - - return IDevice::Ptr(dev); + AndroidDeviceWidget::criticalDialog( + Tr::tr("The device info returned from AvdDialog is invalid.")); + return IDevice::Ptr(); }); } }; |