Update Art Service to be a LocalManager

This CL re-names the ArtService class to conform to the Frameworks
naming convention for local managers, which are SystemServer only
"service" singletons which are accessible through the LocalManagers
registry.  The build system is updated for these changes, as well as
adding appropriate API tracking build targets.

Test: build, boot, and inspect log
Bug: 177273468
Merged-In: Iec3d2530a3a3a2824009b50f13e297da8fde55c5
Change-Id: Iec3d2530a3a3a2824009b50f13e297da8fde55c5
diff --git a/build/apex/Android.bp b/build/apex/Android.bp
index 4e9dca8..ba1d430 100644
--- a/build/apex/Android.bp
+++ b/build/apex/Android.bp
@@ -172,7 +172,7 @@
 
 // ART Java libraries
 art_java_libs = [
-    "artservice",
+    "service-art",
 ]
 
 // Native libraries that support the core Java libraries.
diff --git a/build/apex/art_apex_test.py b/build/apex/art_apex_test.py
index 91af3db..110553b 100755
--- a/build/apex/art_apex_test.py
+++ b/build/apex/art_apex_test.py
@@ -551,7 +551,7 @@
     self._checker.check_native_library('libsigchain')
 
     # Check internal Java libraries
-    self._checker.check_java_library("artservice")
+    self._checker.check_java_library("service-art")
 
     # Check java libraries for Managed Core Library.
     self._checker.check_java_library('apache-xml')
diff --git a/libartservice/Android.bp b/libartservice/Android.bp
index 66fb146..55ce1a6 100644
--- a/libartservice/Android.bp
+++ b/libartservice/Android.bp
@@ -42,15 +42,72 @@
     export_shared_lib_headers: ["libbase"],
 }
 
