blob: 4ac00983af1372c595ff0e9892f8b7680ba8cec6 [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.
Makoto Onuki14a1ab12020-01-27 08:38:11 -080049 * This is the default value for {@link #client}.
Jiyong Parkabe61582019-12-04 17:17:48 +090050 */
51 PRIVILEGED_APPS,
Jiyong Park5ed5a042019-12-13 14:53:14 +090052
53 /**
Makoto Onukie0d9a5a2020-02-04 13:45:33 -080054 * Specifies that the intended clients of a SystemApi are used by classes in
55 * <pre>BOOTCLASSPATH</pre> in mainline modules. Mainline modules can also expose
56 * this type of system APIs too when they're used only by the non-updatable
57 * platform code.
Jiyong Park5ed5a042019-12-13 14:53:14 +090058 */
Makoto Onuki14a1ab12020-01-27 08:38:11 -080059 MODULE_LIBRARIES,
60
61 /**
62 * Specifies that the system API is available only in the system server process.
63 * Use this to expose APIs from code loaded by the system server process <em>but</em>
64 * not in <pre>BOOTCLASSPATH</pre>.
Jiyong Park5ed5a042019-12-13 14:53:14 +090065 */
66 SYSTEM_SERVER
Jiyong Parkabe61582019-12-04 17:17:48 +090067 }
68
69 /**
70 * The intended client of this SystemAPI.
71 */
72 Client client() default android.annotation.SystemApi.Client.PRIVILEGED_APPS;
73
74 /**
Jiyong Park40ec8622020-01-15 00:12:34 +090075 * Container for {@link SystemApi} that allows it to be applied repeatedly to types.
76 */
77 @Retention(RetentionPolicy.RUNTIME)
78 @Target(TYPE)
79 @interface Container {
80 SystemApi[] value();
81 }
Jeff Brownd5a5b5a2014-06-05 17:14:39 -070082}