From 0c6def5d3f0d611bca7dbb7c2b773cd1664ec390 Mon Sep 17 00:00:00 2001 From: Raphael Moll Date: Thu, 19 Apr 2012 16:27:03 -0700 Subject: SDK Tools pkg support for major.minor.micro revisions. For tools and platform-tools, we'll support a revision in the form "major.minor.micro rc#". The fourth one is a preview/release candidate number. This allows us to have revisions 18, 18.1, 18.0.1 and 18 rc1, etc. Change-Id: I8a41491d4cd8798f1b71ed7f3484d9293fee81bc --- .../internal/repository/packages/AddonPackage.java | 9 +- .../internal/repository/packages/DocPackage.java | 20 +- .../packages/IAndroidVersionProvider.java | 37 ++ .../repository/packages/IPackageVersion.java | 36 -- .../repository/packages/IPlatformDependency.java | 8 +- .../packages/IPreviewVersionProvider.java | 32 ++ .../internal/repository/packages/Package.java | 12 +- .../repository/packages/PlatformPackage.java | 12 +- .../repository/packages/PlatformToolPackage.java | 10 +- .../repository/packages/PreviewVersion.java | 185 +++++++ .../repository/packages/PreviewVersionPackage.java | 158 ++++++ .../repository/packages/SamplePackage.java | 21 +- .../repository/packages/SourcePackage.java | 11 +- .../repository/packages/SystemImagePackage.java | 9 +- .../internal/repository/packages/ToolPackage.java | 23 +- .../android/sdklib/repository/--sdk-addon-5.xsd | 410 ++++++++++++++ .../sdklib/repository/-sdk-repository-7.xsd | 601 +++++++++++++++++++++ .../com/android/sdklib/repository/PkgProps.java | 12 +- .../sdklib/repository/SdkRepoConstants.java | 14 +- .../com/android/sdklib/repository/sdk-addon-4.xsd | 3 +- .../android/sdklib/repository/sdk-repository-6.xsd | 2 +- .../repository/archives/ArchiveInstallerTest.java | 2 +- .../repository/packages/MockExtraPackage.java | 5 +- .../packages/MockPlatformToolPackage.java | 34 ++ .../packages/MockSystemImagePackage.java | 8 +- .../repository/packages/MockToolPackage.java | 42 +- .../repository/packages/PlatformPackageTest.java | 2 +- .../repository/packages/PreviewVersionTest.java | 107 ++++ .../repository/packages/SourcePackageTest.java | 2 +- .../packages/SystemImagePackageTest.java | 2 +- .../repository/sources/SdkRepoSourceTest.java | 151 +++++- .../repository/ValidateRepositoryXmlTest.java | 26 + .../sdklib/testdata/repository_sample_4.xml | 2 +- .../sdklib/testdata/repository_sample_5.xml | 2 +- .../sdklib/testdata/repository_sample_6.xml | 2 +- .../sdklib/testdata/repository_sample_7.xml | 331 ++++++++++++ .../repository/SdkUpdaterChooserDialog.java | 9 +- .../internal/repository/SdkUpdaterLogic.java | 42 +- .../repository/sdkman2/AdtUpdateDialog.java | 8 +- .../repository/sdkman2/PackagesDiffLogic.java | 10 +- .../internal/repository/sdkman2/PackagesPage.java | 2 +- .../internal/repository/sdkman2/PkgItem.java | 14 +- 42 files changed, 2269 insertions(+), 159 deletions(-) create mode 100755 sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/packages/IAndroidVersionProvider.java delete mode 100755 sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/packages/IPackageVersion.java create mode 100755 sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/packages/IPreviewVersionProvider.java create mode 100755 sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/packages/PreviewVersion.java create mode 100755 sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/packages/PreviewVersionPackage.java create mode 100755 sdkmanager/libs/sdklib/src/com/android/sdklib/repository/--sdk-addon-5.xsd create mode 100755 sdkmanager/libs/sdklib/src/com/android/sdklib/repository/-sdk-repository-7.xsd create mode 100755 sdkmanager/libs/sdklib/tests/src/com/android/sdklib/internal/repository/packages/PreviewVersionTest.java create mode 100755 sdkmanager/libs/sdklib/tests/src/com/android/sdklib/testdata/repository_sample_7.xml (limited to 'sdkmanager/libs') diff --git a/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/packages/AddonPackage.java b/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/packages/AddonPackage.java index cc35e54..9a86952 100755 --- a/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/packages/AddonPackage.java +++ b/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/packages/AddonPackage.java @@ -47,7 +47,8 @@ import java.util.Properties; * Represents an add-on XML node in an SDK repository. */ public class AddonPackage extends Package - implements IPackageVersion, IPlatformDependency, IExactApiLevelDependency, ILayoutlibVersion { + implements IAndroidVersionProvider, IPlatformDependency, + IExactApiLevelDependency, ILayoutlibVersion { private final String mVendorId; private final String mVendorDisplay; @@ -428,8 +429,8 @@ public class AddonPackage extends Package *

