Skip to content

Commit b7238a4

Browse files
committed
run device list update task only if android menu selected
1 parent e1a5ac9 commit b7238a4

File tree

1 file changed

+122
-116
lines changed

1 file changed

+122
-116
lines changed

src/processing/mode/android/AndroidEditor.java

Lines changed: 122 additions & 116 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,8 @@
3838
import javax.swing.*;
3939
import javax.swing.event.ChangeEvent;
4040
import javax.swing.event.ChangeListener;
41+
import javax.swing.event.MenuEvent;
42+
import javax.swing.event.MenuListener;
4143

4244
import java.awt.event.ActionEvent;
4345
import java.awt.event.ActionListener;
@@ -63,8 +65,6 @@ public class AndroidEditor extends JavaEditor {
6365

6466
private List<AndroidTool> androidTools;
6567

66-
private java.util.Timer updateDevicesTimer;
67-
6868
private JCheckBoxMenuItem fragmentItem;
6969
private JCheckBoxMenuItem wallpaperItem;
7070
private JCheckBoxMenuItem watchfaceItem;
@@ -89,97 +89,6 @@ public PdePreprocessor createPreprocessor(final String sketchName) {
8989
return new AndroidPreprocessor(sketchName);
9090
}
9191

92-
class UpdateDeviceListTask extends TimerTask {
93-
94-
private JMenu deviceMenu;
95-
96-
public UpdateDeviceListTask(JMenu deviceMenu) {
97-
this.deviceMenu = deviceMenu;
98-
}
99-
100-
private Device selectFirstDevice(java.util.List<Device> deviceList) {
101-
if (0 < deviceList.size()) return deviceList.get(0);
102-
return null;
103-
}
104-
105-
@Override
106-
public void run() {
107-
if (androidMode == null || androidMode.getSDK() == null) return;
108-
109-
final Devices devices = Devices.getInstance();
110-
111-
if (appComponent == AndroidBuild.WATCHFACE) {
112-
devices.enableBluetoothDebugging();
113-
}
114-
115-
java.util.List<Device> deviceList = devices.findMultiple(false);
116-
Device selectedDevice = devices.getSelectedDevice();
117-
118-
if (deviceList.size() == 0) {
119-
//if (deviceMenu.getItem(0).isEnabled()) {
120-
if (0 < deviceMenu.getItemCount()) {
121-
deviceMenu.removeAll();
122-
JMenuItem noDevicesItem = new JMenuItem("No connected devices");
123-
noDevicesItem.setEnabled(false);
124-
deviceMenu.add(noDevicesItem);
125-
}
126-
devices.setSelectedDevice(null);
127-
} else {
128-
deviceMenu.removeAll();
129-
130-
if (selectedDevice == null) {
131-
selectedDevice = selectFirstDevice(deviceList);
132-
devices.setSelectedDevice(selectedDevice);
133-
} else {
134-
// check if selected device is still connected
135-
boolean found = false;
136-
for (Device device : deviceList) {
137-
if (device.equals(selectedDevice)) {
138-
found = true;
139-
break;
140-
}
141-
}
142-
143-
if (!found) {
144-
selectedDevice = selectFirstDevice(deviceList);
145-
devices.setSelectedDevice(selectedDevice);
146-
}
147-
}
148-
149-
for (final Device device : deviceList) {
150-
final JCheckBoxMenuItem deviceItem = new JCheckBoxMenuItem(device.getName());
151-
deviceItem.setEnabled(true);
152-
153-
if (device.equals(selectedDevice)) deviceItem.setState(true);
154-
155-
// prevent checkboxmenuitem automatic state changing onclick
156-
deviceItem.addChangeListener(new ChangeListener() {
157-
@Override
158-
public void stateChanged(ChangeEvent e) {
159-
if (device.equals(devices.getSelectedDevice())) deviceItem.setState(true);
160-
else deviceItem.setState(false);
161-
}
162-
});
163-
164-
deviceItem.addActionListener(new ActionListener() {
165-
@Override
166-
public void actionPerformed(ActionEvent e) {
167-
devices.setSelectedDevice(device);
168-
169-
for (int i = 0; i < deviceMenu.getItemCount(); i++) {
170-
((JCheckBoxMenuItem) deviceMenu.getItem(i)).setState(false);
171-
}
172-
173-
deviceItem.setState(true);
174-
}
175-
});
176-
177-
deviceMenu.add(deviceItem);
178-
}
179-
}
180-
}
181-
}
182-
18392

18493
public EditorToolbar createToolbar() {
18594
return new AndroidToolbar(this, base);
@@ -322,21 +231,35 @@ public void actionPerformed(ActionEvent e) {
322231

323232
androidMenu.addSeparator();
324233

325-
final JMenu mobDeveMenu = new JMenu("Devices");
234+
final JMenu devicesMenu = new JMenu("Devices");
326235

327-
JMenuItem noMobDevItem = new JMenuItem("No connected devices");
328-
noMobDevItem.setEnabled(false);
329-
mobDeveMenu.add(noMobDevItem);
330-
androidMenu.add(mobDeveMenu);
236+
JMenuItem noDevicesItem = new JMenuItem("No connected devices");
237+
noDevicesItem.setEnabled(false);
238+
devicesMenu.add(noDevicesItem);
239+
androidMenu.add(devicesMenu);
331240

332-
// start updating device menus
333-
UpdateDeviceListTask task = new UpdateDeviceListTask(mobDeveMenu);
334-
if (updateDevicesTimer == null) {
335-
updateDevicesTimer = new java.util.Timer();
336-
} else {
337-
updateDevicesTimer.cancel();
338-
}
339-
updateDevicesTimer.schedule(task, 5000, 5000);
241+
// Update the device list only when the Android menu is selected.
242+
androidMenu.addMenuListener(new MenuListener() {
243+
UpdateDeviceListTask task;
244+
java.util.Timer timer;
245+
246+
@Override
247+
public void menuSelected(MenuEvent e) {
248+
task = new UpdateDeviceListTask(devicesMenu);
249+
timer = new java.util.Timer();
250+
timer.schedule(task, 400, 3000);
251+
}
252+
253+
@Override
254+
public void menuDeselected(MenuEvent e) {
255+
timer.cancel();
256+
}
257+
258+
@Override
259+
public void menuCanceled(MenuEvent e) {
260+
timer.cancel();
261+
}
262+
});
340263

341264
androidMenu.addSeparator();
342265

@@ -401,15 +324,6 @@ public void showReference(String filename) {
401324
File file = new File(javaReferenceFolder, filename);
402325
Platform.openURL(file.toURI().toString());
403326
}
404-
405-
406-
@Override
407-
public void dispose() {
408-
if (updateDevicesTimer != null) {
409-
updateDevicesTimer.cancel();
410-
}
411-
super.dispose();
412-
}
413327

414328

415329
public void statusError(String what) {
@@ -636,8 +550,100 @@ public void actionPerformed(ActionEvent e) {
636550
// editor.statusNotice("Resetting the Android Debug Bridge server.");
637551
final Devices devices = Devices.getInstance();
638552
devices.killAdbServer();
553+
devices.startAdbServer();
639554
}
640555
});
641-
androidMenu.add(item);
556+
androidMenu.add(item);
557+
}
558+
559+
560+
class UpdateDeviceListTask extends TimerTask {
561+
562+
private JMenu deviceMenu;
563+
564+
public UpdateDeviceListTask(JMenu deviceMenu) {
565+
this.deviceMenu = deviceMenu;
566+
}
567+
568+
private Device selectFirstDevice(java.util.List<Device> deviceList) {
569+
if (0 < deviceList.size()) return deviceList.get(0);
570+
return null;
571+
}
572+
573+
@Override
574+
public void run() {
575+
if (androidMode == null || androidMode.getSDK() == null) return;
576+
577+
final Devices devices = Devices.getInstance();
578+
579+
if (appComponent == AndroidBuild.WATCHFACE) {
580+
devices.enableBluetoothDebugging();
581+
}
582+
583+
java.util.List<Device> deviceList = devices.findMultiple(false);
584+
Device selectedDevice = devices.getSelectedDevice();
585+
586+
if (deviceList.size() == 0) {
587+
if (0 < deviceMenu.getItemCount()) {
588+
deviceMenu.removeAll();
589+
JMenuItem noDevicesItem = new JMenuItem("No connected devices");
590+
noDevicesItem.setEnabled(false);
591+
deviceMenu.add(noDevicesItem);
592+
}
593+
devices.setSelectedDevice(null);
594+
} else {
595+
deviceMenu.removeAll();
596+
597+
if (selectedDevice == null) {
598+
selectedDevice = selectFirstDevice(deviceList);
599+
devices.setSelectedDevice(selectedDevice);
600+
} else {
601+
// check if selected device is still connected
602+
boolean found = false;
603+
for (Device device : deviceList) {
604+
if (device.equals(selectedDevice)) {
605+
found = true;
606+
break;
607+
}
608+
}
609+
610+
if (!found) {
611+
selectedDevice = selectFirstDevice(deviceList);
612+
devices.setSelectedDevice(selectedDevice);
613+
}
614+
}
615+
616+
for (final Device device : deviceList) {
617+
final JCheckBoxMenuItem deviceItem = new JCheckBoxMenuItem(device.getName());
618+
deviceItem.setEnabled(true);
619+
620+
if (device.equals(selectedDevice)) deviceItem.setState(true);
621+
622+
// prevent checkboxmenuitem automatic state changing onclick
623+
deviceItem.addChangeListener(new ChangeListener() {
624+
@Override
625+
public void stateChanged(ChangeEvent e) {
626+
if (device.equals(devices.getSelectedDevice())) deviceItem.setState(true);
627+
else deviceItem.setState(false);
628+
}
629+
});
630+
631+
deviceItem.addActionListener(new ActionListener() {
632+
@Override
633+
public void actionPerformed(ActionEvent e) {
634+
devices.setSelectedDevice(device);
635+
636+
for (int i = 0; i < deviceMenu.getItemCount(); i++) {
637+
((JCheckBoxMenuItem) deviceMenu.getItem(i)).setState(false);
638+
}
639+
640+
deviceItem.setState(true);
641+
}
642+
});
643+
644+
deviceMenu.add(deviceItem);
645+
}
646+
}
647+
}
642648
}
643649
}

0 commit comments

Comments
 (0)