Skip to content

Commit 9be1342

Browse files
committed
Scan for available SDK targets
1 parent 35dd447 commit 9be1342

File tree

2 files changed

+74
-4
lines changed

2 files changed

+74
-4
lines changed

src/processing/mode/android/AndroidEditor.java

Lines changed: 30 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
import java.awt.event.ActionListener;
3333
import java.io.File;
3434
import java.io.IOException;
35+
import java.util.ArrayList;
3536
import java.util.TimerTask;
3637

3738
@SuppressWarnings("serial")
@@ -217,10 +218,21 @@ public void actionPerformed(ActionEvent e) {
217218

218219
menu.addSeparator();
219220

220-
JMenu sdkMenu = new JMenu("Select target SDK");
221-
JCheckBoxMenuItem defaultItem = new JCheckBoxMenuItem("API 2.3.3 (10)");
222-
defaultItem.setState(true);
221+
final JMenu sdkMenu = new JMenu("Select target SDK");
222+
JMenuItem defaultItem = new JCheckBoxMenuItem("No available targets");
223+
defaultItem.setEnabled(false);
223224
sdkMenu.add(defaultItem);
225+
226+
new Thread() {
227+
@Override
228+
public void run() {
229+
while(androidMode == null || androidMode.getSDK() == null) {
230+
System.out.println("Still null");
231+
}
232+
updateSdkMenu(sdkMenu);
233+
}
234+
}.start();
235+
224236
menu.add(sdkMenu);
225237

226238
menu.addSeparator();
@@ -259,6 +271,21 @@ public void actionPerformed(ActionEvent e) {
259271
return menu;
260272
}
261273

274+
private void updateSdkMenu(JMenu sdkMenu) {
275+
try {
276+
ArrayList<AndroidSDK.SDKTarget> targets = androidMode.getSDK().getAvailableSdkTargets();
277+
278+
if(targets.size() != 0) sdkMenu.removeAll();
279+
280+
for(AndroidSDK.SDKTarget target : targets) {
281+
JCheckBoxMenuItem item = new JCheckBoxMenuItem("API " + target.name + " (" + target.version + ")");
282+
sdkMenu.add(item);
283+
}
284+
} catch (IOException e) {
285+
e.printStackTrace();
286+
}
287+
}
288+
262289

263290
/**
264291
* Uses the main help menu, and adds a few extra options. If/when there's

src/processing/mode/android/AndroidSDK.java

Lines changed: 44 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package processing.mode.android;
22

33
import processing.app.Base;
4-
import processing.app.Editor;
54
import processing.app.Platform;
65
import processing.app.Preferences;
76
import processing.app.exec.ProcessHelper;
@@ -10,16 +9,20 @@
109

1110
import javax.swing.*;
1211
import java.awt.*;
12+
import java.io.BufferedReader;
1313
import java.io.File;
14+
import java.io.FileReader;
1415
import java.io.IOException;
1516
import java.text.DateFormat;
1617
import java.text.ParseException;
1718
import java.text.SimpleDateFormat;
19+
import java.util.ArrayList;
1820
import java.util.Date;
1921

2022
class AndroidSDK {
2123
private final File folder;
2224
private final File tools;
25+
private final File platforms;
2326
private final File platformTools;
2427
private final File androidTool;
2528

@@ -62,6 +65,11 @@ public AndroidSDK(File folder) throws BadSDKException, IOException {
6265
throw new BadSDKException("There is no platform-tools folder in " + folder);
6366
}
6467

68+
platforms = new File(folder, "platforms");
69+
if (!platforms.exists()) {
70+
throw new BadSDKException("There is no platforms folder in " + folder);
71+
}
72+
6573
androidTool = findAndroidTool(tools);
6674

6775
final Platform p = Base.getPlatform();
@@ -385,4 +393,39 @@ public static ProcessResult runADB(final String... cmd)
385393
// throw ioe;
386394
// }
387395
}
396+
397+
public static class SDKTarget {
398+
public int version = 0;
399+
public String name;
400+
}
401+
402+
public ArrayList<SDKTarget> getAvailableSdkTargets() throws IOException {
403+
ArrayList<SDKTarget> targets = new ArrayList<SDKTarget>();
404+
405+
for(File platform : platforms.listFiles()) {
406+
File propFile = new File(platform, "build.prop");
407+
if(!propFile.exists()) continue;
408+
409+
SDKTarget target = new SDKTarget();
410+
411+
BufferedReader br = new BufferedReader(new FileReader(propFile));
412+
String line;
413+
while ((line = br.readLine()) != null) {
414+
String[] lineData = line.split("=");
415+
if(lineData[0].equals("ro.build.version.sdk")) {
416+
target.version = Integer.valueOf(lineData[1]);
417+
}
418+
419+
if(lineData[0].equals("ro.build.version.release")) {
420+
target.name = lineData[1];
421+
break;
422+
}
423+
}
424+
br.close();
425+
426+
if(target.version != 0 && target.name != null) targets.add(target);
427+
}
428+
429+
return targets;
430+
}
388431
}

0 commit comments

Comments
 (0)