summaryrefslogtreecommitdiff
path: root/src/com/google/android/testing/mocking/SdkVersion.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/com/google/android/testing/mocking/SdkVersion.java')
-rw-r--r--src/com/google/android/testing/mocking/SdkVersion.java106
1 files changed, 106 insertions, 0 deletions
diff --git a/src/com/google/android/testing/mocking/SdkVersion.java b/src/com/google/android/testing/mocking/SdkVersion.java
new file mode 100644
index 0000000..ee61707
--- /dev/null
+++ b/src/com/google/android/testing/mocking/SdkVersion.java
@@ -0,0 +1,106 @@
+/*
+ * Copyright 2010 Google Inc.
+ *
+ * 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.google.android.testing.mocking;
+
+import java.lang.reflect.Field;
+import java.util.ArrayList;
+import java.util.List;
+
+
+/**
+ * Represents different SDK versions of the Android SDK.
+ *
+ * @author swoodward@google.com (Stephen Woodward)
+ */
+public enum SdkVersion {
+ UNKNOWN("", -1), CUPCAKE("v15", 3), DONUT("v16", 4), ECLAIR_0_1("v201", 6),
+ ECLAIR_MR1("v21", 7), FROYO("v22", 8);
+
+ private static final int SDK_VERSION;
+
+ static {
+ String sdkString = null;
+ int sdkInt;
+ try {
+ Class<?> buildClass = Class.forName("android.os.Build$VERSION");
+ Field sdkField = buildClass.getField("SDK");
+ sdkString = (String) sdkField.get(null);
+ sdkInt = Integer.parseInt(sdkString);
+ } catch (Exception e) {
+ // This will always happen on the desktop side. No big deal.
+ if (sdkString != null) {
+ // But this is unexpected
+ System.out.println(e.toString());
+ e.printStackTrace();
+ }
+ sdkInt = -1;
+ }
+ SDK_VERSION = sdkInt;
+ }
+
+ private final String prefix;
+ private final String versionName;
+ private final int apiLevel;
+
+ private SdkVersion(String packagePrefix, int apiLevel) {
+ versionName = packagePrefix;
+ prefix = packagePrefix.length() == 0 ? "" : packagePrefix + ".";
+ this.apiLevel = apiLevel;
+ }
+
+ /**
+ * Returns an array of SdkVersion objects. This is to be favoured over the
+ * {@link #values()} method, since that method will also return the UNKNOWN
+ * SDK version, which is not usually a valid version on which to operate.
+ *
+ * @return an array of SdkVersion objects.
+ */
+ public static SdkVersion[] getAllVersions() {
+ List<SdkVersion> versions = new ArrayList<SdkVersion>();
+ for (SdkVersion version : values()) {
+ if (!version.equals(UNKNOWN)) {
+ versions.add(version);
+ }
+ }
+ return versions.toArray(new SdkVersion[versions.size()]);
+ }
+
+ public String getVersionName() {
+ return versionName;
+ }
+
+ public String getPackagePrefix() {
+ return prefix;
+ }
+
+ /**
+ * Returns the current SDK version, or UNKNOWN if the version cannot be determined (for instance
+ * if this method is invoked from within a J2SE environment).
+ * @return the current SDK version.
+ */
+ public static SdkVersion getCurrentVersion() {
+ return getVersionFor(SDK_VERSION);
+ }
+
+ static SdkVersion getVersionFor(int apiLevel) {
+ for (SdkVersion version : values()) {
+ if (version.apiLevel == apiLevel) {
+ return version;
+ }
+ }
+ return UNKNOWN;
+ }
+}