-java_library {
-    // This Java Language Library contains the ART Service class that will be
-    // loaded by the System Server.
+// This variable definition and many of the settings involved in the
+// service-art target are taken from the
+// framework-system-server-module-defaults target and its dependencies.  These
+// target are not used directly because they have a dependency on a
+// frameworks/base library which is not available in the unbundled ART build
+// servers (framework-annotations-lib).
+//
+// TODO (b/183133670): Remove this hack and use the
+//   framework-system-server-module-defaults target
+mainline_stubs_args = "--error UnhiddenSystemApi " +
+    "--hide BroadcastBehavior " +
+    "--hide CallbackInterface " +
+    "--hide DeprecationMismatch " +
+    "--hide HiddenSuperclass " +
+    "--hide HiddenTypedefConstant " +
+    "--hide HiddenTypeParameter " +
+    "--hide MissingPermission " +
+    "--hide RequiresPermission " +
+    "--hide SdkConstant " +
+    "--hide Todo " +
+    "--hide Typo " +
+    "--hide UnavailableSymbol "
 
-    name: "artservice",
+// Provides the API and implementation of the ART Service class that will be
+// loaded by the System Server.
+java_sdk_library {
+    // This target is named 'service-art' to conform to the naming conventions
+    // for JAR files in the System Server.
+    name: "service-art",
+    permitted_packages: ["com.android.server.art"],
+
+    system_server: {
+        enabled: true,
+        sdk_version: "module_current",
+    },
+
+    // Prevent dependencies that do not specify an sdk_version from accessing the
+    // implementation library by default and force them to use stubs instead.
+    default_to_stubs: true,
+
+    api_lint: {
+        enabled: true,
+    },
+
+    annotations_enabled: true,
+
+    // installable implies we'll create a non-apex (platform) variant, which
+    // we shouldn't ordinarily need (and it can create issues), so disable that.
+    installable: false,
+
     visibility: [
         "//art:__subpackages__",
+        "//frameworks/base/services/core",
+        "//frameworks/base/apex:__subpackages__",
+        "//packages/modules:__subpackages__",
     ],
 
+    impl_library_visibility: [
+        ":__pkg__",
+        "//art/libartservice/tests",
+        "//frameworks/base",
+    ],
+
+    stubs_library_visibility: ["//visibility:public"],
+    stubs_source_visibility: ["//visibility:private"],
+
     apex_available: [
         "com.android.art",
         "com.android.art.debug",
@@ -58,13 +115,34 @@
     sdk_version: "core_platform",
     min_sdk_version: "31",
 
+    // This is not actually part of the public API but this is the only
+    // way to define a custom API surface.
+    public: {
+        enabled: true,
+        sdk_version: "module_current",
+    },
+
+    // The API elements are the ones annotated with
+    //   libcore.api.CorePlatformApi(status=libcore.api.CorePlatformApi.Status.STABLE)
+    droiddoc_options: [
+        mainline_stubs_args,
+        "--show-single-annotation libcore.api.CorePlatformApi\\(status=libcore.api.CorePlatformApi.Status.STABLE\\)",
+    ],
+
+    // Temporarily disable compatibility with previous released APIs.
+    // TODO - remove once prototype has stabilized
+    //   running "m update-api" will give instructions on what to do next
+    unsafe_ignore_missing_latest_api: true,
+
+    // This cannot be accessed by apps using <uses-library> in their manifest.
+    shared_library: false,
+
     srcs: [
-        "service/java/com/android/server/art/ArtService.java",
+        "service/java/com/android/server/art/ArtManagerLocal.java",
     ],
 
     libs: [
         "art.module.api.annotations.for.system.modules",
-        "unsupportedappusage",
     ],
 
     plugins: ["java_api_finder"],
diff --git a/libartservice/api/current.txt b/libartservice/api/current.txt
new file mode 100644
index 0000000..c7844e0
--- /dev/null
+++ b/libartservice/api/current.txt
@@ -0,0 +1,9 @@
+// Signature format: 2.0
+package com.android.server.art {
+
+  public final class ArtManagerLocal {
+    ctor public ArtManagerLocal();
+  }
+
+}
+
diff --git a/libartservice/api/removed.txt b/libartservice/api/removed.txt
new file mode 100644
index 0000000..d802177
--- /dev/null
+++ b/libartservice/api/removed.txt
@@ -0,0 +1 @@
+// Signature format: 2.0
diff --git a/libartservice/api/system-server-current.txt b/libartservice/api/system-server-current.txt
new file mode 100644
index 0000000..c7844e0
--- /dev/null
+++ b/libartservice/api/system-server-current.txt
@@ -0,0 +1,9 @@
+// Signature format: 2.0
+package com.android.server.art {
+
+  public final class ArtManagerLocal {
+    ctor public ArtManagerLocal();
+  }
+
+}
+
diff --git a/libartservice/api/system-server-removed.txt b/libartservice/api/system-server-removed.txt
new file mode 100644
index 0000000..d802177
--- /dev/null
+++ b/libartservice/api/system-server-removed.txt
@@ -0,0 +1 @@
+// Signature format: 2.0
diff --git a/libartservice/service/java/com/android/server/art/ArtService.java b/libartservice/service/java/com/android/server/art/ArtManagerLocal.java
similarity index 80%
rename from libartservice/service/java/com/android/server/art/ArtService.java
rename to libartservice/service/java/com/android/server/art/ArtManagerLocal.java
index 3a592d2..aac4b25 100644
--- a/libartservice/service/java/com/android/server/art/ArtService.java
+++ b/libartservice/service/java/com/android/server/art/ArtManagerLocal.java
@@ -16,15 +16,15 @@
 
 package com.android.server.art;
 
+import libcore.api.CorePlatformApi;
+
 /**
  * This class provides a system API for functionality provided by the ART
  * module.
  */
-@libcore.api.CorePlatformApi
-public final class ArtService {
+@libcore.api.CorePlatformApi(status = libcore.api.CorePlatformApi.Status.STABLE)
+public final class ArtManagerLocal {
     static final String LOG_TAG = "ArtService";
 
-    static String getMsg() {
-        return "Hello world!";
-    }
+    public ArtManagerLocal() {}
 }
diff --git a/libartservice/tests/Android.bp b/libartservice/tests/Android.bp
index e8ae392..450e3d2 100644
--- a/libartservice/tests/Android.bp
+++ b/libartservice/tests/Android.bp
@@ -28,7 +28,7 @@
 }
 
 java_test {
-    name: "ArtServiceTests",
+    name: "ArtManagerLocalTests",
 
     // Include all test java files.
     srcs: [
@@ -37,7 +37,7 @@
 
     static_libs: [
         "junit",
-        "artservice",
+        "service-art.impl",
     ],
 
     platform_apis: true,
diff --git a/libartservice/tests/src/com/android/server/art/ArtServiceTests.java b/libartservice/tests/src/com/android/server/art/ArtManagerLocalTests.java
similarity index 74%
rename from libartservice/tests/src/com/android/server/art/ArtServiceTests.java
rename to libartservice/tests/src/com/android/server/art/ArtManagerLocalTests.java
index 243204f..f80ee1a 100644
--- a/libartservice/tests/src/com/android/server/art/ArtServiceTests.java
+++ b/libartservice/tests/src/com/android/server/art/ArtManagerLocalTests.java
@@ -18,22 +18,17 @@
 
 import static org.junit.Assert.assertEquals;
 
-import com.android.server.art.ArtService;
+import com.android.server.art.ArtManagerLocal;
 
 import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
 
-public class ArtServiceTests {
-    private static ArtService mArtService;
+public class ArtManagerLocalTests {
+    private ArtManagerLocal mArtManagerLocal;
 
     @Before
     public void setup() {
-        mArtService = new ArtService();
-    }
-
-    @Test
-    public void testNotifyPrimaryUse() {
-        assertEquals(mArtService.getMsg(), "Hello world!");
+        mArtManagerLocal = new ArtManagerLocal();
     }
 }
\ No newline at end of file