aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorandroid-build-team Robot <android-build-team-robot@google.com>2021-06-18 01:07:57 +0000
committerandroid-build-team Robot <android-build-team-robot@google.com>2021-06-18 01:07:57 +0000
commit0a8bde0eb27a5de62e73faf9de06a498a4ccec69 (patch)
treeb604848d4716b964d68cd9a1114d7febbd772328
parente8bfa613d4b16b4012d9b5f526ef5140bedccf1f (diff)
parentc5d2ef6412d17228972de4f4ea1627a4de1d0d2b (diff)
downloadmodules-utils-android-12.1.0_r4.tar.gz
Change-Id: Idc788bee00ec81381bf69e1ea49fc067508d2eb0
-rw-r--r--java/com/android/modules/utils/build/testing/Android.bp28
-rw-r--r--java/com/android/modules/utils/build/testing/DeviceSdkLevel.java70
2 files changed, 98 insertions, 0 deletions
diff --git a/java/com/android/modules/utils/build/testing/Android.bp b/java/com/android/modules/utils/build/testing/Android.bp
new file mode 100644
index 0000000..ab80da4
--- /dev/null
+++ b/java/com/android/modules/utils/build/testing/Android.bp
@@ -0,0 +1,28 @@
+//
+// Copyright (C) 2020 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 {
+ default_applicable_licenses: ["Android-Apache-2.0"],
+}
+
+java_library_host {
+ name: "modules-utils-build-testing",
+ srcs: ["DeviceSdkLevel.java"],
+ visibility: ["//visibility:public"],
+ libs: [
+ "androidx.annotation_annotation",
+ "tradefed",
+ ],
+}
diff --git a/java/com/android/modules/utils/build/testing/DeviceSdkLevel.java b/java/com/android/modules/utils/build/testing/DeviceSdkLevel.java
new file mode 100644
index 0000000..3a09c9c
--- /dev/null
+++ b/java/com/android/modules/utils/build/testing/DeviceSdkLevel.java
@@ -0,0 +1,70 @@
+/*
+ * Copyright (C) 2021 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.modules.utils.build.testing;
+
+import androidx.annotation.NonNull;
+
+import com.android.tradefed.device.DeviceNotAvailableException;
+import com.android.tradefed.device.ITestDevice;
+
+/**
+ * Utility class to check device SDK level from a host side test.
+ */
+public final class DeviceSdkLevel {
+
+ private final ITestDevice device;
+
+ public DeviceSdkLevel(ITestDevice device) {
+ this.device = device;
+ }
+
+ /** Checks if the device is running on release version of Android R or newer. */
+ public boolean isDeviceAtLeastR() throws DeviceNotAvailableException {
+ return device.getApiLevel() >= 30;
+ }
+
+ /**
+ * Checks if the device is running on a pre-release version of Android S or a release version of
+ * Android S or newer.
+ */
+ public boolean isDeviceAtLeastS() throws DeviceNotAvailableException {
+ return device.getApiLevel() >= 31 || isDeviceAtLeastPreReleaseCodename("S");
+ }
+
+ /**
+ * Checks if the device is running on a pre-release version of Android T or a release version of
+ * Android T or newer.
+ */
+ public boolean isDeviceAtLeastT() throws DeviceNotAvailableException {
+ return isDeviceAtLeastPreReleaseCodename("T");
+ }
+
+ private boolean isDeviceAtLeastPreReleaseCodename(@NonNull String codename)
+ throws DeviceNotAvailableException {
+ String deviceCodename = device.getProperty("ro.build.version.codename");
+
+ // Special case "REL", which means the build is not a pre-release build.
+ if ("REL".equals(deviceCodename)) {
+ return false;
+ }
+
+ // Otherwise lexically compare them. Return true if the build codename is equal to or
+ // greater than the requested codename.
+ return deviceCodename.compareTo(codename) >= 0;
+ }
+
+}