Skip to content

Commit 43b015b

Browse files
committed
init tools and update menu in the right places
1 parent 79efbb9 commit 43b015b

File tree

3 files changed

+119
-166
lines changed

3 files changed

+119
-166
lines changed

src/processing/mode/android/AndroidEditor.java

Lines changed: 72 additions & 106 deletions
Original file line numberDiff line numberDiff line change
@@ -23,14 +23,12 @@
2323
package processing.mode.android;
2424

2525
import processing.app.Base;
26-
import processing.app.Messages;
2726
import processing.app.Mode;
2827
import processing.app.Platform;
2928
import processing.app.Preferences;
3029
import processing.app.Settings;
3130
import processing.app.SketchException;
32-
import processing.app.Util;
33-
import processing.app.ui.Editor;
31+
import processing.app.tools.Tool;
3432
import processing.app.ui.EditorException;
3533
import processing.app.ui.EditorState;
3634
import processing.app.ui.EditorToolbar;
@@ -46,24 +44,26 @@
4644
import java.awt.event.ActionListener;
4745
import java.io.File;
4846
import java.io.IOException;
49-
import java.lang.reflect.Constructor;
50-
import java.lang.reflect.InvocationTargetException;
51-
import java.net.MalformedURLException;
52-
import java.net.URL;
53-
import java.net.URLClassLoader;
47+
import java.util.ArrayList;
48+
import java.util.Collections;
49+
import java.util.List;
5450
import java.util.TimerTask;
5551

5652

