From f0ba53cd93725d272b2f311ad69f144d32e5b92c Mon Sep 17 00:00:00 2001 From: Jarek Kobus Date: Thu, 22 Aug 2024 10:32:03 +0200 Subject: [PATCH] Android: Hide runAdbCommand in cpp file Simplify SdkToolResult struct a bit. Change-Id: I77c72216b94a64ace9bbc4cb342462ff2bf10e95 Reviewed-by: Alessandro Portale --- src/plugins/android/androiddevice.cpp | 51 +++++++++++++++++++------- src/plugins/android/androidmanager.cpp | 25 ------------- src/plugins/android/androidmanager.h | 16 -------- 3 files changed, 38 insertions(+), 54 deletions(-) diff --git a/src/plugins/android/androiddevice.cpp b/src/plugins/android/androiddevice.cpp index 81d74813e26..3fc78006edd 100644 --- a/src/plugins/android/androiddevice.cpp +++ b/src/plugins/android/androiddevice.cpp @@ -43,6 +43,8 @@ using namespace ProjectExplorer; using namespace Tasking; using namespace Utils; +using namespace std::chrono_literals; + namespace { static Q_LOGGING_CATEGORY(androidDeviceLog, "qtc.android.androiddevice", QtWarningMsg) } @@ -56,6 +58,32 @@ static constexpr char wifiDevicePort[] = "5555"; enum TagModification { CommentOut, Uncomment }; static class AndroidDeviceManagerInstance *s_instance = nullptr; +struct SdkToolResult +{ + bool success = false; + QString stdOut; + QString stdErr; + QString exitMessage; +}; + +static SdkToolResult runAdbCommand(const QStringList &args) +{ + Process process; + const CommandLine command{AndroidConfig::adbToolPath(), args}; + qCDebug(androidDeviceLog) << "Running command (sync):" << command.toUserOutput(); + process.setCommand(command); + process.runBlocking(30s, EventLoopMode::On); + const bool success = process.result() == ProcessResult::FinishedWithSuccess; + const SdkToolResult result = {success, + process.cleanedStdOut().trimmed(), + process.cleanedStdErr().trimmed(), + success ? QString() : process.exitMessage()}; + qCDebug(androidDeviceLog) << "Command finshed (sync):" << command.toUserOutput() + << "Success:" << success + << "Output:" << process.allRawOutput(); + return result; +} + class AndroidDeviceManagerInstance : public QObject { public: @@ -86,10 +114,10 @@ static QString displayNameFromInfo(const AndroidDeviceInfo &info) static IDevice::DeviceState getDeviceState(const QString &serial, IDevice::MachineType type) { const QStringList args = AndroidDeviceInfo::adbSelector(serial) << "shell" << "echo 1"; - const SdkToolResult result = AndroidManager::runAdbCommand(args); - if (result.success()) + const SdkToolResult result = runAdbCommand(args); + if (result.success) return IDevice::DeviceReadyToUse; - else if (type == IDevice::Emulator || result.stdErr().contains("unauthorized")) + else if (type == IDevice::Emulator || result.stdErr.contains("unauthorized")) return IDevice::DeviceConnected; return IDevice::DeviceDisconnected; } @@ -130,7 +158,7 @@ static void setEmulatorArguments(QWidget *parent) static QString emulatorName(const QString &serialNumber) { const QStringList args = AndroidDeviceInfo::adbSelector(serialNumber) << "emu" << "avd" << "name"; - return AndroidManager::runAdbCommand(args).stdOut(); + return runAdbCommand(args).stdOut; } static QString getRunningAvdsSerialNumber(const QString &name) @@ -213,11 +241,9 @@ static void setupWifiForDevice(const IDevice::Ptr &device, QWidget *parent) // prepare port QStringList args = adbSelector; args.append({"tcpip", wifiDevicePort}); - const SdkToolResult result = AndroidManager::runAdbCommand(args); - if (!result.success()) { + if (!runAdbCommand(args).success) { AndroidDeviceWidget::criticalDialog( - Tr::tr("Opening connection port %1 failed.").arg(wifiDevicePort), - parent); + Tr::tr("Opening connection port %1 failed.").arg(wifiDevicePort), parent); return; } @@ -225,8 +251,8 @@ static void setupWifiForDevice(const IDevice::Ptr &device, QWidget *parent) // Get device IP address QStringList args = adbSelector; args.append({"shell", "ip", "route"}); - const SdkToolResult ipRes = AndroidManager::runAdbCommand(args); - if (!ipRes.success()) { + const SdkToolResult ipRes = runAdbCommand(args); + if (!ipRes.success) { AndroidDeviceWidget::criticalDialog( Tr::tr("Retrieving the device IP address failed."), parent); return; @@ -235,7 +261,7 @@ static void setupWifiForDevice(const IDevice::Ptr &device, QWidget *parent) // Expected output from "ip route" is: // 192.168.1.0/24 dev wlan0 proto kernel scope link src 192.168.1.190 // where the ip of interest is at the end of the line - const QStringList ipParts = ipRes.stdOut().split(" "); + const QStringList ipParts = ipRes.stdOut.split(" "); QString ip; if (!ipParts.isEmpty()) { ip = ipParts.last(); @@ -249,8 +275,7 @@ static void setupWifiForDevice(const IDevice::Ptr &device, QWidget *parent) // Connect to device args = adbSelector; args.append({"connect", QString("%1:%2").arg(ip).arg(wifiDevicePort)}); - const SdkToolResult connectRes = AndroidManager::runAdbCommand(args); - if (!connectRes.success()) { + if (!runAdbCommand(args).success) { AndroidDeviceWidget::criticalDialog( Tr::tr("Connecting to the device IP \"%1\" failed.").arg(ip), parent); diff --git a/src/plugins/android/androidmanager.cpp b/src/plugins/android/androidmanager.cpp index e15e3b5a81a..6098862076b 100644 --- a/src/plugins/android/androidmanager.cpp +++ b/src/plugins/android/androidmanager.cpp @@ -645,29 +645,4 @@ Process *startAdbProcess(const QStringList &args, QString *err) return nullptr; } -static SdkToolResult runCommand(const CommandLine &command, const QByteArray &writeData, - int timeoutS) -{ - Android::SdkToolResult cmdResult; - Process cmdProc; - cmdProc.setWriteData(writeData); - qCDebug(androidManagerLog) << "Running command (sync):" << command.toUserOutput(); - cmdProc.setCommand(command); - cmdProc.runBlocking(std::chrono::seconds(timeoutS), EventLoopMode::On); - cmdResult.m_stdOut = cmdProc.cleanedStdOut().trimmed(); - cmdResult.m_stdErr = cmdProc.cleanedStdErr().trimmed(); - cmdResult.m_success = cmdProc.result() == ProcessResult::FinishedWithSuccess; - qCDebug(androidManagerLog) << "Command finshed (sync):" << command.toUserOutput() - << "Success:" << cmdResult.m_success - << "Output:" << cmdProc.allRawOutput(); - if (!cmdResult.success()) - cmdResult.m_exitMessage = cmdProc.exitMessage(); - return cmdResult; -} - -SdkToolResult runAdbCommand(const QStringList &args, const QByteArray &writeData, int timeoutS) -{ - return runCommand({AndroidConfig::adbToolPath(), args}, writeData, timeoutS); -} - } // namespace Android::AndroidManager diff --git a/src/plugins/android/androidmanager.h b/src/plugins/android/androidmanager.h index 2557a3675f8..eec4799ad3d 100644 --- a/src/plugins/android/androidmanager.h +++ b/src/plugins/android/androidmanager.h @@ -18,20 +18,6 @@ class Process; namespace Android { -class SdkToolResult { -public: - SdkToolResult() = default; - bool success() const { return m_success; } - const QString &stdOut() const { return m_stdOut; } - const QString &stdErr() const { return m_stdErr; } - const QString &exitMessage() const { return m_exitMessage; } - - bool m_success = false; - QString m_stdOut; - QString m_stdErr; - QString m_exitMessage; -}; - namespace AndroidManager { @@ -81,8 +67,6 @@ bool checkCertificateExists(const Utils::FilePath &keystorePath, const QString &keystorePasswd, const QString &alias); Utils::Process *startAdbProcess(const QStringList &args, QString *err = nullptr); -SdkToolResult runAdbCommand(const QStringList &args, const QByteArray &writeData = {}, - int timeoutS = 30); QJsonObject deploymentSettings(const ProjectExplorer::Target *target); bool isQtCreatorGenerated(const Utils::FilePath &deploymentFile);