38
38
import javax .swing .*;
39
39
import javax .swing .event .ChangeEvent ;
40
40
import javax .swing .event .ChangeListener ;
41
+ import javax .swing .event .MenuEvent ;
42
+ import javax .swing .event .MenuListener ;
41
43
42
44
import java .awt .event .ActionEvent ;
43
45
import java .awt .event .ActionListener ;
@@ -63,8 +65,6 @@ public class AndroidEditor extends JavaEditor {
63
65
64
66
private List <AndroidTool > androidTools ;
65
67
66
- private java .util .Timer updateDevicesTimer ;
67
-
68
68
private JCheckBoxMenuItem fragmentItem ;
69
69
private JCheckBoxMenuItem wallpaperItem ;
70
70
private JCheckBoxMenuItem watchfaceItem ;
@@ -89,97 +89,6 @@ public PdePreprocessor createPreprocessor(final String sketchName) {
89
89
return new AndroidPreprocessor (sketchName );
90
90
}
91
91
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
-
183
92
184
93
public EditorToolbar createToolbar () {
185
94
return new AndroidToolbar (this , base );
@@ -322,21 +231,35 @@ public void actionPerformed(ActionEvent e) {
322
231
323
232
androidMenu .addSeparator ();
324
233
325
- final JMenu mobDeveMenu = new JMenu ("Devices" );
234
+ final JMenu devicesMenu = new JMenu ("Devices" );
326
235
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 );
331
240
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
+ });
340
263
341
264
androidMenu .addSeparator ();
342
265
@@ -401,15 +324,6 @@ public void showReference(String filename) {
401
324
File file = new File (javaReferenceFolder , filename );
402
325
Platform .openURL (file .toURI ().toString ());
403
326
}
404
-
405
-
406
- @ Override
407
- public void dispose () {
408
- if (updateDevicesTimer != null ) {
409
- updateDevicesTimer .cancel ();
410
- }
411
- super .dispose ();
412
- }
413
327
414
328
415
329
public void statusError (String what ) {
@@ -636,8 +550,100 @@ public void actionPerformed(ActionEvent e) {
636
550
// editor.statusNotice("Resetting the Android Debug Bridge server.");
637
551
final Devices devices = Devices .getInstance ();
638
552
devices .killAdbServer ();
553
+ devices .startAdbServer ();
639
554
}
640
555
});
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
+ }
642
648
}
643
649
}
0 commit comments