Merge "Add SdkExtensions class" am: 0899f50b75

am: af659d8ac4

Change-Id: I9bbb3b386e791de5e6d19b6f551c74183888701c
This commit is contained in:
Anton Hansson
2019-12-02 10:27:26 -08:00
committed by android-build-merger
8 changed files with 156 additions and 0 deletions

View File

@@ -561,6 +561,12 @@ filegroup {
],
}
java_library {
name: "framework-annotations-lib",
srcs: [ ":framework-annotations" ],
sdk_version: "current",
}
filegroup {
name: "framework-networkstack-shared-srcs",
srcs: [

View File

@@ -15,6 +15,7 @@
apex {
name: "com.android.sdkext",
manifest: "manifest.json",
java_libs: [ "framework-sdkext" ],
key: "com.android.sdkext.key",
certificate: ":com.android.sdkext.certificate",
}

View File

@@ -19,3 +19,12 @@ filegroup {
],
path: "java",
}
java_library {
name: "framework-sdkext",
srcs: [ ":framework-sdkext-sources" ],
sdk_version: "system_current",
libs: [ "framework-annotations-lib" ],
permitted_packages: [ "android.os.ext" ],
installable: true,
}

View File

@@ -0,0 +1,53 @@
/*
* Copyright (C) 2019 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 android.os.ext;
import android.annotation.IntDef;
import android.os.Build.VERSION_CODES;
import android.os.SystemProperties;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
/** @hide */
public class SdkExtensions {
private static final int R_EXTENSION_INT;
static {
R_EXTENSION_INT = SystemProperties.getInt("persist.com.android.sdkext.sdk_info", 0);
}
/** Values suitable as parameters for {@link #getExtensionVersion(int)}. */
@IntDef(value = { VERSION_CODES.R })
@Retention(RetentionPolicy.SOURCE)
public @interface SdkVersion {}
/**
* Return the version of the extension to the given SDK.
*
* @param sdk the SDK version to get the extension version of.
* @see SdkVersion
* @throws IllegalArgumentException if sdk is not an sdk version with extensions
*/
public static int getExtensionVersion(@SdkVersion int sdk) {
if (sdk < VERSION_CODES.R) {
throw new IllegalArgumentException();
}
return R_EXTENSION_INT;
}
}

View File

@@ -0,0 +1,5 @@
<HTML>
<BODY>
Provides APIs to interface with the SDK extensions.
</BODY>
</HTML>

View File

@@ -0,0 +1,10 @@
android_test {
name: "framework-sdkext-tests",
srcs: ["src/**/*.java"],
libs: [
"android.test.base",
"android.test.runner",
],
static_libs: [ "framework-sdkext" ],
platform_apis: true,
}

View File

@@ -0,0 +1,27 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (C) 2019 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.
-->
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.android.sdkext.tests">
<application>
<uses-library android:name="android.test.runner" />
</application>
<instrumentation android:name="android.test.InstrumentationTestRunner"
android:targetPackage="com.android.sdkext.tests" />
</manifest>

View File

@@ -0,0 +1,45 @@
/*
* Copyright (C) 2019 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 android.os.ext;
import android.os.Build;
import android.test.suitebuilder.annotation.SmallTest;
import junit.framework.TestCase;
public class SdkExtensionsTest extends TestCase {
@SmallTest
public void testBadArgument() throws Exception {
try {
SdkExtensions.getExtensionVersion(Build.VERSION_CODES.Q);
fail("expected IllegalArgumentException");
} catch (IllegalArgumentException expected) { }
try {
SdkExtensions.getExtensionVersion(999999);
fail("expected IllegalArgumentException");
} catch (IllegalArgumentException expected) { }
}
@SmallTest
public void testDefault() throws Exception {
int r = SdkExtensions.getExtensionVersion(Build.VERSION_CODES.R);
assertTrue(r >= 0);
}
}