11package processing .mode .android ;
22
3- import java .awt .FileDialog ;
4- import java .awt .Frame ;
5- import java .io .File ;
6- import java .io .IOException ;
7- import java .text .DateFormat ;
8- import java .text .ParseException ;
9- import java .text .SimpleDateFormat ;
10- import java .util .Date ;
11-
12- import javax .swing .JFileChooser ;
13- import javax .swing .JOptionPane ;
14-
153import processing .app .Base ;
4+ import processing .app .Editor ;
165import processing .app .Platform ;
176import processing .app .Preferences ;
187import processing .app .exec .ProcessHelper ;
198import processing .app .exec .ProcessResult ;
209import processing .core .PApplet ;
2110
11+ import javax .swing .*;
12+ import java .awt .*;
13+ import java .io .File ;
14+ import java .io .IOException ;
15+ import java .text .DateFormat ;
16+ import java .text .ParseException ;
17+ import java .text .SimpleDateFormat ;
18+ import java .util .Date ;
19+
2220class AndroidSDK {
2321 private final File folder ;
2422 private final File tools ;
@@ -31,8 +29,10 @@ class AndroidSDK {
3129 private static final String ANDROID_SDK_SECONDARY =
3230 "The Android SDK does not appear to be installed, <br>" +
3331 "because the ANDROID_SDK variable is not set. <br>" +
34- "If it is installed, click “Yes” to select the <br>" +
35- "location of the SDK, or “No” to visit the SDK<br>" +
32+ "If it is installed, click “Locate SDK path” to select the <br>" +
33+ "location of the SDK, or “Download SDK” to let <br>" +
34+ "Processing download SDK automatically.<br><br>" +
35+ "If you want to download SDK manually, you can visit <br>" +
3636 "download site at http://developer.android.com/sdk." ;
3737
3838 private static final String SELECT_ANDROID_SDK_FOLDER =
@@ -234,17 +234,18 @@ public static AndroidSDK load() throws BadSDKException, IOException {
234234 }
235235
236236
237- static public AndroidSDK locate (final Frame window )
238- throws BadSDKException , IOException {
239- final int result = Base .showYesNoQuestion (window , "Android SDK" ,
240- ANDROID_SDK_PRIMARY , ANDROID_SDK_SECONDARY );
237+ static public AndroidSDK locate (final Frame window , final AndroidMode androidMode )
238+ throws BadSDKException , IOException {
239+ final int result = showLocateDialog (window );
241240 if (result == JOptionPane .CANCEL_OPTION ) {
242241 throw new BadSDKException ("User canceled attempt to find SDK." );
243242 }
244- if (result == JOptionPane .NO_OPTION ) {
245- // user admitted they don't have the SDK installed, and need help.
246- Base .openURL (ANDROID_SDK_URL );
247- throw new BadSDKException ("No SDK installed." );
243+ if (result == JOptionPane .YES_OPTION ) {
244+ // here we are going to download sdk automatically
245+ //Base.openURL(ANDROID_SDK_URL);
246+ //throw new BadSDKException("No SDK installed.");
247+
248+ return download (androidMode );
248249 }
249250 while (true ) {
250251 // TODO this is really a yucky way to do this stuff. fix it.
@@ -263,6 +264,52 @@ static public AndroidSDK locate(final Frame window)
263264 }
264265 }
265266
267+ static public AndroidSDK download (final AndroidMode androidMode ) throws BadSDKException {
268+ AndroidMode .sdkDownloadInProgress = true ;
269+
270+ SwingUtilities .invokeLater (new Runnable () {
271+ @ Override
272+ public void run () {
273+ SDKDownloader downloader = new SDKDownloader (androidMode );
274+ downloader .startDownload ();
275+ }
276+ });
277+ return null ;
278+ }
279+
280+ static public int showLocateDialog (Frame editor ) {
281+ // Pane formatting adapted from the Quaqua guide
282+ // http://www.randelshofer.ch/quaqua/guide/joptionpane.html
283+ JOptionPane pane =
284+ new JOptionPane ("<html> " +
285+ "<head> <style type=\" text/css\" >" +
286+ "b { font: 13pt \" Lucida Grande\" }" +
287+ "p { font: 11pt \" Lucida Grande\" ; margin-top: 8px; width: 300px }" +
288+ "</style> </head>" +
289+ "<b>" + ANDROID_SDK_PRIMARY + "</b>" +
290+ "<p>" + ANDROID_SDK_SECONDARY + "</p>" ,
291+ JOptionPane .QUESTION_MESSAGE );
292+
293+ String [] options = new String [] {
294+ "Download SDK automatically" , "Locate SDK path manually"
295+ };
296+ pane .setOptions (options );
297+
298+ // highlight the safest option ala apple hig
299+ pane .setInitialValue (options [0 ]);
300+
301+ JDialog dialog = pane .createDialog (editor , null );
302+ dialog .setVisible (true );
303+
304+ Object result = pane .getValue ();
305+ if (result == options [0 ]) {
306+ return JOptionPane .YES_OPTION ;
307+ } else if (result == options [1 ]) {
308+ return JOptionPane .NO_OPTION ;
309+ } else {
310+ return JOptionPane .CLOSED_OPTION ;
311+ }
312+ }
266313
267314 // this was banished from Base because it encourages bad practice.
268315 // TODO figure out a better way to handle the above.
0 commit comments