From 0067d5a4450f36a90e4d30cbb8e2898e05454a92 Mon Sep 17 00:00:00 2001 From: Jarek Kobus Date: Wed, 24 Jul 2024 09:16:47 +0200 Subject: [PATCH] Android: Introduce removeForwardPortRecipe() It's going to be used in couple of places. Change-Id: I21c7724da03fb1d294d53fbb372ca4b909a3a842 Reviewed-by: Alessandro Portale --- src/plugins/android/androidrunnerworker.cpp | 38 +++++++++++++++++++++ src/plugins/android/androidrunnerworker.h | 2 ++ 2 files changed, 40 insertions(+) diff --git a/src/plugins/android/androidrunnerworker.cpp b/src/plugins/android/androidrunnerworker.cpp index 96981286401..d4d6d7d7a1e 100644 --- a/src/plugins/android/androidrunnerworker.cpp +++ b/src/plugins/android/androidrunnerworker.cpp @@ -20,6 +20,8 @@ #include #include +#include + #include #include #include @@ -606,6 +608,42 @@ void AndroidRunnerWorker::startDebuggerServer(const QString &packageDir, } } +ExecutableItem AndroidRunnerWorker::removeForwardPortRecipe( + const QString &port, const QString &adbArg, const QString &portType) +{ + const auto onForwardListSetup = [](Process &process) { + process.setCommand({AndroidConfig::adbToolPath(), {"forward", "--list"}}); + }; + const auto onForwardListDone = [port](const Process &process) { + return process.cleanedStdOut().trimmed().contains(port); + }; + + const auto onForwardRemoveSetup = [this, port](Process &process) { + process.setCommand({AndroidConfig::adbToolPath(), {selector(), "--remove", port}}); + }; + const auto onForwardRemoveDone = [this](const Process &process) { + emit remoteErrorOutput(process.cleanedStdErr().trimmed()); + return true; + }; + + const auto onForwardPortSetup = [this, port, adbArg](Process &process) { + process.setCommand({AndroidConfig::adbToolPath(), {selector(), port, adbArg}}); + }; + const auto onForwardPortDone = [this, port, portType](DoneWith result) { + if (result == DoneWith::Success) + m_afterFinishAdbCommands.push_back("forward --remove " + port); + else + emit remoteProcessFinished(Tr::tr("Failed to forward %1 debugging ports.").arg(portType)); + }; + + return Group { + If (ProcessTask(onForwardListSetup, onForwardListDone)) >> Then { + ProcessTask(onForwardRemoveSetup, onForwardRemoveDone, CallDoneIf::Error) + }, + ProcessTask(onForwardPortSetup, onForwardPortDone) + }; +} + ExecutableItem AndroidRunnerWorker::pidRecipe() { const Storage pidStorage; diff --git a/src/plugins/android/androidrunnerworker.h b/src/plugins/android/androidrunnerworker.h index d969aa1f181..ed287f2bf4e 100644 --- a/src/plugins/android/androidrunnerworker.h +++ b/src/plugins/android/androidrunnerworker.h @@ -74,6 +74,8 @@ private: }; void onProcessIdChanged(const PidUserPair &pidUser); bool isPreNougat() const { return m_apiLevel > 0 && m_apiLevel <= 23; } + Tasking::ExecutableItem removeForwardPortRecipe(const QString &port, const QString &adbArg, + const QString &portType); Tasking::ExecutableItem pidRecipe(); // Create the processes and timer in the worker thread, for correct thread affinity