From a5bd64461d3e800f3af987f358018966cc5e94e3 Mon Sep 17 00:00:00 2001 From: omerfarukkykc <54690370+omerfarukkykc@users.noreply.github.com> Date: Fri, 19 Apr 2024 21:02:12 +0300 Subject: [PATCH] fix(gui): remember selected device in debugger (PR #2153) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * ADBDialog->launchApp() if multiple devices presented should let user select the one they desire. * compare objects directly instead parsing --------- Co-authored-by: Ă–mer Faruk KAYIKCI Co-authored-by: Skylot <118523+skylot@users.noreply.github.com> --- .../src/main/java/jadx/gui/ui/dialog/ADBDialog.java | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/jadx-gui/src/main/java/jadx/gui/ui/dialog/ADBDialog.java b/jadx-gui/src/main/java/jadx/gui/ui/dialog/ADBDialog.java index 9ce1f9020..bacabacd0 100644 --- a/jadx-gui/src/main/java/jadx/gui/ui/dialog/ADBDialog.java +++ b/jadx-gui/src/main/java/jadx/gui/ui/dialog/ADBDialog.java @@ -69,6 +69,7 @@ public class ADBDialog extends JDialog implements ADB.DeviceStateListener, ADB.J private transient JTree procTree; private Socket deviceSocket; private transient List deviceNodes = new ArrayList<>(); + private transient DeviceNode lastSelectedDeviceNode; public ADBDialog(MainWindow mainWindow) { super(mainWindow); @@ -147,6 +148,15 @@ public class ADBDialog extends JDialog implements ADB.DeviceStateListener, ADB.J } }); + procTree.addTreeSelectionListener(event -> { + Object selectedNode = procTree.getLastSelectedPathComponent(); + if (selectedNode instanceof DeviceTreeNode) { + lastSelectedDeviceNode = deviceNodes.stream() + .filter(item -> item.tNode == selectedNode) + .findFirst().orElse(null); + } + }); + JPanel btnPane = new JPanel(); BoxLayout boxLayout = new BoxLayout(btnPane, BoxLayout.LINE_AXIS); btnPane.setLayout(boxLayout); @@ -511,7 +521,8 @@ public class ADBDialog extends JDialog implements ADB.DeviceStateListener, ADB.J return; } String fullName = pkg + "/" + cls.getCls().getClassNode().getClassInfo().getFullName(); - ADBDevice device = deviceNodes.get(0).device; // TODO: if multiple devices presented should let user select the one they desire. + + ADBDevice device = (lastSelectedDeviceNode == null) ? deviceNodes.get(0).device : lastSelectedDeviceNode.device; if (device != null) { try { device.launchApp(fullName);