Use DexUseManager to determine whether a primary dex needs to be shared.

Bug: 249984283
Test: atest ArtServiceTests
Ignore-AOSP-First: ART Services.
Change-Id: Idcaf89d3e4e54a75e8700ac18dcbe1907cfa9833
diff --git a/libartservice/service/java/com/android/server/art/PrimaryDexOptimizer.java b/libartservice/service/java/com/android/server/art/PrimaryDexOptimizer.java
index 81990d2..a80bb05 100644
--- a/libartservice/service/java/com/android/server/art/PrimaryDexOptimizer.java
+++ b/libartservice/service/java/com/android/server/art/PrimaryDexOptimizer.java
@@ -116,7 +116,8 @@
                 String compilerFilter = targetCompilerFilter;
 
                 boolean needsToBeShared = isSharedLibrary(pkg)
-                        || mInjector.isUsedByOtherApps(pkgState.getPackageName());
+                        || mInjector.getDexUseManager().isPrimaryDexUsedByOtherApps(
+                                pkgState.getPackageName(), dexInfo.dexPath());
                 boolean isOtherReadable = true;
                 // If true, implies that the profile has changed since the last compilation.
                 boolean profileMerged = false;
@@ -647,17 +648,17 @@
             return packageName.equals(mContext.getString(R.string.config_systemUi));
         }
 
-        boolean isUsedByOtherApps(@NonNull String packageName) {
-            // TODO(jiakaiz): Get the real value.
-            return false;
-        }
-
         @NonNull
         UserManager getUserManager() {
             return mContext.getSystemService(UserManager.class);
         }
 
         @NonNull
+        DexUseManager getDexUseManager() {
+            return DexUseManager.getInstance();
+        }
+
+        @NonNull
         public IArtd getArtd() {
             return Utils.getArtd();
         }
diff --git a/libartservice/service/javatests/com/android/server/art/PrimaryDexOptimizerTest.java b/libartservice/service/javatests/com/android/server/art/PrimaryDexOptimizerTest.java
index c2ef33f..2eae691 100644
--- a/libartservice/service/javatests/com/android/server/art/PrimaryDexOptimizerTest.java
+++ b/libartservice/service/javatests/com/android/server/art/PrimaryDexOptimizerTest.java
@@ -347,7 +347,10 @@
 
     @Test
     public void testDexoptNeedsToBeShared() throws Exception {
-        when(mInjector.isUsedByOtherApps(PKG_NAME)).thenReturn(true);
+        when(mDexUseManager.isPrimaryDexUsedByOtherApps(eq(PKG_NAME), eq(mDexPath)))
+                .thenReturn(true);
+        when(mDexUseManager.isPrimaryDexUsedByOtherApps(eq(PKG_NAME), eq(mSplit0DexPath)))
+                .thenReturn(true);
 
         // The ref profile is usable but shouldn't be used.
         makeProfileUsable(mRefProfile);
@@ -386,7 +389,11 @@
     @Test
     public void testDexoptNeedsToBeSharedArtifactsArePublic() throws Exception {
         // Same setup as above, but the existing artifacts are public.
-        when(mInjector.isUsedByOtherApps(PKG_NAME)).thenReturn(true);
+        when(mDexUseManager.isPrimaryDexUsedByOtherApps(eq(PKG_NAME), eq(mDexPath)))
+                .thenReturn(true);
+        when(mDexUseManager.isPrimaryDexUsedByOtherApps(eq(PKG_NAME), eq(mSplit0DexPath)))
+                .thenReturn(true);
+
         makeProfileUsable(mRefProfile);
         makeProfileNotUsable(mPrebuiltProfile);
         makeProfileUsable(mDmProfile);
diff --git a/libartservice/service/javatests/com/android/server/art/PrimaryDexOptimizerTestBase.java b/libartservice/service/javatests/com/android/server/art/PrimaryDexOptimizerTestBase.java
index be0e491..c175640 100644
--- a/libartservice/service/javatests/com/android/server/art/PrimaryDexOptimizerTestBase.java
+++ b/libartservice/service/javatests/com/android/server/art/PrimaryDexOptimizerTestBase.java
@@ -58,6 +58,7 @@
     @Mock protected PrimaryDexOptimizer.Injector mInjector;
     @Mock protected IArtd mArtd;
     @Mock protected UserManager mUserManager;
+    @Mock protected DexUseManager mDexUseManager;
     protected PackageState mPkgState;
     protected AndroidPackage mPkg;
     protected PackageUserState mPkgUserStateNotInstalled;
@@ -70,8 +71,8 @@
     public void setUp() throws Exception {
         lenient().when(mInjector.getArtd()).thenReturn(mArtd);
         lenient().when(mInjector.isSystemUiPackage(any())).thenReturn(false);
-        lenient().when(mInjector.isUsedByOtherApps(any())).thenReturn(false);
         lenient().when(mInjector.getUserManager()).thenReturn(mUserManager);
+        lenient().when(mInjector.getDexUseManager()).thenReturn(mDexUseManager);
 
         lenient()
                 .when(SystemProperties.get("dalvik.vm.systemuicompilerfilter"))
@@ -95,6 +96,8 @@
                 .when(mUserManager.getUserHandles(anyBoolean()))
                 .thenReturn(List.of(UserHandle.of(0), UserHandle.of(1), UserHandle.of(2)));
 
+        lenient().when(mDexUseManager.isPrimaryDexUsedByOtherApps(any(), any())).thenReturn(false);
+
         mPkgUserStateNotInstalled = createPackageUserState(false /* installed */);
         mPkgUserStateInstalled = createPackageUserState(true /* installed */);
         mPkgState = createPackageState();