Snap for 8828152 from 18c56963fb123a33d85f51b4c5dbdbf35e059b0e to mainline-adbd-release
Change-Id: Id1344cb07d833577a76a0c3d37f526c7adcc95fd
diff --git a/TEST_MAPPING b/TEST_MAPPING
index da9469c..18355d5 100644
--- a/TEST_MAPPING
+++ b/TEST_MAPPING
@@ -1,4 +1,9 @@
{
+ "mainline-presubmit": [
+ {
+ "name": "derive_sdk_test[com.google.android.sdkext.apex]"
+ }
+ ],
"presubmit": [
{
"name": "CtsSdkExtensionsTestCases"
diff --git a/derive_sdk/Android.bp b/derive_sdk/Android.bp
index 66ba7bc..7cb5be4 100644
--- a/derive_sdk/Android.bp
+++ b/derive_sdk/Android.bp
@@ -68,7 +68,8 @@
srcs: ["derive_sdk_test.cpp"],
require_root: true,
static_libs: ["libderive_sdk"],
- test_suites: ["device-tests"],
+ test_suites: ["general-tests"],
+ test_mainline_modules: ["com.google.android.sdkext.apex"],
}
prebuilt_etc {
diff --git a/derive_sdk/derive_sdk.cpp b/derive_sdk/derive_sdk.cpp
index a4a1251..a6eaeb2 100644
--- a/derive_sdk/derive_sdk.cpp
+++ b/derive_sdk/derive_sdk.cpp
@@ -203,6 +203,14 @@
}
}
+ relevant_modules.clear();
+ relevant_modules.insert(SdkModule::AD_SERVICES);
+ if (android::modules::sdklevel::IsAtLeastT()) {
+ if (!SetExtension("ad_services", db, relevant_modules, versions)) {
+ return false;
+ }
+ }
+
return true;
}
diff --git a/derive_sdk/derive_sdk_test.cpp b/derive_sdk/derive_sdk_test.cpp
index 51e703e..e7fe5ba 100644
--- a/derive_sdk/derive_sdk_test.cpp
+++ b/derive_sdk/derive_sdk_test.cpp
@@ -91,6 +91,12 @@
EXPECT_EQ(T, android::modules::sdklevel::IsAtLeastT() ? n : -1);
}
+ void EXPECT_ADSERVICES(int n) {
+ int A = android::base::GetIntProperty("build.version.extensions.ad_services", -1);
+ // Only expect the AdServices extension level to be set on T+ devices.
+ EXPECT_EQ(A, android::modules::sdklevel::IsAtLeastT() ? n : -1);
+ }
+
void EXPECT_ALL(int n) {
EXPECT_R(n);
EXPECT_S(n);
@@ -220,6 +226,43 @@
ASSERT_FALSE(android::derivesdk::SetSdkLevels(dir()));
}
+TEST_F(DeriveSdkTest, AdServices) {
+ AddExtensionVersion(1, {
+ {SdkModule::TETHERING, 1},
+ });
+ EXPECT_ALL(0);
+ EXPECT_ADSERVICES(1);
+
+ SetApexVersion("com.android.tethering", 1);
+ EXPECT_ALL(1);
+
+ // V2 defined
+ AddExtensionVersion(2, {
+ {SdkModule::AD_SERVICES, 2},
+ {SdkModule::TETHERING, 2},
+ });
+ EXPECT_ALL(1);
+ EXPECT_ADSERVICES(1);
+
+ // Only adservices v2
+ SetApexVersion("com.android.adservices", 2);
+ EXPECT_ALL(1);
+ EXPECT_ADSERVICES(2);
+
+ // Both v2
+ SetApexVersion("com.android.tethering", 2);
+ EXPECT_ALL(2);
+ EXPECT_ADSERVICES(2);
+
+ // Only tethering v2. R and S extension are bumped, but T requires adserices.
+ SetApexVersion("com.android.adservices", 0);
+ SetApexVersion("com.android.tethering", 2);
+ EXPECT_R(2);
+ EXPECT_S(2);
+ EXPECT_T(1);
+ EXPECT_ADSERVICES(1);
+}
+
int main(int argc, char** argv) {
::testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
diff --git a/java/android/os/ext/SdkExtensions.java b/java/android/os/ext/SdkExtensions.java
index 3ce6a5a..df68e0b 100644
--- a/java/android/os/ext/SdkExtensions.java
+++ b/java/android/os/ext/SdkExtensions.java
@@ -42,14 +42,20 @@
*/
public class SdkExtensions {
+ // TODO(b/234007262): Decide on the right final value for this.
+ public static final int AD_SERVICES = 1_000_000;
+
private static final int R_EXTENSION_INT;
private static final int S_EXTENSION_INT;
private static final int T_EXTENSION_INT;
+ private static final int AD_SERVICES_EXTENSION_INT;
private static final Map<Integer, Integer> ALL_EXTENSION_INTS;
static {
R_EXTENSION_INT = SystemProperties.getInt("build.version.extensions.r", 0);
S_EXTENSION_INT = SystemProperties.getInt("build.version.extensions.s", 0);
T_EXTENSION_INT = SystemProperties.getInt("build.version.extensions.t", 0);
+ AD_SERVICES_EXTENSION_INT =
+ SystemProperties.getInt("build.version.extensions.ad_services", 0);
Map<Integer, Integer> extensions = new HashMap<Integer, Integer>();
extensions.put(VERSION_CODES.R, R_EXTENSION_INT);
if (SdkLevel.isAtLeastS()) {
@@ -58,6 +64,7 @@
if (SdkLevel.isAtLeastT()) {
extensions.put(VERSION_CODES.TIRAMISU, T_EXTENSION_INT);
}
+ extensions.put(AD_SERVICES, AD_SERVICES_EXTENSION_INT);
ALL_EXTENSION_INTS = Collections.unmodifiableMap(extensions);
}
@@ -65,7 +72,7 @@
* Values suitable as parameters for {@link #getExtensionVersion(int)}.
* @hide
*/
- @IntDef(value = { VERSION_CODES.R, VERSION_CODES.S, VERSION_CODES.TIRAMISU })
+ @IntDef(value = { VERSION_CODES.R, VERSION_CODES.S, VERSION_CODES.TIRAMISU, AD_SERVICES })
@Retention(RetentionPolicy.SOURCE)
public @interface Extension {}
@@ -99,6 +106,9 @@
if (extension == VERSION_CODES.TIRAMISU) {
return T_EXTENSION_INT;
}
+ if (extension == AD_SERVICES) {
+ return AD_SERVICES_EXTENSION_INT;
+ }
return 0;
}
diff --git a/java/android/os/ext/api/current.txt b/java/android/os/ext/api/current.txt
index 180afea..75b43ba 100644
--- a/java/android/os/ext/api/current.txt
+++ b/java/android/os/ext/api/current.txt
@@ -4,6 +4,7 @@
public class SdkExtensions {
method @NonNull public static java.util.Map<java.lang.Integer,java.lang.Integer> getAllExtensionVersions();
method public static int getExtensionVersion(int);
+ field public static final int AD_SERVICES = 1000000; // 0xf4240
}
}
diff --git a/javatests/com/android/os/ext/SdkExtensionsTest.java b/javatests/com/android/os/ext/SdkExtensionsTest.java
index 29f570b..571e439 100644
--- a/javatests/com/android/os/ext/SdkExtensionsTest.java
+++ b/javatests/com/android/os/ext/SdkExtensionsTest.java
@@ -17,6 +17,11 @@
package com.android.os.ext;
import static android.os.Build.VERSION_CODES;
+import static android.os.Build.VERSION_CODES.R;
+import static android.os.Build.VERSION_CODES.S;
+import static android.os.Build.VERSION_CODES.TIRAMISU;
+import static android.os.ext.SdkExtensions.AD_SERVICES;
+import static android.os.ext.SdkExtensions.getExtensionVersion;
import static com.android.os.ext.testing.CurrentVersion.ALLOWED_VERSIONS_CTS;
import static com.google.common.truth.Truth.assertThat;
@@ -63,14 +68,16 @@
/** Verifies that getExtensionVersion only return existing versions */
public void testValidValues() throws Exception {
- assertCorrectVersion(true, SdkExtensions.getExtensionVersion(VERSION_CODES.R));
- assertCorrectVersion(
- SdkLevel.isAtLeastS(), SdkExtensions.getExtensionVersion(VERSION_CODES.S));
- assertCorrectVersion(
- SdkLevel.isAtLeastT(), SdkExtensions.getExtensionVersion(VERSION_CODES.TIRAMISU));
+ assertCorrectVersion(true, getExtensionVersion(R));
+ assertCorrectVersion(SdkLevel.isAtLeastS(), getExtensionVersion(S));
+ assertCorrectVersion(SdkLevel.isAtLeastT(), getExtensionVersion(TIRAMISU));
+ assertCorrectVersion(SdkLevel.isAtLeastT(), getExtensionVersion(AD_SERVICES));
- int firstUnassigned = VERSION_CODES.TIRAMISU + 1;
- for (int sdk = firstUnassigned; sdk <= 1_000_000; sdk++) {
+ Set<Integer> assignedCodes = Set.of(R, S, TIRAMISU, AD_SERVICES);
+ for (int sdk = VERSION_CODES.R; sdk <= 1_000_000; sdk++) {
+ if (assignedCodes.contains(sdk)) {
+ continue;
+ }
// No extension SDKs yet.
assertEquals(0, SdkExtensions.getExtensionVersion(sdk));
}
@@ -97,6 +104,8 @@
if (SdkLevel.isAtLeastT()) {
assertCorrectVersion(versions.get(VERSION_CODES.TIRAMISU));
expectedSize++;
+ assertCorrectVersion(versions.get(SdkExtensions.AD_SERVICES));
+ expectedSize++;
}
assertEquals(expectedSize, versions.size());
}
diff --git a/manifest.json b/manifest.json
index 3aabdf0..53bcecd 100644
--- a/manifest.json
+++ b/manifest.json
@@ -1,4 +1,7 @@
{
"name": "com.android.sdkext",
- "version": 339990000
+
+ // Placeholder module version to be replaced during build.
+ // Do not change!
+ "version": 0
}