Skip to content

Commit 07d947e

Browse files
committed
SelectedDeviceId logic
1 parent c4eb97c commit 07d947e

File tree

2 files changed

+75
-26
lines changed

2 files changed

+75
-26
lines changed

src/processing/mode/android/AndroidEditor.java

Lines changed: 66 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -30,12 +30,76 @@
3030
import java.awt.event.ActionListener;
3131
import java.io.File;
3232
import java.io.IOException;
33-
import java.util.TimerTask;
3433
import java.util.Timer;
34+
import java.util.TimerTask;
3535

3636
public class AndroidEditor extends JavaEditor {
3737
private AndroidMode androidMode;
3838

39+
class UpdateDeviceListTask extends TimerTask {
40+
41+
private JMenu deviceMenu;
42+
43+
public UpdateDeviceListTask(JMenu deviceMenu) {
44+
this.deviceMenu = deviceMenu;
45+
}
46+
47+
@Override
48+
public void run() {
49+
final Devices devices = Devices.getInstance();
50+
java.util.List<Device> deviceList = devices.findMultiple(false);
51+
String selectedDeviceId = devices.getSelectedDeviceId();
52+
53+
if(deviceList.size() == 0) {
54+
if(deviceMenu.getItem(0).isEnabled()) {
55+
deviceMenu.removeAll();
56+
JMenuItem noDevicesItem = new JMenuItem("No connected devices");
57+
noDevicesItem.setEnabled(false);
58+
deviceMenu.add(noDevicesItem);
59+
}
60+
61+
devices.setSelectedDeviceId(null);
62+
} else {
63+
deviceMenu.removeAll();
64+
JMenuItem deviceItem;
65+
66+
if(selectedDeviceId == null) {
67+
selectedDeviceId = deviceList.get(0).getId();
68+
devices.setSelectedDeviceId(selectedDeviceId);
69+
} else {
70+
// check if selected device is still connected
71+
boolean found = false;
72+
for (Device device : deviceList) {
73+
if(device.getId().equals(selectedDeviceId)) {
74+
found = true;
75+
break;
76+
}
77+
}
78+
79+
if(!found) {
80+
selectedDeviceId = deviceList.get(0).getId();
81+
devices.setSelectedDeviceId(selectedDeviceId);
82+
}
83+
}
84+
85+
for (final Device device : deviceList) {
86+
deviceItem = new JMenuItem(device.getName());
87+
deviceItem.setEnabled(true);
88+
deviceItem.addActionListener(new ActionListener() {
89+
@Override
90+
public void actionPerformed(ActionEvent e) {
91+
devices.setSelectedDeviceId(device.getId());
92+
}
93+
});
94+
95+
deviceMenu.add(deviceItem);
96+
}
97+
}
98+
99+
deviceMenu.updateUI();
100+
}
101+
}
102+
39103
protected AndroidEditor(Base base, String path, EditorState state, Mode mode) throws Exception {
40104
super(base, path, state, mode);
41105
androidMode = (AndroidMode) mode;
@@ -128,31 +192,7 @@ public void actionPerformed(ActionEvent e) {
128192
menu.add(deviceMenu);
129193

130194
// start updating device menus
131-
TimerTask task = new TimerTask() {
132-
@Override
133-
public void run() {
134-
Devices devices = Devices.getInstance();
135-
java.util.List<Device> deviceList = devices.findMultiple(false);
136-
137-
if(deviceList.size() == 0) {
138-
if(deviceMenu.getItem(0).isEnabled()) {
139-
deviceMenu.removeAll();
140-
JMenuItem noDevicesItem = new JMenuItem("No connected devices");
141-
noDevicesItem.setEnabled(false);
142-
deviceMenu.add(noDevicesItem);
143-
}
144-
} else {
145-
deviceMenu.removeAll();
146-
JMenuItem deviceItem;
147-
148-
for(int i = 0; i < deviceList.size(); i++) {
149-
deviceItem = new JMenuItem(deviceList.get(i).getName());
150-
deviceItem.setEnabled(true);
151-
deviceMenu.add(deviceItem);
152-
}
153-
}
154-
}
155-
};
195+
UpdateDeviceListTask task = new UpdateDeviceListTask(deviceMenu);
156196
Timer timer = new Timer();
157197
timer.schedule(task, 0, 5000);
158198

src/processing/mode/android/Devices.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@ class Devices {
2626

2727
private static final Devices INSTANCE = new Devices();
2828

29+
private String selectedDeviceId;
30+
2931
public static Devices getInstance() {
3032
return INSTANCE;
3133
}
@@ -35,6 +37,13 @@ public static Devices getInstance() {
3537
private final ExecutorService deviceLaunchThread =
3638
Executors.newSingleThreadExecutor();
3739

40+
public String getSelectedDeviceId() {
41+
return selectedDeviceId;
42+
}
43+
44+
public void setSelectedDeviceId(String selectedDeviceId) {
45+
this.selectedDeviceId = selectedDeviceId;
46+
}
3847

3948
public static void killAdbServer() {
4049
System.out.println("Shutting down any existing adb server...");

0 commit comments

Comments
 (0)