5753
@SuppressWarnings("serial")
5854
public class AndroidEditor extends JavaEditor {
5955
// Component selected by default
6056
static public final String DEFAULT_COMPONENT = "app";
57+
58+
private JMenu androidMenu;
6159

6260
private int appComponent;
6361

6462
private Settings settings;
6563
private AndroidMode androidMode;
6664

65+
private List<AndroidTool> androidTools;
66+
6767
private java.util.Timer updateDevicesTimer;
6868

6969
private JCheckBoxMenuItem fragmentItem;
@@ -89,7 +89,10 @@ protected AndroidEditor(Base base, String path, EditorState state,
8989
androidMode.resetUserSelection();
9090
androidMode.checkSDK(this);
9191

92-
loadModeSettings();
92+
androidTools = loadAndroidTools();
93+
addToolsToMenu();
94+
95+
loadModeSettings();
9396
}
9497

9598
@Override
@@ -258,7 +261,7 @@ public void actionPerformed(ActionEvent e) {
258261

259262

260263
public JMenu buildModeMenu() {
261-
JMenu menu = new JMenu("Android");
264+
androidMenu = new JMenu("Android");
262265
JMenuItem item;
263266

264267
item = new JMenuItem("Sketch Permissions");
@@ -267,9 +270,9 @@ public void actionPerformed(ActionEvent e) {
267270
new Permissions(sketch, appComponent, androidMode.getFolder());
268271
}
269272
});
270-
menu.add(item);
273+
androidMenu.add(item);
271274

272-
menu.addSeparator();
275+
androidMenu.addSeparator();
273276

274277
fragmentItem = new JCheckBoxMenuItem("App");
275278
wallpaperItem = new JCheckBoxMenuItem("Wallpaper");
@@ -322,19 +325,19 @@ public void actionPerformed(ActionEvent e) {
322325
watchfaceItem.setSelected(false);
323326
vrItem.setSelected(false);
324327

325-
menu.add(fragmentItem);
326-
menu.add(wallpaperItem);
327-
menu.add(watchfaceItem);
328-
menu.add(vrItem);
328+
androidMenu.add(fragmentItem);
329+
androidMenu.add(wallpaperItem);
330+
androidMenu.add(watchfaceItem);
331+
androidMenu.add(vrItem);
329332

330-
menu.addSeparator();
333+
androidMenu.addSeparator();
331334

332335
final JMenu mobDeveMenu = new JMenu("Devices");
333336

334337
JMenuItem noMobDevItem = new JMenuItem("No connected devices");
335338
noMobDevItem.setEnabled(false);
336339
mobDeveMenu.add(noMobDevItem);
337-
menu.add(mobDeveMenu);
340+
androidMenu.add(mobDeveMenu);
338341

339342
// start updating device menus
340343
UpdateDeviceListTask task = new UpdateDeviceListTask(mobDeveMenu);
@@ -345,94 +348,9 @@ public void actionPerformed(ActionEvent e) {
345348
}
346349
updateDevicesTimer.schedule(task, 5000, 5000);
347350

348-
menu.addSeparator();
349-
350-
item = new JMenuItem("Update SDK");
351-
item.addActionListener(new ActionListener() {
352-
public void actionPerformed(ActionEvent e) {
353-
354-
File toolPath = new File(androidMode.getFolder(), "tools/SDKUpdater");
355-
AndroidTool tool = null;
356-
try {
357-
tool = new AndroidTool(toolPath, androidMode.getSDK());
358-
} catch (Throwable e1) {
359-
// TODO Auto-generated catch block
360-
e1.printStackTrace();
361-
}
362-
if (tool != null) {
363-
tool.init(base);
364-
tool.run();
365-
}
366-
367-
368-
/*
369-
AndroidSDK sdk = androidMode.getSDK();
370-
File lib = new File(sdk.getToolsFolder(), "lib");
371-
File[] archives = Util.listJarFiles(lib);
372-
URL[] urlList = new URL[archives.length];
373-
for (int k = 0; k < archives.length; k++) {
374-
try {
375-
urlList[k] = archives[k].toURI().toURL();
376-
System.out.println(urlList[k]);
377-
} catch (MalformedURLException ex) {}
378-
}
379-
380-
381-
ClassLoader parent = androidMode.getClassLoader();
382-
System.out.println("Android mode CLASS loader " + AndroidMode.class.getClassLoader());
383-
System.out.println("Android mode class loader " + parent);
384-
ClassLoader loader = new URLClassLoader(urlList, parent);
385-
386-
387-
try {
388-
Class<?> updaterClass = loader.loadClass(SDKUpdater.class.getName());
389-
Constructor con = updaterClass.getConstructor(Editor.class, AndroidMode.class, ClassLoader.class);
390-
SDKUpdater updater = (SDKUpdater) con.newInstance(AndroidEditor.this, androidMode, loader);
391-
392-
} catch (ClassNotFoundException | NoSuchMethodException | SecurityException | InstantiationException | IllegalAccessException | IllegalArgumentException | InvocationTargetException e1) {
393-
// TODO Auto-generated catch block
394-
e1.printStackTrace();
395-
}
396-
397-
try {
398-
// This cast should be safe, since the only case when loader is not a
399-
// URLClassLoader is when no archives were found in the first place.
400-
((URLClassLoader) loader).close();
401-
} catch (IOException e2) {
402-
e2.printStackTrace();
403-
}
404-
*/
405-
406-
407-
// AndroidSDK sdk = androidMode.getSDK();
408-
// if (sdk != null) {
409-
// new SDKUpdater(sdk.getSdkFolder());
410-
// }
411-
412-
413-
}
414-
});
415-
menu.add(item);
416-
417-
// item = new JMenuItem("AVD Manager");
418-
// item.addActionListener(new ActionListener() {
419-
// public void actionPerformed(ActionEvent e) {
420-
// File file = androidMode.getSDK().getAndroidTool();
421-
// PApplet.exec(new String[] { file.getAbsolutePath(), "avd" });
422-
// }
423-
// });
424-
// menu.add(item);
351+
androidMenu.addSeparator();
425352

426-
item = new JMenuItem("Reset ADB");
427-
item.addActionListener(new ActionListener() {
428-
public void actionPerformed(ActionEvent e) {
429-
// editor.statusNotice("Resetting the Android Debug Bridge server.");
430-
Devices.killAdbServer();
431-
}
432-
});
433-
menu.add(item);
434-
435-
return menu;
353+
return androidMenu;
436354
}
437355

438356

@@ -694,6 +612,54 @@ private void loadModeSettings() {
694612
if (save) androidMode.initManifest(sketch, appComponent);
695613
} catch (IOException e) {
696614
System.err.println("While creating " + sketchProps + ": " + e.getMessage());
697-
}
615+
}
616+
}
617+
618+
private List<AndroidTool> loadAndroidTools() {
619+
// This gets called before assigning mode to androidMode...
620+
ArrayList<AndroidTool> outgoing = new ArrayList<AndroidTool>();
621+
File toolPath = new File(androidMode.getFolder(), "tools/SDKUpdater");
622+
AndroidTool tool = null;
623+
try {
624+
tool = new AndroidTool(toolPath, androidMode.getSDK());
625+
tool.init(base);
626+
outgoing.add(tool);
627+
} catch (Throwable e) {
628+
e.printStackTrace();
629+
}
630+
Collections.sort(outgoing);
631+
return outgoing;
698632
}
633+
634+
private void addToolsToMenu() {
635+
JMenuItem item;
636+
637+
for (final Tool tool : androidTools) {
638+
item = new JMenuItem(tool.getMenuTitle());
639+
item.addActionListener(new ActionListener() {
640+
public void actionPerformed(ActionEvent e) {
641+
tool.run();
642+
}
643+
});
644+
androidMenu.add(item);
645+
}
646+
647+
// item = new JMenuItem("AVD Manager");
648+
// item.addActionListener(new ActionListener() {
649+
// public void actionPerformed(ActionEvent e) {
650+
// File file = androidMode.getSDK().getAndroidTool();
651+
// PApplet.exec(new String[] { file.getAbsolutePath(), "avd" });
652+
// }
653+
// });
654+
// menu.add(item);
655+
656+
item = new JMenuItem("Reset ADB");
657+
item.addActionListener(new ActionListener() {
658+
public void actionPerformed(ActionEvent e) {
659+
// editor.statusNotice("Resetting the Android Debug Bridge server.");
660+
Devices.killAdbServer();
661+
}
662+
});
663+
androidMenu.add(item);
664+
}
699665
}

src/processing/mode/android/AndroidTool.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -31,10 +31,9 @@
3131
import processing.app.contrib.ContributionType;
3232
import processing.app.contrib.IgnorableException;
3333
import processing.app.contrib.LocalContribution;
34-
import processing.app.contrib.ToolContribution;
3534
import processing.app.tools.Tool;
3635

37-
public class AndroidTool extends LocalContribution implements Tool, Comparable<ToolContribution> {
36+
public class AndroidTool extends LocalContribution implements Tool, Comparable<AndroidTool> {
3837
private AndroidSDK sdk;
3938
private Tool tool;
4039

@@ -118,13 +117,13 @@ public String initLoader(String className) throws Exception {
118117

119118

120119
@Override
121-
public int compareTo(ToolContribution o) {
120+
public int compareTo(AndroidTool o) {
122121
return getMenuTitle().compareTo(o.getMenuTitle());
123122
}
124123

125124

126125
@Override
127126
public ContributionType getType() {
128127
return ContributionType.TOOL;
129-
}
128+
}
130129
}

0 commit comments

Comments
 (0)