* An add-on has the same {@link AndroidVersion} as the platform it depends on. */ - @Override - public @NonNull AndroidVersion getVersion() { + @Override @NonNull + public AndroidVersion getAndroidVersion() { return mVersion; } @@ -601,7 +602,7 @@ public class AddonPackage extends Package // check they are the same add-on. if (getNameId().equals(newPkg.getNameId()) && - getVersion().equals(newPkg.getVersion())) { + getAndroidVersion().equals(newPkg.getAndroidVersion())) { // Check the vendor-id field. if (getVendorId().equals(newPkg.getVendorId())) { return true; diff --git a/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/packages/DocPackage.java b/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/packages/DocPackage.java index 54dfc5e..635dff9 100755 --- a/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/packages/DocPackage.java +++ b/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/packages/DocPackage.java @@ -16,6 +16,7 @@ package com.android.sdklib.internal.repository.packages; +import com.android.annotations.NonNull; import com.android.sdklib.AndroidVersion; import com.android.sdklib.SdkConstants; import com.android.sdklib.SdkManager; @@ -35,11 +36,11 @@ import java.util.Properties; /** * Represents a doc XML node in an SDK repository. *

- * Note that a doc package has a version and thus implements {@link IPackageVersion}. + * Note that a doc package has a version and thus implements {@link IAndroidVersionProvider}. * However there is no mandatory dependency that limits installation so this does not * implement {@link IPlatformDependency}. */ -public class DocPackage extends Package implements IPackageVersion { +public class DocPackage extends Package implements IAndroidVersionProvider { private final AndroidVersion mVersion; @@ -53,7 +54,10 @@ public class DocPackage extends Package implements IPackageVersion { * parameters that vary according to the originating XML schema. * @param licenses The licenses loaded from the XML originating document. */ - public DocPackage(SdkSource source, Node packageNode, String nsUri, Map licenses) { + public DocPackage(SdkSource source, + Node packageNode, + String nsUri, + Map licenses) { super(source, packageNode, nsUri, licenses); int apiLevel = XmlParserUtils.getXmlInt (packageNode, SdkRepoConstants.NODE_API_LEVEL, 0); @@ -124,8 +128,8 @@ public class DocPackage extends Package implements IPackageVersion { * Returns the version, for platform, add-on and doc packages. * Can be 0 if this is a local package of unknown api-level. */ - @Override - public AndroidVersion getVersion() { + @Override @NonNull + public AndroidVersion getAndroidVersion() { return mVersion; } @@ -220,8 +224,8 @@ public class DocPackage extends Package implements IPackageVersion { @Override public boolean sameItemAs(Package pkg) { if (pkg instanceof DocPackage) { - AndroidVersion rev2 = ((DocPackage) pkg).getVersion(); - return this.getVersion().equals(rev2); + AndroidVersion rev2 = ((DocPackage) pkg).getAndroidVersion(); + return this.getAndroidVersion().equals(rev2); } return false; @@ -248,7 +252,7 @@ public class DocPackage extends Package implements IPackageVersion { DocPackage replacementDoc = (DocPackage)replacementPackage; - AndroidVersion replacementVersion = replacementDoc.getVersion(); + AndroidVersion replacementVersion = replacementDoc.getAndroidVersion(); // Check if they're the same exact (api and codename) if (replacementVersion.equals(mVersion)) { diff --git a/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/packages/IAndroidVersionProvider.java b/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/packages/IAndroidVersionProvider.java new file mode 100755 index 0000000..e3ab5bd --- /dev/null +++ b/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/packages/IAndroidVersionProvider.java @@ -0,0 +1,37 @@ +/* + * Copyright (C) 2009 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.sdklib.internal.repository.packages; + +import com.android.annotations.NonNull; +import com.android.sdklib.AndroidVersion; + +/** + * Interface for packages that provide an {@link AndroidVersion}. + *

+ * Note that {@link IPlatformDependency} is a similar interface, but with a different semantic. + * The {@link IPlatformDependency} denotes that a given package can only be installed if the + * requested platform is present, whereas this interface denotes that the given package simply + * has a version, which is not necessarily a dependency. + */ +public interface IAndroidVersionProvider { + + /** + * Returns the android version, for platform, add-on and doc packages. + * Can be 0 if this is a local package of unknown api-level. + */ + public abstract @NonNull AndroidVersion getAndroidVersion(); +} diff --git a/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/packages/IPackageVersion.java b/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/packages/IPackageVersion.java deleted file mode 100755 index 77a6a1d..0000000 --- a/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/packages/IPackageVersion.java +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Copyright (C) 2009 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.android.sdklib.internal.repository.packages; - -import com.android.sdklib.AndroidVersion; - -/** - * Interface for packages that provide an {@link AndroidVersion}. - *

- * Note that {@link IPlatformDependency} is a similar interface, but with a different semantic. - * The {@link IPlatformDependency} denotes that a given package can only be installed if the - * requested platform is present, whereas this interface denotes that the given package simply - * has a version, which is not necessarily a dependency. - */ -public interface IPackageVersion { - - /** - * Returns the version, for platform, add-on and doc packages. - * Can be 0 if this is a local package of unknown api-level. - */ - public abstract AndroidVersion getVersion(); -} diff --git a/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/packages/IPlatformDependency.java b/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/packages/IPlatformDependency.java index a61fbea..9665528 100755 --- a/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/packages/IPlatformDependency.java +++ b/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/packages/IPlatformDependency.java @@ -25,13 +25,13 @@ import com.android.sdklib.AndroidVersion; * A package that has this dependency can only be installed if a platform with at least the * requested API level is present or installed at the same time. *

- * Note that although this interface looks like {@link IPackageVersion}, it does not convey - * the same semantic, that is {@link IPackageVersion} does not imply any dependency being - * a limiting factor as far as installation is concerned. + * Note that although this interface looks like {@link IAndroidVersionProvider}, it does + * not convey the same semantic since {@link IAndroidVersionProvider} does not + * imply any dependency being a limiting factor as far as installation is concerned. */ public interface IPlatformDependency { /** Returns the version of the platform dependency of this package. */ - AndroidVersion getVersion(); + AndroidVersion getAndroidVersion(); } diff --git a/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/packages/IPreviewVersionProvider.java b/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/packages/IPreviewVersionProvider.java new file mode 100755 index 0000000..5a9f8a0 --- /dev/null +++ b/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/packages/IPreviewVersionProvider.java @@ -0,0 +1,32 @@ +/* + * Copyright (C) 2009 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.sdklib.internal.repository.packages; + +import com.android.annotations.NonNull; + + +/** + * Interface for packages that provide a {@link PreviewVersion}, + * which is a multi-part revision number (major.minor.micro) and an optional preview revision. + */ +public interface IPreviewVersionProvider { + + /** + * Returns a {@link PreviewVersion} for this package. Never null. + */ + public abstract @NonNull PreviewVersion getPreviewVersion(); +} diff --git a/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/packages/Package.java b/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/packages/Package.java index 0e2b615..6760747 100755 --- a/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/packages/Package.java +++ b/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/packages/Package.java @@ -730,10 +730,10 @@ public abstract class Package implements IDescription, Comparable { // We insert the package version here because it is more important // than the revision number. We want package version to be sorted // top-down, so we'll use 10k-api as the sorting key. The day we - // get reach 10k APIs, we'll need to revisit this. + // reach 10k APIs, we'll need to revisit this. sb.append("|v:"); //$NON-NLS-1$ - if (this instanceof IPackageVersion) { - AndroidVersion v = ((IPackageVersion) this).getVersion(); + if (this instanceof IAndroidVersionProvider) { + AndroidVersion v = ((IAndroidVersionProvider) this).getAndroidVersion(); sb.append(String.format("%1$04d.%2$d", //$NON-NLS-1$ 10000 - v.getApiLevel(), @@ -743,7 +743,11 @@ public abstract class Package implements IDescription, Comparable { // Append revision number sb.append("|r:"); //$NON-NLS-1$ - sb.append(String.format("%1$04d", getRevision())); //$NON-NLS-1$ + if (this instanceof IPreviewVersionProvider) { + sb.append(String.format("%1$s", ((IPreviewVersionProvider) this).getPreviewVersion())); + } else { + sb.append(String.format("%1$04d", getRevision())); //$NON-NLS-1$ + } sb.append('|'); return sb.toString(); diff --git a/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/packages/PlatformPackage.java b/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/packages/PlatformPackage.java index 391c32e..2f75610 100755 --- a/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/packages/PlatformPackage.java +++ b/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/packages/PlatformPackage.java @@ -16,6 +16,7 @@ package com.android.sdklib.internal.repository.packages; +import com.android.annotations.NonNull; import com.android.annotations.VisibleForTesting; import com.android.annotations.VisibleForTesting.Visibility; import com.android.sdklib.AndroidVersion; @@ -40,7 +41,8 @@ import java.util.Properties; /** * Represents a platform XML node in an SDK repository. */ -public class PlatformPackage extends MinToolsPackage implements IPackageVersion, ILayoutlibVersion { +public class PlatformPackage extends MinToolsPackage + implements IAndroidVersionProvider, ILayoutlibVersion { /** The package version, for platform, add-on and doc packages. */ private final AndroidVersion mVersion; @@ -145,8 +147,8 @@ public class PlatformPackage extends MinToolsPackage implements IPackageVersion, } /** Returns the package version, for platform, add-on and doc packages. */ - @Override - public AndroidVersion getVersion() { + @Override @NonNull + public AndroidVersion getAndroidVersion() { return mVersion; } @@ -279,7 +281,7 @@ public class PlatformPackage extends MinToolsPackage implements IPackageVersion, File platforms = new File(osSdkRoot, SdkConstants.FD_PLATFORMS); File folder = new File(platforms, - String.format("android-%s", getVersion().getApiString())); //$NON-NLS-1$ + String.format("android-%s", getAndroidVersion().getApiString())); //$NON-NLS-1$ return folder; } @@ -290,7 +292,7 @@ public class PlatformPackage extends MinToolsPackage implements IPackageVersion, PlatformPackage newPkg = (PlatformPackage)pkg; // check they are the same version. - return newPkg.getVersion().equals(this.getVersion()); + return newPkg.getAndroidVersion().equals(this.getAndroidVersion()); } return false; diff --git a/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/packages/PlatformToolPackage.java b/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/packages/PlatformToolPackage.java index 6070593..2566ce3 100755 --- a/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/packages/PlatformToolPackage.java +++ b/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/packages/PlatformToolPackage.java @@ -39,7 +39,7 @@ import java.util.Set; /** * Represents a platform-tool XML node in an SDK repository. */ -public class PlatformToolPackage extends Package { +public class PlatformToolPackage extends PreviewVersionPackage { /** The value returned by {@link PlatformToolPackage#installId()}. */ public static final String INSTALL_ID = "platform-tools"; //$NON-NLS-1$ @@ -178,8 +178,8 @@ public class PlatformToolPackage extends Package { */ @Override public String getShortDescription() { - return String.format("Android SDK Platform-tools, revision %1$d%2$s", - getRevision(), + return String.format("Android SDK Platform-tools, revision %1$s%2$s", + getPreviewVersion().toShortString(), isObsolete() ? " (Obsolete)" : ""); } @@ -192,8 +192,8 @@ public class PlatformToolPackage extends Package { } if (s.indexOf("revision") == -1) { - s += String.format("\nRevision %1$d%2$s", - getRevision(), + s += String.format("\nRevision %1$s%2$s", + getPreviewVersion().toShortString(), isObsolete() ? " (Obsolete)" : ""); } diff --git a/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/packages/PreviewVersion.java b/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/packages/PreviewVersion.java new file mode 100755 index 0000000..a75eb4b --- /dev/null +++ b/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/packages/PreviewVersion.java @@ -0,0 +1,185 @@ +/* + * Copyright (C) 2012 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.sdklib.internal.repository.packages; + + +/** + * Package multi-part revision number composed of a tuple + * (major.minor.micro) and an optional preview revision + * (the lack of a preview number indicates it's not a preview + * but a final package.) + */ +public class PreviewVersion implements Comparable { + + public static final int IMPLICIT_MINOR_REV = 0; + public static final int IMPLICIT_MICRO_REV = 0; + public static final int NOT_A_PREVIEW = 0; + + private final int mMajor; + private final int mMinor; + private final int mMicro; + private final int mPreview; + + public PreviewVersion(int major) { + this(major, 0, 0); + } + + public PreviewVersion(int major, int minor, int micro) { + this(major, minor, micro, NOT_A_PREVIEW); + } + + public PreviewVersion(int major, int minor, int micro, int preview) { + mMajor = major; + mMinor = minor; + mMicro = micro; + mPreview = preview; + } + + public int getMajor() { + return mMajor; + } + + public int getMinor() { + return mMinor; + } + + public int getMicro() { + return mMicro; + } + + public boolean isPreview() { + return mPreview > NOT_A_PREVIEW; + } + + public int getPreview() { + return mPreview; + } + + /** + * Returns the version in a fixed format major.minor.micro + * with an optional "rc preview#". For example it would + * return "18.0.0", "18.1.0" or "18.1.2 rc5". + */ + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append(mMajor) + .append('.').append(mMinor) + .append('.').append(mMicro); + + if (mPreview != NOT_A_PREVIEW) { + sb.append(" rc").append(mPreview); + } + + return sb.toString(); + } + + /** + * Returns the version in a dynamic format "major.minor.micro rc#". + * This is similar to {@link #toString()} except it omits minor, micro + * or preview versions when they are zero. + * For example it would return "18 rc1" instead of "18.0.0 rc1", + * or "18.1 rc2" instead of "18.1.0 rc2". + */ + public String toShortString() { + StringBuilder sb = new StringBuilder(); + sb.append(mMajor); + if (mMinor > 0 || mMicro > 0) { + sb.append('.').append(mMinor); + } + if (mMicro > 0) { + sb.append('.').append(mMicro); + } + if (mPreview != NOT_A_PREVIEW) { + sb.append(" rc").append(mPreview); + } + + return sb.toString(); + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + mMajor; + result = prime * result + mMinor; + result = prime * result + mMicro; + result = prime * result + mPreview; + return result; + } + + @Override + public boolean equals(Object rhs) { + if (this == rhs) { + return true; + } + if (rhs == null) { + return false; + } + if (!(rhs instanceof PreviewVersion)) { + return false; + } + PreviewVersion other = (PreviewVersion) rhs; + if (mMajor != other.mMajor) { + return false; + } + if (mMinor != other.mMinor) { + return false; + } + if (mMicro != other.mMicro) { + return false; + } + if (mPreview != other.mPreview) { + return false; + } + return true; + } + + /** + * Trivial comparision of a version, e.g 17.1.2 < 18.0.0. + * + * Note that preview/release candidate are released before their final version, + * so "18.0.0 rc1" comes below "18.0.0". The best way to think of it as if the + * lack of preview number was "+inf": + * "18.1.2 rc5" => "18.1.2.5" so its less than "18.1.2.+INF" but more than "18.1.1.0" + * and more than "18.1.2.4" + */ + @Override + public int compareTo(PreviewVersion rhs) { + int delta = mMajor - rhs.mMajor; + if (delta != 0) { + return delta; + } + + delta = mMinor - rhs.mMinor; + if (delta != 0) { + return delta; + } + + delta = mMicro - rhs.mMicro; + if (delta != 0) { + return delta; + } + + int p1 = mPreview == NOT_A_PREVIEW ? Integer.MAX_VALUE : mPreview; + int p2 = rhs.mPreview == NOT_A_PREVIEW ? Integer.MAX_VALUE : rhs.mPreview; + delta = p1 - p2; + return delta; + } + + +} diff --git a/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/packages/PreviewVersionPackage.java b/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/packages/PreviewVersionPackage.java new file mode 100755 index 0000000..eac548e --- /dev/null +++ b/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/packages/PreviewVersionPackage.java @@ -0,0 +1,158 @@ +/* + * Copyright (C) 2012 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.sdklib.internal.repository.packages; + +import com.android.annotations.NonNull; +import com.android.sdklib.internal.repository.XmlParserUtils; +import com.android.sdklib.internal.repository.archives.Archive.Arch; +import com.android.sdklib.internal.repository.archives.Archive.Os; +import com.android.sdklib.internal.repository.sources.SdkSource; +import com.android.sdklib.repository.PkgProps; +import com.android.sdklib.repository.SdkRepoConstants; + +import org.w3c.dom.Node; + +import java.util.Map; +import java.util.Properties; + +/** + * Represents a package in an SDK repository that has a {@link PreviewVersion}, + * which is a multi-part revision number (major.minor.micro) and an optional preview revision. + */ +public abstract class PreviewVersionPackage extends Package + implements IPreviewVersionProvider { + + private final PreviewVersion mPreviewVersion; + + /** + * Creates a new package from the attributes and elements of the given XML node. + * This constructor should throw an exception if the package cannot be created. + * + * @param source The {@link SdkSource} where this is loaded from. + * @param packageNode The XML element being parsed. + * @param nsUri The namespace URI of the originating XML document, to be able to deal with + * parameters that vary according to the originating XML schema. + * @param licenses The licenses loaded from the XML originating document. + */ + PreviewVersionPackage(SdkSource source, + Node packageNode, + String nsUri, + Map licenses) { + super(source, packageNode, nsUri, licenses); + + // The major revision is getRevision(), already handled by Package. + + int minorRevision = XmlParserUtils.getXmlInt(packageNode, + SdkRepoConstants.NODE_MINOR_REV, + PreviewVersion.IMPLICIT_MINOR_REV); + int microRevision = XmlParserUtils.getXmlInt(packageNode, + SdkRepoConstants.NODE_MICRO_REV, + PreviewVersion.IMPLICIT_MICRO_REV); + int preview = XmlParserUtils.getXmlInt(packageNode, + SdkRepoConstants.NODE_PREVIEW, + PreviewVersion.NOT_A_PREVIEW); + + mPreviewVersion = new PreviewVersion(getRevision(), minorRevision, microRevision, preview); + } + + /** + * Manually create a new package with one archive and the given attributes. + * This is used to create packages from local directories in which case there must be + * one archive which URL is the actual target location. + *

+ * Properties from props are used first when possible, e.g. if props is non null. + *

+ * By design, this creates a package with one and only one archive. + */ + public PreviewVersionPackage( + SdkSource source, + Properties props, + int revision, + String license, + String description, + String descUrl, + Os archiveOs, + Arch archiveArch, + String archiveOsPath) { + super(source, props, revision, license, description, descUrl, + archiveOs, archiveArch, archiveOsPath); + + // The major revision is getRevision(), already handled by Package. + + int minorRevision = Integer.parseInt( + getProperty(props, + PkgProps.PKG_MINOR_REV, + Integer.toString(PreviewVersion.IMPLICIT_MINOR_REV))); + int microRevision = Integer.parseInt( + getProperty(props, + PkgProps.PKG_MICRO_REV, + Integer.toString(PreviewVersion.IMPLICIT_MINOR_REV))); + int preview = Integer.parseInt( + getProperty(props, + PkgProps.PKG_PREVIEW_REV, + Integer.toString(PreviewVersion.NOT_A_PREVIEW))); + + mPreviewVersion = new PreviewVersion(getRevision(), minorRevision, microRevision, preview); + } + + @Override @NonNull + public PreviewVersion getPreviewVersion() { + return mPreviewVersion; + } + + @Override + public void saveProperties(Properties props) { + super.saveProperties(props); + + // The major revision is getRevision(), already handled by Package. + assert mPreviewVersion.getMajor() == getRevision(); + + props.setProperty(PkgProps.PKG_MINOR_REV, Integer.toString(mPreviewVersion.getMinor())); + props.setProperty(PkgProps.PKG_MICRO_REV, Integer.toString(mPreviewVersion.getMicro())); + props.setProperty(PkgProps.PKG_PREVIEW_REV, Integer.toString(mPreviewVersion.getPreview())); + } + + @Override + public int hashCode() { + final int prime = 31; + int result = super.hashCode(); + result = prime * result + ((mPreviewVersion == null) ? 0 : mPreviewVersion.hashCode()); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + if (!super.equals(obj)) { + return false; + } + if (!(obj instanceof PreviewVersionPackage)) { + return false; + } + PreviewVersionPackage other = (PreviewVersionPackage) obj; + if (mPreviewVersion == null) { + if (other.mPreviewVersion != null) { + return false; + } + } else if (!mPreviewVersion.equals(other.mPreviewVersion)) { + return false; + } + return true; + } +} diff --git a/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/packages/SamplePackage.java b/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/packages/SamplePackage.java index ed5eda5..e95c12e 100755 --- a/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/packages/SamplePackage.java +++ b/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/packages/SamplePackage.java @@ -16,6 +16,7 @@ package com.android.sdklib.internal.repository.packages; +import com.android.annotations.NonNull; import com.android.sdklib.AndroidVersion; import com.android.sdklib.AndroidVersion.AndroidVersionException; import com.android.sdklib.IAndroidTarget; @@ -49,7 +50,7 @@ import java.util.Properties; * Represents a sample XML node in an SDK repository. */ public class SamplePackage extends MinToolsPackage - implements IPackageVersion, IMinApiLevelDependency { + implements IAndroidVersionProvider, IMinApiLevelDependency { /** The matching platform version. */ private final AndroidVersion mVersion; @@ -70,7 +71,10 @@ public class SamplePackage extends MinToolsPackage * parameters that vary according to the originating XML schema. * @param licenses The licenses loaded from the XML originating document. */ - public SamplePackage(SdkSource source, Node packageNode, String nsUri, Map licenses) { + public SamplePackage(SdkSource source, + Node packageNode, + String nsUri, + Map licenses) { super(source, packageNode, nsUri, licenses); int apiLevel = XmlParserUtils.getXmlInt (packageNode, SdkRepoConstants.NODE_API_LEVEL, 0); @@ -133,7 +137,8 @@ public class SamplePackage extends MinToolsPackage * @throws AndroidVersionException if the {@link AndroidVersion} can't be restored * from properties. */ - public static Package create(String archiveOsPath, Properties props) throws AndroidVersionException { + public static Package create(String archiveOsPath, Properties props) + throws AndroidVersionException { return new SamplePackage(archiveOsPath, props); } @@ -182,8 +187,8 @@ public class SamplePackage extends MinToolsPackage } /** Returns the matching platform version. */ - @Override - public AndroidVersion getVersion() { + @Override @NonNull + public AndroidVersion getAndroidVersion() { return mVersion; } @@ -284,12 +289,12 @@ public class SamplePackage extends MinToolsPackage // Otherwise, get a suitable default File folder = new File(samplesRoot, - String.format("android-%s", getVersion().getApiString())); //$NON-NLS-1$ + String.format("android-%s", getAndroidVersion().getApiString())); //$NON-NLS-1$ for (int n = 1; folder.exists(); n++) { // Keep trying till we find an unused directory. folder = new File(samplesRoot, - String.format("android-%s_%d", getVersion().getApiString(), n)); //$NON-NLS-1$ + String.format("android-%s_%d", getAndroidVersion().getApiString(), n)); //$NON-NLS-1$ } return folder; @@ -301,7 +306,7 @@ public class SamplePackage extends MinToolsPackage SamplePackage newPkg = (SamplePackage)pkg; // check they are the same version. - return newPkg.getVersion().equals(this.getVersion()); + return newPkg.getAndroidVersion().equals(this.getAndroidVersion()); } return false; diff --git a/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/packages/SourcePackage.java b/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/packages/SourcePackage.java index 2c577e4..cf280f8 100755 --- a/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/packages/SourcePackage.java +++ b/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/packages/SourcePackage.java @@ -16,6 +16,7 @@ package com.android.sdklib.internal.repository.packages; +import com.android.annotations.NonNull; import com.android.annotations.VisibleForTesting; import com.android.annotations.VisibleForTesting.Visibility; import com.android.sdklib.AndroidVersion; @@ -42,11 +43,11 @@ import java.util.Properties; /** * Represents a source XML node in an SDK repository. *

- * Note that a source package has a version and thus implements {@link IPackageVersion}. + * Note that a source package has a version and thus implements {@link IAndroidVersionProvider}. * However there is no mandatory dependency that limits installation so this does not * implement {@link IPlatformDependency}. */ -public class SourcePackage extends Package implements IPackageVersion { +public class SourcePackage extends Package implements IAndroidVersionProvider { /** The package version, for platform, add-on and doc packages. */ private final AndroidVersion mVersion; @@ -184,8 +185,8 @@ public class SourcePackage extends Package implements IPackageVersion { /** * Returns the android version of this package. */ - @Override - public AndroidVersion getVersion() { + @Override @NonNull + public AndroidVersion getAndroidVersion() { return mVersion; } @@ -300,7 +301,7 @@ public class SourcePackage extends Package implements IPackageVersion { SourcePackage newPkg = (SourcePackage)pkg; // check they are the same version. - return getVersion().equals(newPkg.getVersion()); + return getAndroidVersion().equals(newPkg.getAndroidVersion()); } return false; diff --git a/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/packages/SystemImagePackage.java b/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/packages/SystemImagePackage.java index c862882..e1e441c 100755 --- a/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/packages/SystemImagePackage.java +++ b/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/packages/SystemImagePackage.java @@ -16,6 +16,7 @@ package com.android.sdklib.internal.repository.packages; +import com.android.annotations.NonNull; import com.android.annotations.VisibleForTesting; import com.android.annotations.VisibleForTesting.Visibility; import com.android.sdklib.AndroidVersion; @@ -42,7 +43,7 @@ import java.util.Properties; * Represents a system-image XML node in an SDK repository. */ public class SystemImagePackage extends Package - implements IPackageVersion, IPlatformDependency { + implements IAndroidVersionProvider, IPlatformDependency { /** The package version, for platform, add-on and doc packages. */ private final AndroidVersion mVersion; @@ -217,8 +218,8 @@ public class SystemImagePackage extends Package *

* A system-image has the same {@link AndroidVersion} as the platform it depends on. */ - @Override - public AndroidVersion getVersion() { + @Override @NonNull + public AndroidVersion getAndroidVersion() { return mVersion; } @@ -314,7 +315,7 @@ public class SystemImagePackage extends Package // check they are the same abi and version. return getAbi().equals(newPkg.getAbi()) && - getVersion().equals(newPkg.getVersion()); + getAndroidVersion().equals(newPkg.getAndroidVersion()); } return false; diff --git a/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/packages/ToolPackage.java b/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/packages/ToolPackage.java index e4a8fe6..763ed43 100755 --- a/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/packages/ToolPackage.java +++ b/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/packages/ToolPackage.java @@ -27,6 +27,7 @@ import com.android.sdklib.internal.repository.archives.Archive; import com.android.sdklib.internal.repository.archives.Archive.Arch; import com.android.sdklib.internal.repository.archives.Archive.Os; import com.android.sdklib.internal.repository.sources.SdkSource; +import com.android.sdklib.repository.PkgProps; import com.android.sdklib.repository.SdkRepoConstants; import com.android.sdklib.util.GrabProcessOutput; import com.android.sdklib.util.GrabProcessOutput.IProcessOutput; @@ -43,14 +44,11 @@ import java.util.regex.Pattern; /** * Represents a tool XML node in an SDK repository. */ -public class ToolPackage extends Package implements IMinPlatformToolsDependency { +public class ToolPackage extends PreviewVersionPackage implements IMinPlatformToolsDependency { /** The value returned by {@link ToolPackage#installId()}. */ public static final String INSTALL_ID = "tools"; //$NON-NLS-1$ - public static final String PROP_MIN_PLATFORM_TOOLS_REV = - "Platform.MinPlatformToolsRev"; //$NON-NLS-1$ - /** * The minimal revision of the platform-tools package required by this package * or {@link #MIN_PLATFORM_TOOLS_REV_INVALID} if the value was missing. @@ -67,7 +65,10 @@ public class ToolPackage extends Package implements IMinPlatformToolsDependency * parameters that vary according to the originating XML schema. * @param licenses The licenses loaded from the XML originating document. */ - public ToolPackage(SdkSource source, Node packageNode, String nsUri, Map licenses) { + public ToolPackage(SdkSource source, + Node packageNode, + String nsUri, + Map licenses) { super(source, packageNode, nsUri, licenses); mMinPlatformToolsRevision = XmlParserUtils.getXmlInt( @@ -145,7 +146,7 @@ public class ToolPackage extends Package implements IMinPlatformToolsDependency mMinPlatformToolsRevision = Integer.parseInt( getProperty( props, - PROP_MIN_PLATFORM_TOOLS_REV, + PkgProps.MIN_PLATFORM_TOOLS_REV, Integer.toString(MIN_PLATFORM_TOOLS_REV_INVALID))); } @@ -187,8 +188,8 @@ public class ToolPackage extends Package implements IMinPlatformToolsDependency */ @Override public String getShortDescription() { - return String.format("Android SDK Tools, revision %1$d%2$s", - getRevision(), + return String.format("Android SDK Tools, revision %1$s%2$s", + getPreviewVersion().toShortString(), isObsolete() ? " (Obsolete)" : ""); } @@ -201,8 +202,8 @@ public class ToolPackage extends Package implements IMinPlatformToolsDependency } if (s.indexOf("revision") == -1) { - s += String.format("\nRevision %1$d%2$s", - getRevision(), + s += String.format("\nRevision %1$s%2$s", + getPreviewVersion().toShortString(), isObsolete() ? " (Obsolete)" : ""); } @@ -235,7 +236,7 @@ public class ToolPackage extends Package implements IMinPlatformToolsDependency super.saveProperties(props); if (getMinPlatformToolsRevision() != MIN_PLATFORM_TOOLS_REV_INVALID) { - props.setProperty(PROP_MIN_PLATFORM_TOOLS_REV, + props.setProperty(PkgProps.MIN_PLATFORM_TOOLS_REV, Integer.toString(getMinPlatformToolsRevision())); } } diff --git a/sdkmanager/libs/sdklib/src/com/android/sdklib/repository/--sdk-addon-5.xsd b/sdkmanager/libs/sdklib/src/com/android/sdklib/repository/--sdk-addon-5.xsd new file mode 100755 index 0000000..180a885 --- /dev/null +++ b/sdkmanager/libs/sdklib/src/com/android/sdklib/repository/--sdk-addon-5.xsd @@ -0,0 +1,410 @@ + + + + + + + + + + + + The repository contains a collection of downloadable packages. + + + + + + + + + + + + + + An SDK add-on package. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + An ID string for an addon/extra name-id or vendor-id + can only be simple alphanumeric string. + + + + + + + + + + + + + + Version information for a layoutlib included in an addon. + . + + + + + + + + + + + + + + + + An SDK extra package. This kind of package is for "free" content. + Such packages are installed in SDK/vendor/path. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + One path segment for the install path of an extra element. + It must be a single-segment path. It must not be empty. + + + + + + + + + + + A semi-colon separated list of a segmentTypes. + + + + + + + + + + + + + + A license definition. Such a license must be used later as a reference + using a uses-license element in one of the package elements. + + + + + + + + + + + + + + + + + Describes the license used by a package. The license MUST be defined + using a license node and referenced using the ref attribute of the + license element inside a package. + + + + + + + + + + + + A collection of files that can be downloaded for a given architecture. + The <archives> node is mandatory in the repository packages and the + collection must have at least one <archive> declared. + Each archive is a zip file that will be unzipped in a location that depends + on its package type. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A collection of file paths available in an <extra> package + that can be installed in an Android project. + If present, the <project-files> collection must contain at least one path. + Each path is relative to the root directory of the package. + + + + + + + + + + + + + + A SHA1 checksum. + + + + + + + + + A file checksum, currently only SHA1. + + + + + + + + + diff --git a/sdkmanager/libs/sdklib/src/com/android/sdklib/repository/-sdk-repository-7.xsd b/sdkmanager/libs/sdklib/src/com/android/sdklib/repository/-sdk-repository-7.xsd new file mode 100755 index 0000000..c1e5017 --- /dev/null +++ b/sdkmanager/libs/sdklib/src/com/android/sdklib/repository/-sdk-repository-7.xsd @@ -0,0 +1,601 @@ + + + + + + + + + + + + The repository contains a collection of downloadable packages. + + + + + + + + + + + + + + + + + + + An SDK platform package. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Version information for a layoutlib included in a platform. + + + + + + + + + + + + + + + + + System Image for a platform. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + The ABI of a platform's system image. + + + + + + + + + + + + + + + + Sources for a platform. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + An SDK tool package. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + An SDK platform-tool package. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + An SDK doc package. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + An SDK sample package. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + One path segment for the install path of an extra element. + It must be a single-segment path. + + + + + + + + + + + A semi-colon separated list of a segmentTypes. + + + + + + + + + + + + + + A license definition. Such a license must be used later as a reference + using a uses-license element in one of the package elements. + + + + + + + + + + + + + + + + + Describes the license used by a package. The license MUST be defined + using a license node and referenced using the ref attribute of the + license element inside a package. + + + + + + + + + + + + A collection of files that can be downloaded for a given architecture. + The <archives> node is mandatory in the repository packages and the + collection must have at least one <archive> declared. + Each archive is a zip file that will be unzipped in a location that depends + on its package type. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A collection of file paths available in an <extra> package + that can be installed in an Android project. + If present, the <project-files> collection must contain at least one path. + Each path is relative to the root directory of the package. + + + + + + + + + + + + + + A SHA1 checksum. + + + + + + + + + A file checksum, currently only SHA1. + + + + + + + + + diff --git a/sdkmanager/libs/sdklib/src/com/android/sdklib/repository/PkgProps.java b/sdkmanager/libs/sdklib/src/com/android/sdklib/repository/PkgProps.java index 579656a..a570153 100755 --- a/sdkmanager/libs/sdklib/src/com/android/sdklib/repository/PkgProps.java +++ b/sdkmanager/libs/sdklib/src/com/android/sdklib/repository/PkgProps.java @@ -44,6 +44,13 @@ public class PkgProps { public static final String VERSION_API_LEVEL = "AndroidVersion.ApiLevel";//$NON-NLS-1$ public static final String VERSION_CODENAME = "AndroidVersion.CodeName";//$NON-NLS-1$ + // PreviewVersion + + public static final String PKG_MINOR_REV = "PreviewVersion.MinorRev";//$NON-NLS-1$ + public static final String PKG_MICRO_REV = "PreviewVersion.MicroRev";//$NON-NLS-1$ + public static final String PKG_PREVIEW_REV = "PreviewVersion.Preview"; //$NON-NLS-1$ + + // AddonPackage public static final String ADDON_NAME = "Addon.Name"; //$NON-NLS-1$ @@ -81,7 +88,10 @@ public class PkgProps { public static final String PLATFORM_VERSION = "Platform.Version"; //$NON-NLS-1$ public static final String PLATFORM_INCLUDED_ABI = "Platform.Included.Abi"; //$NON-NLS-1$ - // PlatformToolPackage + // ToolPackage + + public static final String MIN_PLATFORM_TOOLS_REV = "Platform.MinPlatformToolsRev";//$NON-NLS-1$ + // SamplePackage diff --git a/sdkmanager/libs/sdklib/src/com/android/sdklib/repository/SdkRepoConstants.java b/sdkmanager/libs/sdklib/src/com/android/sdklib/repository/SdkRepoConstants.java index 258ea26..9f4077f 100755 --- a/sdkmanager/libs/sdklib/src/com/android/sdklib/repository/SdkRepoConstants.java +++ b/sdkmanager/libs/sdklib/src/com/android/sdklib/repository/SdkRepoConstants.java @@ -30,7 +30,7 @@ public class SdkRepoConstants extends RepoConstants { * The latest version of the sdk-repository XML Schema. * Valid version numbers are between 1 and this number, included. */ - public static final int NS_LATEST_VERSION = 6; + public static final int NS_LATEST_VERSION = 7; /** * The min version of the sdk-repository XML Schema we'll try to load. @@ -80,6 +80,18 @@ public class SdkRepoConstants extends RepoConstants { /** The root sdk-repository element */ public static final String NODE_SDK_REPOSITORY = "sdk-repository"; //$NON-NLS-1$ + /* The minor revision for tool and platform-tool package + * (the full revision number is revision.minor.micro + preview#.) + * Optional int >= 0. Implied to be 0 when missing. */ + public static final String NODE_MINOR_REV = "minor-rev"; //$NON-NLS-1$ + /* The micro revision for tool and platform-tool package + * (the full revision number is revision.minor.micro + preview#.) + * Optional int >= 0. Implied to be 0 when missing. */ + public static final String NODE_MICRO_REV = "micro-rev"; //$NON-NLS-1$ + /* The preview revision for tool and platform-tool package. + * Int > 0, only present for "preview / release candidate" packages. */ + public static final String NODE_PREVIEW = "preview"; //$NON-NLS-1$ + /** A platform package. */ public static final String NODE_PLATFORM = "platform"; //$NON-NLS-1$ /** A tool package. */ diff --git a/sdkmanager/libs/sdklib/src/com/android/sdklib/repository/sdk-addon-4.xsd b/sdkmanager/libs/sdklib/src/com/android/sdklib/repository/sdk-addon-4.xsd index 564aaeb..c31efbf 100755 --- a/sdkmanager/libs/sdklib/src/com/android/sdklib/repository/sdk-addon-4.xsd +++ b/sdkmanager/libs/sdklib/src/com/android/sdklib/repository/sdk-addon-4.xsd @@ -137,7 +137,8 @@ + When the element is absent, it indicates this is a released package. + DEPRECATED. TODO remove in sdk-addon-5. --> diff --git a/sdkmanager/libs/sdklib/src/com/android/sdklib/repository/sdk-repository-6.xsd b/sdkmanager/libs/sdklib/src/com/android/sdklib/repository/sdk-repository-6.xsd index 87e183a..bccce69 100755 --- a/sdkmanager/libs/sdklib/src/com/android/sdklib/repository/sdk-repository-6.xsd +++ b/sdkmanager/libs/sdklib/src/com/android/sdklib/repository/sdk-repository-6.xsd @@ -1,6 +1,6 @@ + + + + + + This is the license + for this platform. + + + + Licenses are only of type 'text' right now, so this is implied. + + + + + + 1.0 + 1 + 3 + + Some optional description + http://www.example.com/platform1.html + This is an optional release note + for this package. It's a free multi-line text. + + http://some/url/for/the/release/note.html + 2 + + + + 65536 + 2822ae37115ebf13412bbef91339ee0d9454525e + http://www.example.com/files/plat1.zip + + + + 5 + 0 + + armeabi + + + + 1 + 1 + + Some optional description + http://www.example.com/docs.html + + + 65536 + 2822ae37115ebf13412bbef91339ee0d9454525e + http://www.example.com/docs/docs1.zip + + + + + + 1 + 1 + + + 65535 + 1234ae37115ebf13412bbef91339ee0d94541234 + http://www.example.com/plat1/sources1.zip + + + + + + 1.1 + 2 + 12 + + + + + + 65536 + 2822ae37115ebf13412bbef91339ee0d9454525e + distrib/platform-2-12-win.zip + + + 65536 + 2822ae37115ebf13412bbef91339ee0d9454525e + distrib/platform-2-12-mac.zip + + + 65536 + 2822ae37115ebf13412bbef91339ee0d9454525e + distrib/platform-2-12-mac.zip + + + 65536 + 2822ae37115ebf13412bbef91339ee0d9454525e + distrib/platform-2-12-linux.tar.bz2 + + + 65536 + 2822ae37115ebf13412bbef91339ee0d9454525e + distrib/platform-2-12-linux.tar.bz2 + + + + 5 + 31415 + + x86 + + + + 2 + 1 + x86 + + + 65535 + 1234ae37115ebf13412bbef91339ee0d94541234 + http://www.example.com/plat1/x86/image1.zip + + + + + + 2 + 2 + armeabi-v7a + + + 65534 + 1234ae37115ebf13412bbef91339ee0d94541234 + http://www.example.com/plat1/armv7/image2.zip + + + + + + 2 + 2 + + + 65534 + 1234ae37115ebf13412bbef91339ee0d94541234 + http://www.example.com/plat1/sources2.zip + + + + + + Pastry + 5 + Pastry + 3 + + Preview version for Pastry + http://www.example.com/platform1.html + + + + 65536 + 2822ae37115ebf13412bbef91339ee0d9454525e + http://www.example.com/files/plat1.zip + + + + 1 + + + + + 1 + 2 + 3 + 4 + Some optional description + http://www.example.com/tools.html + + 4 + + + 65536 + 2822ae37115ebf13412bbef91339ee0d9454525e + http://www.example.com/files/tools1.zip + + + + + + 2 + 42 + + + + 65536 + 2822ae37115ebf13412bbef91339ee0d9454525e + distrib/docs/2.zip + + + 65536 + 2822ae37115ebf13412bbef91339ee0d9454525e + distrib/docs2-linux.tar.bz2 + + + 65536 + 2822ae37115ebf13412bbef91339ee0d9454525e + distrib/docs2-mac.tar.bz2 + + + + + + 42 + + 3 + + + 65536 + 2822ae37115ebf13412bbef91339ee0d9454525e + distrib/tools/2.zip + + + 65536 + 2822ae37115ebf13412bbef91339ee0d9454525e + distrib/tools2-linux.tar.bz2 + + + 65536 + 2822ae37115ebf13412bbef91339ee0d9454525e + distrib/tools2-mac.tar.bz2 + + + + + + 3 + 0 + 0 + 5 + + + + 65536 + 3822ae37115ebf13412bbef91339ee0d9454525e + distrib/platform-tools/2.zip + + + 65536 + 3822ae37115ebf13412bbef91339ee0d9454525e + distrib/platform-tools2-linux.tar.bz2 + + + 65536 + 3822ae37115ebf13412bbef91339ee0d9454525e + distrib/platform-tools2-mac.tar.bz2 + + + + + + 14 + 24 + + + 65537 + 3822ae37115ebf13412bbef91339ee0d9454525e + distrib/sample_duff.zip + + + Some sample package + http://www.example.com/sample.html + 5 + This is obsolete + + + + 42 + 12 + armeabi + + + 1234 + 12345637115ebf13412bbef91339ee0d94541234 + http://www.example.com/plat42/86/image12.zip + + + + + + 42 + 12 + mips + + + 12345 + 12345637115ebf13412bbef91339ee0d94541234 + http://www.example.com/plat42/mips/image12.zip + + + + + + 42 + 12 + + + 1234 + 12345637115ebf13412bbef91339ee0d94541234 + http://www.example.com/plat42/source12.zip + + + + + diff --git a/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/SdkUpdaterChooserDialog.java b/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/SdkUpdaterChooserDialog.java index b5ab90b..55e7db2 100755 --- a/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/SdkUpdaterChooserDialog.java +++ b/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/SdkUpdaterChooserDialog.java @@ -19,7 +19,7 @@ package com.android.sdkuilib.internal.repository; import com.android.sdklib.AndroidVersion; import com.android.sdklib.SdkConstants; import com.android.sdklib.internal.repository.archives.Archive; -import com.android.sdklib.internal.repository.packages.IPackageVersion; +import com.android.sdklib.internal.repository.packages.IAndroidVersionProvider; import com.android.sdklib.internal.repository.packages.Package; import com.android.sdklib.internal.repository.sources.SdkSource; import com.android.sdkuilib.internal.repository.icons.ImageFactory; @@ -428,9 +428,10 @@ final class SdkUpdaterChooserDialog extends GridDialog { boolean showRev = true; - if (pNew instanceof IPackageVersion && pOld instanceof IPackageVersion) { - AndroidVersion vOld = ((IPackageVersion) pOld).getVersion(); - AndroidVersion vNew = ((IPackageVersion) pNew).getVersion(); + if (pNew instanceof IAndroidVersionProvider && + pOld instanceof IAndroidVersionProvider) { + AndroidVersion vOld = ((IAndroidVersionProvider) pOld).getAndroidVersion(); + AndroidVersion vNew = ((IAndroidVersionProvider) pNew).getAndroidVersion(); if (!vOld.equals(vNew)) { // Versions are different, so indicate more than just the revision. diff --git a/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/SdkUpdaterLogic.java b/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/SdkUpdaterLogic.java index 0b9f396..97de564 100755 --- a/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/SdkUpdaterLogic.java +++ b/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/SdkUpdaterLogic.java @@ -27,16 +27,16 @@ import com.android.sdklib.internal.repository.packages.IExactApiLevelDependency; import com.android.sdklib.internal.repository.packages.IMinApiLevelDependency; import com.android.sdklib.internal.repository.packages.IMinPlatformToolsDependency; import com.android.sdklib.internal.repository.packages.IMinToolsDependency; -import com.android.sdklib.internal.repository.packages.IPackageVersion; import com.android.sdklib.internal.repository.packages.IPlatformDependency; +import com.android.sdklib.internal.repository.packages.IAndroidVersionProvider; import com.android.sdklib.internal.repository.packages.MinToolsPackage; import com.android.sdklib.internal.repository.packages.Package; +import com.android.sdklib.internal.repository.packages.Package.UpdateInfo; import com.android.sdklib.internal.repository.packages.PlatformPackage; import com.android.sdklib.internal.repository.packages.PlatformToolPackage; import com.android.sdklib.internal.repository.packages.SamplePackage; import com.android.sdklib.internal.repository.packages.SystemImagePackage; import com.android.sdklib.internal.repository.packages.ToolPackage; -import com.android.sdklib.internal.repository.packages.Package.UpdateInfo; import com.android.sdklib.internal.repository.sources.SdkSource; import com.android.sdklib.internal.repository.sources.SdkSources; @@ -223,8 +223,8 @@ class SdkUpdaterLogic { int rev = p.getRevision(); int api = 0; boolean isPreview = false; - if (p instanceof IPackageVersion) { - AndroidVersion vers = ((IPackageVersion) p).getVersion(); + if (p instanceof IAndroidVersionProvider) { + AndroidVersion vers = ((IAndroidVersionProvider) p).getAndroidVersion(); api = vers.getApiLevel(); isPreview = vers.isPreview(); } @@ -264,8 +264,8 @@ class SdkUpdaterLogic { int rev = p.getRevision(); int api = 0; boolean isPreview = false; - if (p instanceof IPackageVersion) { - AndroidVersion vers = ((IPackageVersion) p).getVersion(); + if (p instanceof IAndroidVersionProvider) { + AndroidVersion vers = ((IAndroidVersionProvider) p).getAndroidVersion(); api = vers.getApiLevel(); isPreview = vers.isPreview(); } @@ -318,7 +318,7 @@ class SdkUpdaterLogic { continue; } SystemImagePackage sip = (SystemImagePackage) p2; - if (sip.getVersion().equals(pp.getVersion())) { + if (sip.getAndroidVersion().equals(pp.getAndroidVersion())) { for (Archive a : sip.getArchives()) { if (a.isCompatible()) { insertArchive(a, @@ -912,7 +912,7 @@ class SdkUpdaterLogic { SdkSource[] remoteSources, ArchiveInfo[] localArchives) { // This is the requirement to match. - AndroidVersion v = pkg.getVersion(); + AndroidVersion v = pkg.getAndroidVersion(); // Find a platform that would satisfy the requirement. @@ -922,7 +922,7 @@ class SdkUpdaterLogic { if (a != null) { Package p = a.getParentPackage(); if (p instanceof PlatformPackage) { - if (v.equals(((PlatformPackage) p).getVersion())) { + if (v.equals(((PlatformPackage) p).getAndroidVersion())) { // We found one already installed. return null; } @@ -936,7 +936,7 @@ class SdkUpdaterLogic { if (a != null) { Package p = a.getParentPackage(); if (p instanceof PlatformPackage) { - if (v.equals(((PlatformPackage) p).getVersion())) { + if (v.equals(((PlatformPackage) p).getAndroidVersion())) { // The dependency is already scheduled for install, nothing else to do. return ai; } @@ -949,7 +949,7 @@ class SdkUpdaterLogic { for (Archive a : selectedArchives) { Package p = a.getParentPackage(); if (p instanceof PlatformPackage) { - if (v.equals(((PlatformPackage) p).getVersion())) { + if (v.equals(((PlatformPackage) p).getAndroidVersion())) { // It's not already in the list of things to install, so add it now return insertArchive(a, outArchives, @@ -967,7 +967,7 @@ class SdkUpdaterLogic { fetchRemotePackages(remotePkgs, remoteSources); for (Package p : remotePkgs) { if (p instanceof PlatformPackage) { - if (v.equals(((PlatformPackage) p).getVersion())) { + if (v.equals(((PlatformPackage) p).getAndroidVersion())) { // It's not already in the list of things to install, so add the // first compatible archive we can find. for (Archive a : p.getArchives()) { @@ -988,7 +988,7 @@ class SdkUpdaterLogic { // We end up here if nothing matches. We don't have a good platform to match. // We need to indicate this addon depends on a missing platform archive // so that it can be impossible to install later on. - return new MissingPlatformArchiveInfo(pkg.getVersion()); + return new MissingPlatformArchiveInfo(pkg.getAndroidVersion()); } /** @@ -1025,7 +1025,7 @@ class SdkUpdaterLogic { if (a != null) { Package p = a.getParentPackage(); if (p instanceof PlatformPackage) { - if (((PlatformPackage) p).getVersion().isGreaterOrEqualThan(api)) { + if (((PlatformPackage) p).getAndroidVersion().isGreaterOrEqualThan(api)) { // We found one already installed. return null; } @@ -1042,7 +1042,7 @@ class SdkUpdaterLogic { if (a != null) { Package p = a.getParentPackage(); if (p instanceof PlatformPackage) { - if (((PlatformPackage) p).getVersion().isGreaterOrEqualThan(api)) { + if (((PlatformPackage) p).getAndroidVersion().isGreaterOrEqualThan(api)) { if (api > foundApi) { foundApi = api; foundAi = ai; @@ -1065,7 +1065,7 @@ class SdkUpdaterLogic { for (Archive a : selectedArchives) { Package p = a.getParentPackage(); if (p instanceof PlatformPackage) { - if (((PlatformPackage) p).getVersion().isGreaterOrEqualThan(api)) { + if (((PlatformPackage) p).getAndroidVersion().isGreaterOrEqualThan(api)) { if (api > foundApi) { foundApi = api; foundArchive = a; @@ -1079,7 +1079,7 @@ class SdkUpdaterLogic { fetchRemotePackages(remotePkgs, remoteSources); for (Package p : remotePkgs) { if (p instanceof PlatformPackage) { - if (((PlatformPackage) p).getVersion().isGreaterOrEqualThan(api)) { + if (((PlatformPackage) p).getAndroidVersion().isGreaterOrEqualThan(api)) { if (api > foundApi) { // It's not already in the list of things to install, so add the // first compatible archive we can find. @@ -1140,7 +1140,7 @@ class SdkUpdaterLogic { if (a != null) { Package p = a.getParentPackage(); if (p instanceof PlatformPackage) { - if (((PlatformPackage) p).getVersion().equals(api)) { + if (((PlatformPackage) p).getAndroidVersion().equals(api)) { // We found one already installed. return null; } @@ -1155,7 +1155,7 @@ class SdkUpdaterLogic { if (a != null) { Package p = a.getParentPackage(); if (p instanceof PlatformPackage) { - if (((PlatformPackage) p).getVersion().equals(api)) { + if (((PlatformPackage) p).getAndroidVersion().equals(api)) { return ai; } } @@ -1167,7 +1167,7 @@ class SdkUpdaterLogic { for (Archive a : selectedArchives) { Package p = a.getParentPackage(); if (p instanceof PlatformPackage) { - if (((PlatformPackage) p).getVersion().equals(api)) { + if (((PlatformPackage) p).getAndroidVersion().equals(api)) { // It's not already in the list of things to install, so add it now return insertArchive(a, outArchives, @@ -1185,7 +1185,7 @@ class SdkUpdaterLogic { fetchRemotePackages(remotePkgs, remoteSources); for (Package p : remotePkgs) { if (p instanceof PlatformPackage) { - if (((PlatformPackage) p).getVersion().equals(api)) { + if (((PlatformPackage) p).getAndroidVersion().equals(api)) { // It's not already in the list of things to install, so add the // first compatible archive we can find. for (Archive a : p.getArchives()) { diff --git a/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/sdkman2/AdtUpdateDialog.java b/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/sdkman2/AdtUpdateDialog.java index d619ea0..f481b0a 100755 --- a/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/sdkman2/AdtUpdateDialog.java +++ b/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/sdkman2/AdtUpdateDialog.java @@ -346,7 +346,7 @@ public class AdtUpdateDialog extends SwtBaseDialog { boolean accept(Package pkg) { if (pkg instanceof PlatformPackage) { PlatformPackage pp = (PlatformPackage) pkg; - AndroidVersion v = pp.getVersion(); + AndroidVersion v = pp.getAndroidVersion(); return !v.isPreview() && v.getApiLevel() == mApiLevel; } return false; @@ -359,7 +359,7 @@ public class AdtUpdateDialog extends SwtBaseDialog { pkg instanceof PlatformPackage && !pkg.isLocal()) { PlatformPackage pp = (PlatformPackage) pkg; - AndroidVersion v = pp.getVersion(); + AndroidVersion v = pp.getAndroidVersion(); if (!v.isPreview()) { int api = v.getApiLevel(); if (api > mApiLevel) { @@ -388,7 +388,7 @@ public class AdtUpdateDialog extends SwtBaseDialog { if (!pkg.isLocal()) { if (pkg instanceof PlatformPackage) { PlatformPackage pp = (PlatformPackage) pkg; - AndroidVersion v = pp.getVersion(); + AndroidVersion v = pp.getAndroidVersion(); if (!v.isPreview()) { int level = v.getApiLevel(); if ((mFindMaxApi && level == mMaxApiLevel) || @@ -418,7 +418,7 @@ public class AdtUpdateDialog extends SwtBaseDialog { pkg instanceof PlatformPackage && !pkg.isLocal()) { PlatformPackage pp = (PlatformPackage) pkg; - AndroidVersion v = pp.getVersion(); + AndroidVersion v = pp.getAndroidVersion(); if (!v.isPreview()) { int api = v.getApiLevel(); if (api > mMaxApiLevel) { diff --git a/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/sdkman2/PackagesDiffLogic.java b/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/sdkman2/PackagesDiffLogic.java index 46b5697..687238b 100755 --- a/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/sdkman2/PackagesDiffLogic.java +++ b/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/sdkman2/PackagesDiffLogic.java @@ -20,7 +20,7 @@ import com.android.sdklib.AndroidVersion; import com.android.sdklib.IAndroidTarget; import com.android.sdklib.SdkConstants; import com.android.sdklib.internal.repository.packages.ExtraPackage; -import com.android.sdklib.internal.repository.packages.IPackageVersion; +import com.android.sdklib.internal.repository.packages.IAndroidVersionProvider; import com.android.sdklib.internal.repository.packages.Package; import com.android.sdklib.internal.repository.packages.PlatformPackage; import com.android.sdklib.internal.repository.packages.PlatformToolPackage; @@ -107,8 +107,8 @@ class PackagesDiffLogic { // since by definition they should target the same API level. int api = 0; Package p = item.getMainPackage(); - if (p instanceof IPackageVersion) { - api = ((IPackageVersion) p).getVersion().getApiLevel(); + if (p instanceof IAndroidVersionProvider) { + api = ((IAndroidVersionProvider) p).getAndroidVersion().getApiLevel(); } if (selectTop && api > 0) { @@ -607,8 +607,8 @@ class PackagesDiffLogic { public Object getCategoryKey(Package pkg) { // Sort by API - if (pkg instanceof IPackageVersion) { - return ((IPackageVersion) pkg).getVersion(); + if (pkg instanceof IAndroidVersionProvider) { + return ((IAndroidVersionProvider) pkg).getAndroidVersion(); } else if (pkg instanceof ToolPackage || pkg instanceof PlatformToolPackage) { return PkgCategoryApi.KEY_TOOLS; diff --git a/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/sdkman2/PackagesPage.java b/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/sdkman2/PackagesPage.java index 4ef7d6b..ea02e3a 100755 --- a/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/sdkman2/PackagesPage.java +++ b/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/sdkman2/PackagesPage.java @@ -1313,7 +1313,7 @@ public class PackagesPage extends UpdaterPage implements ISdkChangeListener { } else if (mColumn == mColumnRevision) { if (element instanceof PkgItem) { PkgItem pkg = (PkgItem) element; - return Integer.toString(pkg.getRevision()); + return pkg.getRevisionStr(); } } else if (mColumn == mColumnStatus) { diff --git a/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/sdkman2/PkgItem.java b/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/sdkman2/PkgItem.java index 5b90375..ae20deb 100755 --- a/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/sdkman2/PkgItem.java +++ b/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/sdkman2/PkgItem.java @@ -17,7 +17,8 @@ package com.android.sdkuilib.internal.repository.sdkman2; import com.android.sdklib.internal.repository.archives.Archive; -import com.android.sdklib.internal.repository.packages.IPackageVersion; +import com.android.sdklib.internal.repository.packages.IAndroidVersionProvider; +import com.android.sdklib.internal.repository.packages.IPreviewVersionProvider; import com.android.sdklib.internal.repository.packages.Package; import com.android.sdklib.internal.repository.packages.Package.UpdateInfo; import com.android.sdklib.internal.repository.sources.SdkSource; @@ -93,6 +94,13 @@ public class PkgItem implements Comparable { return mMainPkg.getRevision(); } + public String getRevisionStr() { + if (mMainPkg instanceof IPreviewVersionProvider) { + return ((IPreviewVersionProvider) mMainPkg).getPreviewVersion().toShortString(); + } + return Integer.toString(mMainPkg.getRevision()); + } + public String getDescription() { return mMainPkg.getDescription(); } @@ -110,8 +118,8 @@ public class PkgItem implements Comparable { } public int getApi() { - return mMainPkg instanceof IPackageVersion ? - ((IPackageVersion) mMainPkg).getVersion().getApiLevel() : + return mMainPkg instanceof IAndroidVersionProvider ? + ((IAndroidVersionProvider) mMainPkg).getAndroidVersion().getApiLevel() : -1; } -- cgit v1.1