From abe61584313af40691ce5a0759a2e26b20138ab9 Mon Sep 17 00:00:00 2001 From: Jiyong Park Date: Wed, 4 Dec 2019 17:17:48 +0900 Subject: [PATCH] SystemApi is parameterized We have decided to reuse the existing annotation @SystemApi for all Java APIs regardless of whether they are for apps or platform internal modules. This was because introducing new annotation types every time when we have to create new API surfaces will only increase the confusion without giving much benefit. Instead, to differenciate the different API surfaces of @SystemApi, the annotation type is parameterized. Specifically, it has to axises. client: specifies the intended client of the API. process: specifies the process(es) that the API is available. The default for client and process are priv-apps and all, respectively, which corresponds to the today's @SystemApi for privileged apps like GMS. Exempt-From-Owner-Approval: cherry-pick from internal Bug: 140202860 Test: m Merged-In: I3305b71e22970e80db95f3daf3d7713603c7d68d (cherry picked from commit 119afc0695cf7632700119bab62a965793c34fd1) Change-Id: I3305b71e22970e80db95f3daf3d7713603c7d68d --- Android.bp | 10 ++++----- core/java/android/annotation/SystemApi.java | 25 +++++++++++++++++++++ media/Android.bp | 2 +- services/Android.bp | 2 +- 4 files changed, 32 insertions(+), 7 deletions(-) diff --git a/Android.bp b/Android.bp index 7d95b9a1b1fb..486d9bd7dede 100644 --- a/Android.bp +++ b/Android.bp @@ -1123,7 +1123,7 @@ droidstubs { arg_files: [ "core/res/AndroidManifest.xml", ], - args: metalava_framework_docs_args + " --show-annotation android.annotation.SystemApi ", + args: metalava_framework_docs_args + " --show-annotation android.annotation.SystemApi\\(client=android.annotation.SystemApi.Client.PRIVILEGED_APPS,process=android.annotation.SystemApi.Process.ALL\\) ", write_sdk_values: true, } @@ -1434,7 +1434,7 @@ droidstubs { merge_annotations_dirs: [ "metalava-manual", ], - args: " --show-annotation android.annotation.SystemApi", + args: " --show-annotation android.annotation.SystemApi\\(client=android.annotation.SystemApi.Client.PRIVILEGED_APPS,process=android.annotation.SystemApi.Process.ALL\\)", } java_library_static { @@ -1456,7 +1456,7 @@ droidstubs { removed_dex_api_filename: "removed-dex.txt", args: metalava_framework_docs_args + " --show-unannotated " + - " --show-annotation android.annotation.SystemApi " + + " --show-annotation android.annotation.SystemApi\\(client=android.annotation.SystemApi.Client.PRIVILEGED_APPS,process=android.annotation.SystemApi.Process.ALL\\) " + " --show-annotation android.annotation.TestApi ", } @@ -1475,7 +1475,7 @@ droidstubs { " --hide ReferencesHidden " + " --hide UnhiddenSystemApi " + " --show-unannotated " + - " --show-annotation android.annotation.SystemApi " + + " --show-annotation android.annotation.SystemApi\\(client=android.annotation.SystemApi.Client.PRIVILEGED_APPS,process=android.annotation.SystemApi.Process.ALL\\) " + " --show-annotation android.annotation.TestApi ", } @@ -1519,7 +1519,7 @@ droidstubs { arg_files: [ "core/res/AndroidManifest.xml", ], - args: metalava_framework_docs_args + " --show-annotation android.annotation.SystemApi", + args: metalava_framework_docs_args + " --show-annotation android.annotation.SystemApi\\(client=android.annotation.SystemApi.Client.PRIVILEGED_APPS,process=android.annotation.SystemApi.Process.ALL\\)", check_api: { current: { api_file: "api/system-current.txt", diff --git a/core/java/android/annotation/SystemApi.java b/core/java/android/annotation/SystemApi.java index e96ff01d0850..f589cc5704b4 100644 --- a/core/java/android/annotation/SystemApi.java +++ b/core/java/android/annotation/SystemApi.java @@ -41,4 +41,29 @@ import java.lang.annotation.Target; @Target({TYPE, FIELD, METHOD, CONSTRUCTOR, ANNOTATION_TYPE, PACKAGE}) @Retention(RetentionPolicy.RUNTIME) public @interface SystemApi { + enum Client { + /** + * Specifies that the intended clients of a SystemApi are privileged apps. + * This is the default value for {@link #client}. + */ + PRIVILEGED_APPS, + } + + enum Process { + /** + * Specifies that the SystemAPI is available in every Java processes. + * This is the default value for {@link #process}. + */ + ALL, + } + + /** + * The intended client of this SystemAPI. + */ + Client client() default android.annotation.SystemApi.Client.PRIVILEGED_APPS; + + /** + * The process(es) that this SystemAPI is available + */ + Process process() default android.annotation.SystemApi.Process.ALL; } diff --git a/media/Android.bp b/media/Android.bp index a768b81731eb..d7cd054ddc3a 100644 --- a/media/Android.bp +++ b/media/Android.bp @@ -66,7 +66,7 @@ metalava_updatable_media_args = " --error UnhiddenSystemApi " + "--hide MissingPermission --hide BroadcastBehavior " + "--hide HiddenSuperclass --hide DeprecationMismatch --hide UnavailableSymbol " + "--hide SdkConstant --hide HiddenTypeParameter --hide Todo --hide Typo " + - "--hide HiddenTypedefConstant --show-annotation android.annotation.SystemApi " + "--hide HiddenTypedefConstant --show-annotation android.annotation.SystemApi\\(client=android.annotation.SystemApi.Client.PRIVILEGED_APPS,process=android.annotation.SystemApi.Process.ALL\\) " droidstubs { name: "updatable-media-stubs", diff --git a/services/Android.bp b/services/Android.bp index 5290ebb85f3a..72c13747e011 100644 --- a/services/Android.bp +++ b/services/Android.bp @@ -110,7 +110,7 @@ droidstubs { srcs: [":services-sources"], installable: false, // TODO: remove the --hide options below - args: " --show-single-annotation android.annotation.SystemApi" + + args: " --show-single-annotation android.annotation.SystemApi\\(client=android.annotation.SystemApi.Client.INTERNAL,process=android.annotation.SystemApi.Process.SYSTEM_SERVER\\)" + " --hide-annotation android.annotation.Hide" + " --hide-package com.google.android.startop.iorap" + " --hide ReferencesHidden" +