blob: d4c6993607d82a6a3efa6e2abbff19b5f245d3a2 [file] [log] [blame]
Jeff Brownd5a5b5a2014-06-05 17:14:39 -07001/*
2 * Copyright (C) 2014 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package android.annotation;
18
19import static java.lang.annotation.ElementType.ANNOTATION_TYPE;
20import static java.lang.annotation.ElementType.CONSTRUCTOR;
21import static java.lang.annotation.ElementType.FIELD;
22import static java.lang.annotation.ElementType.METHOD;
23import static java.lang.annotation.ElementType.PACKAGE;
24import static java.lang.annotation.ElementType.TYPE;
25
Jiyong Park40ec8622020-01-15 00:12:34 +090026import java.lang.annotation.Repeatable;
Jeff Brownd5a5b5a2014-06-05 17:14:39 -070027import java.lang.annotation.Retention;
28import java.lang.annotation.RetentionPolicy;
29import java.lang.annotation.Target;
30
31/**
32 * Indicates an API is exposed for use by bundled system applications.
33 * <p>
34 * These APIs are not guaranteed to remain consistent release-to-release,
35 * and are not for use by apps linking against the Android SDK.
36 * </p><p>
37 * This annotation should only appear on API that is already marked <pre>@hide</pre>.
38 * </p>
39 *
40 * @hide
41 */
42@Target({TYPE, FIELD, METHOD, CONSTRUCTOR, ANNOTATION_TYPE, PACKAGE})
Jiyong Park3b0867e2018-01-02 19:02:07 +090043@Retention(RetentionPolicy.RUNTIME)
Jiyong Park40ec8622020-01-15 00:12:34 +090044@Repeatable(SystemApi.Container.class) // TODO(b/146727827): make this non-repeatable
Jeff Brownd5a5b5a2014-06-05 17:14:39 -070045public @interface SystemApi {
Jiyong Parkabe61582019-12-04 17:17:48 +090046 enum Client {
47 /**
48 * Specifies that the intended clients of a SystemApi are privileged apps.
Jiyong Park5ed5a042019-12-13 14:53:14 +090049 * This is the default value for {@link #client}. This implies
50 * MODULE_APPS and MODULE_LIBRARIES as well, which means that APIs will also
51 * be available to module apps and jars.
Jiyong Parkabe61582019-12-04 17:17:48 +090052 */
53 PRIVILEGED_APPS,
Jiyong Park5ed5a042019-12-13 14:53:14 +090054
55 /**
56 * Specifies that the intended clients of a SystemApi are modules implemented
57 * as apps, like the NetworkStack app. This implies MODULE_LIBRARIES as well,
58 * which means that APIs will also be available to module jars.
59 */
60 MODULE_APPS,
61
62 /**
63 * Specifies that the intended clients of a SystemApi are modules implemented
64 * as libraries, like the conscrypt.jar in the conscrypt APEX.
65 */
66 MODULE_LIBRARIES
Jiyong Parkabe61582019-12-04 17:17:48 +090067 }
68
69 enum Process {
70 /**
71 * Specifies that the SystemAPI is available in every Java processes.
72 * This is the default value for {@link #process}.
73 */
74 ALL,
Jiyong Park5ed5a042019-12-13 14:53:14 +090075
76 /**
77 * Specifies that the SystemAPI is available only in the system server process.
78 */
79 SYSTEM_SERVER
Jiyong Parkabe61582019-12-04 17:17:48 +090080 }
81
82 /**
83 * The intended client of this SystemAPI.
84 */
85 Client client() default android.annotation.SystemApi.Client.PRIVILEGED_APPS;
86
87 /**
88 * The process(es) that this SystemAPI is available
89 */
90 Process process() default android.annotation.SystemApi.Process.ALL;
Jiyong Park40ec8622020-01-15 00:12:34 +090091
92
93 /**
94 * Container for {@link SystemApi} that allows it to be applied repeatedly to types.
95 */
96 @Retention(RetentionPolicy.RUNTIME)
97 @Target(TYPE)
98 @interface Container {
99 SystemApi[] value();
100 }
Jeff Brownd5a5b5a2014-06-05 17:14:39 -0700101}