diff options
author | Raphael <raphael@google.com> | 2009-10-09 18:24:08 -0700 |
---|---|---|
committer | Raphael <raphael@google.com> | 2009-10-12 14:00:45 -0700 |
commit | 6566e09bbaef4fbec4c662a55289ff02a38ec37d (patch) | |
tree | 0a7b281d5365ba5b28c365bc1c1d9cda28d91726 /sdkmanager/app | |
parent | 7596693744686f053e1bac80045f1d5e158860af (diff) | |
download | sdk-6566e09bbaef4fbec4c662a55289ff02a38ec37d.zip sdk-6566e09bbaef4fbec4c662a55289ff02a38ec37d.tar.gz sdk-6566e09bbaef4fbec4c662a55289ff02a38ec37d.tar.bz2 |
SDK Manager: suggest install of new platforms, addons or extra packages.
Supports the new "android update sdk" action.
Change-Id: Ib096f1f024639018252c58d4f9c8872ead3c39b9
Diffstat (limited to 'sdkmanager/app')
3 files changed, 61 insertions, 3 deletions
diff --git a/sdkmanager/app/src/com/android/sdkmanager/CommandLineProcessor.java b/sdkmanager/app/src/com/android/sdkmanager/CommandLineProcessor.java index 2e21f7b..ab105ec 100644 --- a/sdkmanager/app/src/com/android/sdkmanager/CommandLineProcessor.java +++ b/sdkmanager/app/src/com/android/sdkmanager/CommandLineProcessor.java @@ -36,6 +36,16 @@ import java.util.Map.Entry; */ class CommandLineProcessor { + /* + * Steps needed to add a new action: + * - Each action is defined as a "verb object" followed by parameters. + * - Either reuse a VERB_ constant or define a new one. + * - Either reuse an OBJECT_ constant or define a new one. + * - Add a new entry to mAction with a one-line help summary. + * - In the constructor, add a define() call for each parameter (either mandatory + * or optional) for the given action. + */ + /** Internal verb name for internally hidden flags. */ public final static String GLOBAL_FLAG_VERB = "@@internal@@"; @@ -57,10 +67,14 @@ class CommandLineProcessor { /** * Action definitions. * <p/> + * This list serves two purposes: first it is used to know which verb/object + * actions are acceptable on the command-line; second it provides a summary + * for each action that is printed in the help. + * <p/> * Each entry is a string array with: * <ul> * <li> the verb. - * <li> a direct object (use #NO_VERB_OBJECT if there's no object). + * <li> a direct object (use {@link #NO_VERB_OBJECT} if there's no object). * <li> a description. * <li> an alternate form for the object (e.g. plural). * </ul> @@ -81,6 +95,15 @@ class CommandLineProcessor { /** Logger */ private final ISdkLog mLog; + /** + * Constructs a new command-line processor. + * + * @param logger An SDK logger object. Must not be null. + * @param actions The list of actions recognized on the command-line. + * See the javadoc of {@link #mActions} for more details. + * + * @see #mActions + */ public CommandLineProcessor(ISdkLog logger, String[][] actions) { mLog = logger; mActions = actions; diff --git a/sdkmanager/app/src/com/android/sdkmanager/Main.java b/sdkmanager/app/src/com/android/sdkmanager/Main.java index 1c847fe..84195d1 100644 --- a/sdkmanager/app/src/com/android/sdkmanager/Main.java +++ b/sdkmanager/app/src/com/android/sdkmanager/Main.java @@ -34,6 +34,7 @@ import com.android.sdklib.internal.project.ProjectProperties.PropertyType; import com.android.sdklib.xml.AndroidXPathFactory; import com.android.sdkmanager.internal.repository.AboutPage; import com.android.sdkmanager.internal.repository.SettingsPage; +import com.android.sdkuilib.internal.repository.LocalPackagesPage; import com.android.sdkuilib.repository.UpdaterWindow; import org.xml.sax.InputSource; @@ -243,7 +244,11 @@ public class Main { updateTestProject(); } else if (verb == null && directObject == null) { - showMainWindow(); + showMainWindow(false /*autoUpdate*/); + + } else if (SdkCommandLine.VERB_UPDATE.equals(verb) && + SdkCommandLine.OBJECT_SDK.equals(directObject)) { + showMainWindow(true /*autoUpdate*/); } else if (SdkCommandLine.VERB_UPDATE.equals(verb) && SdkCommandLine.OBJECT_ADB.equals(directObject)) { @@ -257,7 +262,7 @@ public class Main { /** * Display the main SdkManager app window */ - private void showMainWindow() { + private void showMainWindow(boolean autoUpdate) { try { // display a message talking about the command line version System.out.printf("No command line parameters provided, launching UI.\n" + @@ -269,6 +274,10 @@ public class Main { false /*userCanChangeSdkRoot*/); window.registerPage("Settings", SettingsPage.class); window.registerPage("About", AboutPage.class); + if (autoUpdate) { + window.setInitialPage(LocalPackagesPage.class); + window.setRequestAutoUpdate(true); + } window.open(); } catch (Exception e) { e.printStackTrace(); @@ -353,12 +362,14 @@ public class Main { } catch (IOException e) { errorAndExit("Unable to resolve Main project's directory: %1$s", pathToMainProject); + return; // help Eclipse static analyzer understand we'll never execute the rest. } } if (parentProject.isDirectory() == false) { errorAndExit("Main project's directory does not exist: %1$s", pathToMainProject); + return; } // now look for a manifest in there @@ -366,6 +377,7 @@ public class Main { if (manifest.isFile() == false) { errorAndExit("No AndroidManifest.xml file found in the main project directory: %1$s", parentProject.getAbsolutePath()); + return; } // now query the manifest for the package file. @@ -405,6 +417,7 @@ public class Main { String targetHash = p.getProperty(ProjectProperties.PROPERTY_TARGET); if (targetHash == null) { errorAndExit("Couldn't find the main project target"); + return; } // and resolve it. @@ -413,6 +426,7 @@ public class Main { errorAndExit( "Unable to resolve main project target '%1$s'. You may want to install the platform in your SDK.", targetHash); + return; } mSdkLog.printf("Found main project target: %1$s\n", target.getFullName()); diff --git a/sdkmanager/app/src/com/android/sdkmanager/SdkCommandLine.java b/sdkmanager/app/src/com/android/sdkmanager/SdkCommandLine.java index 27afd48..80ee5dd 100644 --- a/sdkmanager/app/src/com/android/sdkmanager/SdkCommandLine.java +++ b/sdkmanager/app/src/com/android/sdkmanager/SdkCommandLine.java @@ -25,12 +25,23 @@ import com.android.sdklib.SdkManager; */ class SdkCommandLine extends CommandLineProcessor { + /* + * Steps needed to add a new action: + * - Each action is defined as a "verb object" followed by parameters. + * - Either reuse a VERB_ constant or define a new one. + * - Either reuse an OBJECT_ constant or define a new one. + * - Add a new entry to mAction with a one-line help summary. + * - In the constructor, add a define() call for each parameter (either mandatory + * or optional) for the given action. + */ + public final static String VERB_LIST = "list"; public final static String VERB_CREATE = "create"; public final static String VERB_MOVE = "move"; public final static String VERB_DELETE = "delete"; public final static String VERB_UPDATE = "update"; + public static final String OBJECT_SDK = "sdk"; public static final String OBJECT_AVD = "avd"; public static final String OBJECT_AVDS = "avds"; public static final String OBJECT_TARGET = "target"; @@ -59,6 +70,10 @@ class SdkCommandLine extends CommandLineProcessor { /** * Action definitions for SdkManager command line. * <p/> + * This list serves two purposes: first it is used to know which verb/object + * actions are acceptable on the command-line; second it provides a summary + * for each action that is printed in the help. + * <p/> * Each entry is a string array with: * <ul> * <li> the verb. @@ -98,11 +113,16 @@ class SdkCommandLine extends CommandLineProcessor { { VERB_UPDATE, OBJECT_ADB, "Updates adb to support the USB devices declared in the SDK add-ons." }, + + { VERB_UPDATE, OBJECT_SDK, + "Updates the SDK by suggesting new platforms to install if available." } }; public SdkCommandLine(ISdkLog logger) { super(logger, ACTIONS); + // The following defines the parameters of the actions defined in mAction. + // --- create avd --- define(Mode.STRING, false, @@ -175,6 +195,7 @@ class SdkCommandLine extends CommandLineProcessor { "Project name", null); // --- create test-project --- + define(Mode.STRING, true, VERB_CREATE, OBJECT_TEST_PROJECT, "p", KEY_PATH, |