diff --git a/tools/sdkmanager/libs/sdklib/src/com/android/sdklib/AndroidVersion.java b/tools/sdkmanager/libs/sdklib/src/com/android/sdklib/AndroidVersion.java
index 5bd9aad45..b79016668 100644
--- a/tools/sdkmanager/libs/sdklib/src/com/android/sdklib/AndroidVersion.java
+++ b/tools/sdkmanager/libs/sdklib/src/com/android/sdklib/AndroidVersion.java
@@ -45,13 +45,29 @@ public class AndroidVersion {
private final int mApiLevel;
private final String mCodename;
+ /**
+ * Creates an {@link AndroidVersion} with the given api level and codename.
+ */
public AndroidVersion(int apiLevel, String codename) {
mApiLevel = apiLevel;
mCodename = codename;
}
- public AndroidVersion(Properties properties) {
- throw new UnsupportedOperationException("TODO");
+ /**
+ * Creates an {@link AndroidVersion} from {@link Properties}, with default values if the
+ * {@link Properties} object doesn't contain the expected values.
+ *
The {@link Properties} is expected to have been filled with
+ * {@link #saveProperties(Properties)}.
+ */
+ public AndroidVersion(Properties properties, int defaultApiLevel, String defaultCodeName) {
+ if (properties == null) {
+ mApiLevel = defaultApiLevel;
+ mCodename = defaultCodeName;
+ } else {
+ mApiLevel = Integer.parseInt(properties.getProperty(PROP_API_LEVEL,
+ Integer.toString(defaultApiLevel)));
+ mCodename = properties.getProperty(PROP_CODENAME, defaultCodeName);
+ }
}
public void saveProperties(Properties props) {
diff --git a/tools/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/AddonPackage.java b/tools/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/AddonPackage.java
index 43228c0af..b69ae0e01 100755
--- a/tools/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/AddonPackage.java
+++ b/tools/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/AddonPackage.java
@@ -168,10 +168,9 @@ public class AddonPackage extends Package {
return mName;
}
- /** Returns the api-level, an int > 0, for platform, add-on and doc packages. */
- public int getApiLevel() {
- // FIXME: return the AndroidVersion instead.
- return mVersion.getApiLevel();
+ /** Returns the version, for platform, add-on and doc packages. */
+ public AndroidVersion getVersion() {
+ return mVersion;
}
/** Returns the libs defined in this add-on. Can be an empty array but not null. */
@@ -185,7 +184,7 @@ public class AddonPackage extends Package {
return String.format("%1$s by %2$s for Android API %3$d",
getName(),
getVendor(),
- getApiLevel());
+ mVersion.getApiLevel());
}
/** Returns a long description for an {@link IDescription}. */
@@ -230,7 +229,7 @@ public class AddonPackage extends Package {
String name = suggestedDir;
if (suggestedDir == null || suggestedDir.length() == 0) {
- name = String.format("addon-%s-%s-%d", getName(), getVendor(), getApiLevel()); //$NON-NLS-1$
+ name = String.format("addon-%s-%s-%d", getName(), getVendor(), mVersion.getApiLevel()); //$NON-NLS-1$
name = name.toLowerCase();
name = name.replaceAll("[^a-z0-9_-]+", "_"); //$NON-NLS-1$ //$NON-NLS-2$
name = name.replaceAll("_+", "_"); //$NON-NLS-1$ //$NON-NLS-2$
@@ -272,6 +271,7 @@ public class AddonPackage extends Package {
String newId = newPkg.getName() + "+" + newPkg.getVendor(); //$NON-NLS-1$
return thisId.equalsIgnoreCase(newId) &&
- newPkg.getRevision() > this.getRevision();
+ mVersion.getApiLevel() == newPkg.getVersion().getApiLevel() &&
+ newPkg.getRevision() > this.getRevision();
}
}
diff --git a/tools/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/DocPackage.java b/tools/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/DocPackage.java
index c1b8d1d3f..3a71b92c3 100755
--- a/tools/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/DocPackage.java
+++ b/tools/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/DocPackage.java
@@ -16,6 +16,7 @@
package com.android.sdklib.internal.repository;
+import com.android.sdklib.AndroidVersion;
import com.android.sdklib.SdkConstants;
import com.android.sdklib.SdkManager;
import com.android.sdklib.internal.repository.Archive.Arch;
@@ -33,9 +34,7 @@ import java.util.Properties;
*/
public class DocPackage extends Package {
- private static final String PROP_API_LEVEL = "Doc.ApiLevel"; //$NON-NLS-1$
-
- private final int mApiLevel;
+ private final AndroidVersion mVersion;
/**
* Creates a new doc package from the attributes and elements of the given XML node.
@@ -44,7 +43,13 @@ public class DocPackage extends Package {
*/
DocPackage(RepoSource source, Node packageNode, Map licenses) {
super(source, packageNode, licenses);
- mApiLevel = XmlParserUtils.getXmlInt(packageNode, SdkRepository.NODE_API_LEVEL, 0);
+
+ int apiLevel = XmlParserUtils.getXmlInt (packageNode, SdkRepository.NODE_API_LEVEL, 0);
+ String codeName = XmlParserUtils.getXmlString(packageNode, SdkRepository.NODE_CODENAME);
+ if (codeName.length() == 0) {
+ codeName = null;
+ }
+ mVersion = new AndroidVersion(apiLevel, codeName);
}
/**
@@ -55,6 +60,7 @@ public class DocPackage extends Package {
DocPackage(RepoSource source,
Properties props,
int apiLevel,
+ String codename,
int revision,
String license,
String description,
@@ -71,8 +77,7 @@ public class DocPackage extends Package {
archiveOs,
archiveArch,
archiveOsPath);
- mApiLevel = Integer.parseInt(
- getProperty(props, PROP_API_LEVEL, Integer.toString(apiLevel)));
+ mVersion = new AndroidVersion(props, apiLevel, codename);
}
/**
@@ -83,20 +88,23 @@ public class DocPackage extends Package {
void saveProperties(Properties props) {
super.saveProperties(props);
- props.setProperty(PROP_API_LEVEL, Integer.toString(mApiLevel));
+ mVersion.saveProperties(props);
}
- /** Returns the api-level, an int > 0, for platform, add-on and doc packages.
+ /** Returns the version, for platform, add-on and doc packages.
* Can be 0 if this is a local package of unknown api-level. */
- public int getApiLevel() {
- return mApiLevel;
+ public AndroidVersion getVersion() {
+ return mVersion;
}
/** Returns a short description for an {@link IDescription}. */
@Override
public String getShortDescription() {
- if (mApiLevel != 0) {
- return String.format("Documentation for Android SDK, API %1$d", mApiLevel);
+ if (mVersion.isPreview()) {
+ return String.format("Documentation for Android '%1$s' Preview SDK",
+ mVersion.getCodename());
+ } else if (mVersion.getApiLevel() != 0) {
+ return String.format("Documentation for Android SDK, API %1$d", mVersion.getApiLevel());
} else {
return String.format("Documentation for Android SDK");
}
@@ -147,6 +155,6 @@ public class DocPackage extends Package {
DocPackage newPkg = (DocPackage) replacementPackage;
return newPkg.getRevision() > this.getRevision() &&
- newPkg.getApiLevel() >= this.getApiLevel();
+ newPkg.getVersion().equals(this.getVersion());
}
}
diff --git a/tools/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/LocalSdkParser.java b/tools/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/LocalSdkParser.java
index 0e3b204fe..c73eef650 100755
--- a/tools/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/LocalSdkParser.java
+++ b/tools/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/LocalSdkParser.java
@@ -212,6 +212,7 @@ public class LocalSdkParser {
null, //source
props, //properties
0, //apiLevel
+ null, // codename
0, //revision
null, //license
null, //description
diff --git a/tools/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/PlatformPackage.java b/tools/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/PlatformPackage.java
index 3f36596fe..26f226f59 100755
--- a/tools/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/PlatformPackage.java
+++ b/tools/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/PlatformPackage.java
@@ -49,7 +49,7 @@ public class PlatformPackage extends Package {
super(source, packageNode, licenses);
mVersionName = XmlParserUtils.getXmlString(packageNode, SdkRepository.NODE_VERSION);
int apiLevel = XmlParserUtils.getXmlInt (packageNode, SdkRepository.NODE_API_LEVEL, 0);
- String codeName = XmlParserUtils.getXmlString(packageNode, SdkRepository.NODE_API_CODENAME);
+ String codeName = XmlParserUtils.getXmlString(packageNode, SdkRepository.NODE_CODENAME);
if (codeName.length() == 0) {
codeName = null;
}
@@ -95,10 +95,9 @@ public class PlatformPackage extends Package {
return mVersionName;
}
- /** Returns the api-level, an int > 0, for platform, add-on and doc packages. */
- public int getApiLevel() {
- // FIXME: return the AndroidVersion instead.
- return mVersion.getApiLevel();
+ /** Returns the package version, for platform, add-on and doc packages. */
+ public AndroidVersion getVersion() {
+ return mVersion;
}
/** Returns a short description for an {@link IDescription}. */
@@ -111,7 +110,7 @@ public class PlatformPackage extends Package {
return String.format("SDK Platform Android %1$s, API %2$d",
getVersionName(),
- getApiLevel());
+ mVersion.getApiLevel());
}
/** Returns a long description for an {@link IDescription}. */
@@ -174,7 +173,7 @@ public class PlatformPackage extends Package {
PlatformPackage newPkg = (PlatformPackage) replacementPackage;
return newPkg.getVersionName().equalsIgnoreCase(this.getVersionName()) &&
- newPkg.getApiLevel() == this.getApiLevel() &&
+ newPkg.getVersion().equals(this.getVersion()) &&
newPkg.getRevision() > this.getRevision();
}
}
diff --git a/tools/sdkmanager/libs/sdklib/src/com/android/sdklib/repository/SdkRepository.java b/tools/sdkmanager/libs/sdklib/src/com/android/sdklib/repository/SdkRepository.java
index 3e9ab9933..5a1d54241 100755
--- a/tools/sdkmanager/libs/sdklib/src/com/android/sdklib/repository/SdkRepository.java
+++ b/tools/sdkmanager/libs/sdklib/src/com/android/sdklib/repository/SdkRepository.java
@@ -63,8 +63,8 @@ public class SdkRepository {
public static final String NODE_VERSION = "version"; //$NON-NLS-1$
/** The api-level, an int > 0, for platform, add-on and doc packages. */
public static final String NODE_API_LEVEL = "api-level"; //$NON-NLS-1$
- /** The api-codename, a string, for platform packages. */
- public static final String NODE_API_CODENAME = "api-codename"; //$NON-NLS-1$
+ /** The codename, a string, for platform packages. */
+ public static final String NODE_CODENAME = "codename"; //$NON-NLS-1$
/** The vendor, a string, for add-on packages. */
public static final String NODE_VENDOR = "vendor"; //$NON-NLS-1$
/** The name, a string, for add-on packages or for libraries. */
diff --git a/tools/sdkmanager/libs/sdklib/src/com/android/sdklib/repository/sdk-repository.xsd b/tools/sdkmanager/libs/sdklib/src/com/android/sdklib/repository/sdk-repository.xsd
index 920823ad6..291e57d91 100755
--- a/tools/sdkmanager/libs/sdklib/src/com/android/sdklib/repository/sdk-repository.xsd
+++ b/tools/sdkmanager/libs/sdklib/src/com/android/sdklib/repository/sdk-repository.xsd
@@ -53,7 +53,7 @@
-
+
@@ -158,6 +158,8 @@
+
+
diff --git a/tools/sdkmanager/libs/sdklib/tests/com/android/sdklib/repository/TestSdkRepository.java b/tools/sdkmanager/libs/sdklib/tests/com/android/sdklib/repository/TestSdkRepository.java
index 207a5a222..b059e4157 100755
--- a/tools/sdkmanager/libs/sdklib/tests/com/android/sdklib/repository/TestSdkRepository.java
+++ b/tools/sdkmanager/libs/sdklib/tests/com/android/sdklib/repository/TestSdkRepository.java
@@ -16,8 +16,6 @@
package com.android.sdklib.repository;
-import com.android.sdklib.SdkConstants;
-
import org.xml.sax.ErrorHandler;
import org.xml.sax.SAXException;
import org.xml.sax.SAXParseException;
diff --git a/tools/sdkmanager/libs/sdklib/tests/com/android/sdklib/repository/repository_sample.xml b/tools/sdkmanager/libs/sdklib/tests/com/android/sdklib/repository/repository_sample.xml
index 68e8efd82..73405498a 100755
--- a/tools/sdkmanager/libs/sdklib/tests/com/android/sdklib/repository/repository_sample.xml
+++ b/tools/sdkmanager/libs/sdklib/tests/com/android/sdklib/repository/repository_sample.xml
@@ -160,7 +160,7 @@
Pastry
5
- Pastry
+ Pastry
3
Preview version for Pastry
diff --git a/tools/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/widgets/AvdSelector.java b/tools/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/widgets/AvdSelector.java
index b27636c30..88ae697f1 100644
--- a/tools/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/widgets/AvdSelector.java
+++ b/tools/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/widgets/AvdSelector.java
@@ -785,7 +785,6 @@ public final class AvdSelector {
mDetailsButton.setEnabled(hasSelection);
mStartButton.setEnabled(mOsSdkPath != null &&
hasSelection &&
- selection != null &&
selection.getStatus() == AvdStatus.OK);
if (mDeleteButton != null) {
@@ -793,7 +792,6 @@ public final class AvdSelector {
}
if (mUpdateButton != null) {
mUpdateButton.setEnabled(hasSelection &&
- selection != null &&
selection.getStatus() == AvdStatus.ERROR_IMAGE_DIR);
}
}