Use real `PackageDataSnapshot`.

Also:
- Remove `sdk_version: "system_server_current"` from `ArtServiceTests`
  because `android_test` has no access to system server classes at
  runtime.
- Add "services.core" as `static_libs` instead.

Bug: 177273468
Test: adb shell pm art get-optimization-status com.google.android.youtube
Test: (on master-art) art/tools/buildbot-build.sh
Ignore-AOSP-First: ART Services
Change-Id: I0ca759bc04498a963cab540b6e0b93990712aca2
diff --git a/libartservice/service/Android.bp b/libartservice/service/Android.bp
index 72e2002..7bd4c34 100644
--- a/libartservice/service/Android.bp
+++ b/libartservice/service/Android.bp
@@ -132,9 +132,12 @@
         "artd-aidl-java",
         "mockito-target-minus-junit4",
         "service-art.impl",
+        // Statically link against system server to allow us to mock system
+        // server APIs. This won't work on master-art, but it's fine because we
+        // don't run this test on master-art.
+        "services.core",
     ],
 
-    sdk_version: "system_server_current",
     min_sdk_version: "31",
 
     test_suites: ["general-tests"],
diff --git a/libartservice/service/java/com/android/server/art/ArtManagerLocal.java b/libartservice/service/java/com/android/server/art/ArtManagerLocal.java
index b78a401..03a1deb 100644
--- a/libartservice/service/java/com/android/server/art/ArtManagerLocal.java
+++ b/libartservice/service/java/com/android/server/art/ArtManagerLocal.java
@@ -36,9 +36,9 @@
 import com.android.server.art.model.DeleteResult;
 import com.android.server.art.model.OptimizationStatus;
 import com.android.server.art.wrapper.AndroidPackageApi;
-import com.android.server.art.wrapper.PackageDataSnapshot;
 import com.android.server.art.wrapper.PackageManagerLocal;
 import com.android.server.art.wrapper.PackageState;
+import com.android.server.pm.snapshot.PackageDataSnapshot;
 
 import java.util.ArrayList;
 import java.util.List;
diff --git a/libartservice/service/java/com/android/server/art/ArtShellCommand.java b/libartservice/service/java/com/android/server/art/ArtShellCommand.java
index a094d6f..9a49aae 100644
--- a/libartservice/service/java/com/android/server/art/ArtShellCommand.java
+++ b/libartservice/service/java/com/android/server/art/ArtShellCommand.java
@@ -25,8 +25,8 @@
 import com.android.server.art.model.ArtFlags;
 import com.android.server.art.model.DeleteResult;
 import com.android.server.art.model.OptimizationStatus;
-import com.android.server.art.wrapper.PackageDataSnapshot;
 import com.android.server.art.wrapper.PackageManagerLocal;
+import com.android.server.pm.snapshot.PackageDataSnapshot;
 
 import java.io.PrintWriter;
 
diff --git a/libartservice/service/java/com/android/server/art/wrapper/PackageDataSnapshot.java b/libartservice/service/java/com/android/server/art/wrapper/PackageDataSnapshot.java
deleted file mode 100644
index 4b39255..0000000
--- a/libartservice/service/java/com/android/server/art/wrapper/PackageDataSnapshot.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Copyright (C) 2022 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 com.android.server.art.wrapper;
-
-import android.annotation.NonNull;
-
-/** @hide */
-public class PackageDataSnapshot {
-    private final Object mSnapshot;
-
-    PackageDataSnapshot(@NonNull Object snapshot) {
-        mSnapshot = snapshot;
-    }
-
-    @NonNull
-    Object getRealInstance() {
-        return mSnapshot;
-    }
-}
diff --git a/libartservice/service/java/com/android/server/art/wrapper/PackageManagerLocal.java b/libartservice/service/java/com/android/server/art/wrapper/PackageManagerLocal.java
index 2d594bd..650d29c 100644
--- a/libartservice/service/java/com/android/server/art/wrapper/PackageManagerLocal.java
+++ b/libartservice/service/java/com/android/server/art/wrapper/PackageManagerLocal.java
@@ -20,6 +20,8 @@
 import android.annotation.Nullable;
 import android.os.UserHandle;
 
+import com.android.server.pm.snapshot.PackageDataSnapshot;
+
 /** @hide */
 public class PackageManagerLocal {
     private final Object mPackageManagerInternal;
@@ -50,10 +52,9 @@
     @NonNull
     public PackageDataSnapshot snapshot() {
         try {
-            Object snapshot = mPackageManagerInternal.getClass()
-                                      .getMethod("snapshot")
-                                      .invoke(mPackageManagerInternal);
-            return new PackageDataSnapshot(snapshot);
+            return (PackageDataSnapshot) mPackageManagerInternal.getClass()
+                    .getMethod("snapshot")
+                    .invoke(mPackageManagerInternal);
         } catch (ReflectiveOperationException e) {
             throw new RuntimeException(e);
         }
@@ -66,11 +67,10 @@
             int userId = (int) UserHandle.class.getMethod("getUserId", int.class)
                                  .invoke(null, callingUid);
             Class<?> computerClass = Class.forName("com.android.server.pm.Computer");
-            Object packageState =
-                    computerClass
-                            .getMethod("getPackageStateForInstalledAndFiltered", String.class,
-                                    int.class, int.class)
-                            .invoke(snapshot.getRealInstance(), packageName, callingUid, userId);
+            Object packageState = computerClass
+                                          .getMethod("getPackageStateForInstalledAndFiltered",
+                                                  String.class, int.class, int.class)
+                                          .invoke(snapshot, packageName, callingUid, userId);
             return packageState != null ? new PackageState(packageState) : null;
         } catch (ReflectiveOperationException e) {
             throw new RuntimeException(e);
diff --git a/libartservice/service/java/com/android/server/art/wrapper/README.md b/libartservice/service/java/com/android/server/art/wrapper/README.md
index ee66f5b..829fc1c 100644
--- a/libartservice/service/java/com/android/server/art/wrapper/README.md
+++ b/libartservice/service/java/com/android/server/art/wrapper/README.md
@@ -6,7 +6,6 @@
 The mappings are:
 
 - `AndroidPackageApi`: `com.android.server.pm.pkg.AndroidPackageApi`
-- `PackageDataSnapshot`: `com.android.server.pm.snapshot.PackageDataSnapshot`
 - `PackageManagerLocal`: `com.android.server.pm.PackageManagerLocal`
 - `PackageState`: `com.android.server.pm.pkg.PackageState`
 - `SharedLibraryInfo`: `android.content.pm.SharedLibraryInfo`
diff --git a/libartservice/service/javatests/com/android/server/art/ArtManagerLocalTest.java b/libartservice/service/javatests/com/android/server/art/ArtManagerLocalTest.java
index 572ab06..0e958ba 100644
--- a/libartservice/service/javatests/com/android/server/art/ArtManagerLocalTest.java
+++ b/libartservice/service/javatests/com/android/server/art/ArtManagerLocalTest.java
@@ -37,9 +37,9 @@
 import com.android.server.art.model.DeleteResult;
 import com.android.server.art.model.OptimizationStatus;
 import com.android.server.art.wrapper.AndroidPackageApi;
-import com.android.server.art.wrapper.PackageDataSnapshot;
 import com.android.server.art.wrapper.PackageManagerLocal;
 import com.android.server.art.wrapper.PackageState;
+import com.android.server.pm.snapshot.PackageDataSnapshot;
 
 import org.junit.Before;
 import org.junit.Rule;