aboutsummaryrefslogtreecommitdiffstats
path: root/sdkmanager/libs/sdklib
diff options
context:
space:
mode:
Diffstat (limited to 'sdkmanager/libs/sdklib')
-rw-r--r--sdkmanager/libs/sdklib/src/com/android/sdklib/AndroidVersion.java34
-rwxr-xr-xsdkmanager/libs/sdklib/src/com/android/sdklib/AndroidVersionTest.java71
-rw-r--r--sdkmanager/libs/sdklib/src/com/android/sdklib/PlatformTarget.java8
-rw-r--r--sdkmanager/libs/sdklib/src/com/android/sdklib/SdkConstants.java4
-rw-r--r--sdkmanager/libs/sdklib/src/com/android/sdklib/SdkManager.java23
5 files changed, 114 insertions, 26 deletions
diff --git a/sdkmanager/libs/sdklib/src/com/android/sdklib/AndroidVersion.java b/sdkmanager/libs/sdklib/src/com/android/sdklib/AndroidVersion.java
index 996aee4..38d3bbb 100644
--- a/sdkmanager/libs/sdklib/src/com/android/sdklib/AndroidVersion.java
+++ b/sdkmanager/libs/sdklib/src/com/android/sdklib/AndroidVersion.java
@@ -16,6 +16,7 @@
package com.android.sdklib;
+import com.android.annotations.Nullable;
import com.android.sdklib.repository.PkgProps;
import java.util.Properties;
@@ -61,7 +62,7 @@ public final class AndroidVersion implements Comparable<AndroidVersion> {
*/
public AndroidVersion(int apiLevel, String codename) {
mApiLevel = apiLevel;
- mCodename = codename;
+ mCodename = sanitizeCodename(codename);
}
/**
@@ -73,11 +74,12 @@ public final class AndroidVersion implements Comparable<AndroidVersion> {
public AndroidVersion(Properties properties, int defaultApiLevel, String defaultCodeName) {
if (properties == null) {
mApiLevel = defaultApiLevel;
- mCodename = defaultCodeName;
+ mCodename = sanitizeCodename(defaultCodeName);
} else {
mApiLevel = Integer.parseInt(properties.getProperty(PkgProps.VERSION_API_LEVEL,
- Integer.toString(defaultApiLevel)));
- mCodename = properties.getProperty(PkgProps.VERSION_CODENAME, defaultCodeName);
+ Integer.toString(defaultApiLevel)));
+ mCodename = sanitizeCodename(
+ properties.getProperty(PkgProps.VERSION_CODENAME, defaultCodeName));
}
}
@@ -95,7 +97,8 @@ public final class AndroidVersion implements Comparable<AndroidVersion> {
if (apiLevel != null) {
try {
mApiLevel = Integer.parseInt(apiLevel);
- mCodename = properties.getProperty(PkgProps.VERSION_CODENAME, null/*defaultValue*/);
+ mCodename = sanitizeCodename(properties.getProperty(PkgProps.VERSION_CODENAME,
+ null/*defaultValue*/));
return;
} catch (NumberFormatException e) {
error = e;
@@ -298,4 +301,25 @@ public final class AndroidVersion implements Comparable<AndroidVersion> {
public boolean isGreaterOrEqualThan(int api) {
return compareTo(api, null /*codename*/) >= 0;
}
+
+ /**
+ * Sanitizes the codename string according to the following rules:
+ * - A codename should be {@code null} for a release version or it should be a non-empty
+ * string for an actual preview.
+ * - In input, spacing is trimmed since it is irrelevant.
+ * - An empty string or the special codename "REL" means a release version
+ * and is converted to {@code null}.
+ *
+ * @param codename A possible-null codename.
+ * @return Null for a release version or a non-empty codename.
+ */
+ private @Nullable String sanitizeCodename(@Nullable String codename) {
+ if (codename != null) {
+ codename = codename.trim();
+ if (codename.length() == 0 || SdkConstants.CODENAME_RELEASE.equals(codename)) {
+ codename = null;
+ }
+ }
+ return codename;
+ }
}
diff --git a/sdkmanager/libs/sdklib/src/com/android/sdklib/AndroidVersionTest.java b/sdkmanager/libs/sdklib/src/com/android/sdklib/AndroidVersionTest.java
new file mode 100755
index 0000000..5270bd1
--- /dev/null
+++ b/sdkmanager/libs/sdklib/src/com/android/sdklib/AndroidVersionTest.java
@@ -0,0 +1,71 @@
+/*
+ * 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;
+
+import junit.framework.TestCase;
+
+/**
+ * Unit tests for {@link AndroidVersion}.
+ */
+public class AndroidVersionTest extends TestCase {
+
+ public final void testAndroidVersion() {
+ AndroidVersion v = new AndroidVersion(1, " CODENAME ");
+ assertEquals(1, v.getApiLevel());
+ assertEquals("CODENAME", v.getApiString());
+ assertTrue(v.isPreview());
+ assertEquals("CODENAME", v.getCodename());
+ assertEquals("CODENAME".hashCode(), v.hashCode());
+ assertEquals("API 1, CODENAME preview", v.toString());
+
+ v = new AndroidVersion(15, "REL");
+ assertEquals(15, v.getApiLevel());
+ assertEquals("15", v.getApiString());
+ assertFalse(v.isPreview());
+ assertNull(v.getCodename());
+ assertTrue(v.equals(15));
+ assertEquals(15, v.hashCode());
+ assertEquals("API 15", v.toString());
+
+ v = new AndroidVersion(15, null);
+ assertEquals(15, v.getApiLevel());
+ assertEquals("15", v.getApiString());
+ assertFalse(v.isPreview());
+ assertNull(v.getCodename());
+ assertTrue(v.equals(15));
+ assertEquals(15, v.hashCode());
+ assertEquals("API 15", v.toString());
+
+ // An empty codename is like a null codename
+ v = new AndroidVersion(15, " ");
+ assertFalse(v.isPreview());
+ assertNull(v.getCodename());
+ assertEquals("15", v.getApiString());
+
+ v = new AndroidVersion(15, "");
+ assertFalse(v.isPreview());
+ assertNull(v.getCodename());
+ assertEquals("15", v.getApiString());
+
+ assertTrue(v.isGreaterOrEqualThan(0));
+ assertTrue(v.isGreaterOrEqualThan(14));
+ assertTrue(v.isGreaterOrEqualThan(15));
+ assertFalse(v.isGreaterOrEqualThan(16));
+ assertFalse(v.isGreaterOrEqualThan(Integer.MAX_VALUE));
+ }
+
+}
diff --git a/sdkmanager/libs/sdklib/src/com/android/sdklib/PlatformTarget.java b/sdkmanager/libs/sdklib/src/com/android/sdklib/PlatformTarget.java
index 02688c0..ac8de23 100644
--- a/sdkmanager/libs/sdklib/src/com/android/sdklib/PlatformTarget.java
+++ b/sdkmanager/libs/sdklib/src/com/android/sdklib/PlatformTarget.java
@@ -53,8 +53,7 @@ final class PlatformTarget implements IAndroidTarget {
*
* @param sdkOsPath the root folder of the SDK
* @param platformOSPath the root folder of the platform component
- * @param apiLevel the API Level
- * @param codeName the codename. can be null.
+ * @param apiVersion the API Level + codename.
* @param versionName the version name of the platform.
* @param revision the revision of the platform component.
* @param layoutlibVersion The {@link LayoutlibVersion}. May be null.
@@ -65,8 +64,7 @@ final class PlatformTarget implements IAndroidTarget {
PlatformTarget(
String sdkOsPath,
String platformOSPath,
- int apiLevel,
- String codeName,
+ AndroidVersion apiVersion,
String versionName,
int revision,
LayoutlibVersion layoutlibVersion,
@@ -77,7 +75,7 @@ final class PlatformTarget implements IAndroidTarget {
}
mRootFolderOsPath = platformOSPath;
mProperties = Collections.unmodifiableMap(properties);
- mVersion = new AndroidVersion(apiLevel, codeName);
+ mVersion = apiVersion;
mVersionName = versionName;
mRevision = revision;
mLayoutlibVersion = layoutlibVersion;
diff --git a/sdkmanager/libs/sdklib/src/com/android/sdklib/SdkConstants.java b/sdkmanager/libs/sdklib/src/com/android/sdklib/SdkConstants.java
index 6e6c657..b5ff9da 100644
--- a/sdkmanager/libs/sdklib/src/com/android/sdklib/SdkConstants.java
+++ b/sdkmanager/libs/sdklib/src/com/android/sdklib/SdkConstants.java
@@ -263,6 +263,9 @@ public final class SdkConstants {
/** Name of the cache folder in the $HOME/.android. */
public final static String FD_CACHE = "cache"; //$NON-NLS-1$
+ /** API codename of a release (non preview) system image or platform. **/
+ public final static String CODENAME_RELEASE = "REL"; //$NON-NLS-1$
+
/** Namespace for the resource XML, i.e. "http://schemas.android.com/apk/res/android" */
public final static String NS_RESOURCES =
"http://schemas.android.com/apk/res/android"; //$NON-NLS-1$
@@ -377,7 +380,6 @@ public final class SdkConstants {
FN_FRAMEWORK_RENDERSCRIPT + File.separator + FN_FRAMEWORK_INCLUDE_CLANG;
/* Folder paths relative to a addon folder */
-
/** Path of the images directory relative to a folder folder.
* This is an OS path, ending with a separator. */
public final static String OS_ADDON_LIBS_FOLDER = FD_ADDON_LIBS + File.separator;
diff --git a/sdkmanager/libs/sdklib/src/com/android/sdklib/SdkManager.java b/sdkmanager/libs/sdklib/src/com/android/sdklib/SdkManager.java
index 8284054..5c570ce 100644
--- a/sdkmanager/libs/sdklib/src/com/android/sdklib/SdkManager.java
+++ b/sdkmanager/libs/sdklib/src/com/android/sdklib/SdkManager.java
@@ -437,12 +437,10 @@ public class SdkManager {
}
}
- // codename (optional)
- String apiCodename = platformProp.get(PROP_VERSION_CODENAME);
- if (apiCodename != null && apiCodename.equals("REL")) {
- apiCodename = null; // REL means it's a release version and therefore the
- // codename is irrelevant at this point.
- }
+ // Codename must be either null or a platform codename.
+ // REL means it's a release version and therefore the codename should be null.
+ AndroidVersion apiVersion =
+ new AndroidVersion(apiNumber, platformProp.get(PROP_VERSION_CODENAME));
// version string
String apiName = platformProp.get(PkgProps.PLATFORM_VERSION);
@@ -489,14 +487,13 @@ public class SdkManager {
}
ISystemImage[] systemImages =
- getPlatformSystemImages(sdkOsPath, platformFolder, apiNumber, apiCodename);
+ getPlatformSystemImages(sdkOsPath, platformFolder, apiVersion);
// create the target.
PlatformTarget target = new PlatformTarget(
sdkOsPath,
platformFolder.getAbsolutePath(),
- apiNumber,
- apiCodename,
+ apiVersion,
apiName,
revision,
layoutlibVersion,
@@ -574,16 +571,14 @@ public class SdkManager {
*
* @param sdkOsPath The path to the SDK.
* @param root Root of the platform target being loaded.
- * @param apiNumber API level of platform being loaded
- * @param apiCodename Optional codename of platform being loaded
+ * @param version API level + codename of platform being loaded.
* @return an array of ISystemImage containing all the system images for the target.
* The list can be empty.
*/
private static ISystemImage[] getPlatformSystemImages(
String sdkOsPath,
File root,
- int apiNumber,
- String apiCodename) {
+ AndroidVersion version) {
Set<ISystemImage> found = new TreeSet<ISystemImage>();
Set<String> abiFound = new HashSet<String>();
@@ -592,8 +587,6 @@ public class SdkManager {
// The actual directory names are irrelevant.
// If we find multiple occurrences of the same platform/abi, the first one read wins.
- AndroidVersion version = new AndroidVersion(apiNumber, apiCodename);
-
File[] firstLevelFiles = new File(sdkOsPath, SdkConstants.FD_SYSTEM_IMAGES).listFiles();
if (firstLevelFiles != null) {
for (File firstLevel : firstLevelFiles) {