Merge "Set callback to the PackageImpl if creates via a Parcel" into main
diff --git a/core/java/com/android/internal/pm/parsing/pkg/PackageImpl.java b/core/java/com/android/internal/pm/parsing/pkg/PackageImpl.java
index 5e89d06..e1aff2a 100644
--- a/core/java/com/android/internal/pm/parsing/pkg/PackageImpl.java
+++ b/core/java/com/android/internal/pm/parsing/pkg/PackageImpl.java
@@ -3281,6 +3281,11 @@
}
public PackageImpl(Parcel in) {
+ this(in, /* callback */ null);
+ }
+
+ public PackageImpl(@NonNull Parcel in, @Nullable ParsingPackageUtils.Callback callback) {
+ mCallback = callback;
// We use the boot classloader for all classes that we load.
final ClassLoader boot = Object.class.getClassLoader();
this.supportsSmallScreens = sForBoolean.unparcel(in);
diff --git a/services/core/java/com/android/server/pm/InstallPackageHelper.java b/services/core/java/com/android/server/pm/InstallPackageHelper.java
index 4bec61a..ae68018 100644
--- a/services/core/java/com/android/server/pm/InstallPackageHelper.java
+++ b/services/core/java/com/android/server/pm/InstallPackageHelper.java
@@ -3601,7 +3601,8 @@
continue;
}
if ((scanFlags & SCAN_DROP_CACHE) != 0) {
- final PackageCacher cacher = new PackageCacher(mPm.getCacheDir());
+ final PackageCacher cacher = new PackageCacher(mPm.getCacheDir(),
+ mPm.mPackageParserCallback);
Log.w(TAG, "Dropping cache of " + file.getAbsolutePath());
cacher.cleanCachedResult(file);
}
diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java
index 7c51707..35cb5b0 100644
--- a/services/core/java/com/android/server/pm/PackageManagerService.java
+++ b/services/core/java/com/android/server/pm/PackageManagerService.java
@@ -1739,7 +1739,7 @@
() -> LocalServices.getService(UserManagerInternal.class)),
(i, pm) -> new DisplayMetrics(),
(i, pm) -> new PackageParser2(pm.mSeparateProcesses, i.getDisplayMetrics(),
- new PackageCacher(pm.mCacheDir),
+ new PackageCacher(pm.mCacheDir, pm.mPackageParserCallback),
pm.mPackageParserCallback) /* scanningCachingPackageParserProducer */,
(i, pm) -> new PackageParser2(pm.mSeparateProcesses, i.getDisplayMetrics(), null,
pm.mPackageParserCallback) /* scanningPackageParserProducer */,
diff --git a/services/core/java/com/android/server/pm/parsing/PackageCacher.java b/services/core/java/com/android/server/pm/parsing/PackageCacher.java
index b6267c4..2db454a 100644
--- a/services/core/java/com/android/server/pm/parsing/PackageCacher.java
+++ b/services/core/java/com/android/server/pm/parsing/PackageCacher.java
@@ -17,6 +17,7 @@
package com.android.server.pm.parsing;
import android.annotation.NonNull;
+import android.annotation.Nullable;
import android.content.pm.PackageParserCacheHelper;
import android.os.Environment;
import android.os.FileUtils;
@@ -29,8 +30,10 @@
import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.pm.parsing.IPackageCacher;
+import com.android.internal.pm.parsing.PackageParser2;
import com.android.internal.pm.parsing.pkg.PackageImpl;
import com.android.internal.pm.parsing.pkg.ParsedPackage;
+import com.android.internal.pm.pkg.parsing.ParsingPackageUtils;
import com.android.server.pm.ApexManager;
import libcore.io.IoUtils;
@@ -51,9 +54,16 @@
@NonNull
private final File mCacheDir;
+ @Nullable
+ private final PackageParser2.Callback mCallback;
- public PackageCacher(@NonNull File cacheDir) {
+ public PackageCacher(File cacheDir) {
+ this(cacheDir, null);
+ }
+
+ public PackageCacher(File cacheDir, @Nullable PackageParser2.Callback callback) {
this.mCacheDir = cacheDir;
+ this.mCallback = callback;
}
/**
@@ -71,12 +81,17 @@
@VisibleForTesting
protected ParsedPackage fromCacheEntry(byte[] bytes) {
- return fromCacheEntryStatic(bytes);
+ return fromCacheEntryStatic(bytes, mCallback);
}
/** static version of {@link #fromCacheEntry} for unit tests. */
@VisibleForTesting
public static ParsedPackage fromCacheEntryStatic(byte[] bytes) {
+ return fromCacheEntryStatic(bytes, null);
+ }
+
+ private static ParsedPackage fromCacheEntryStatic(byte[] bytes,
+ @Nullable ParsingPackageUtils.Callback callback) {
final Parcel p = Parcel.obtain();
p.unmarshall(bytes, 0, bytes.length);
p.setDataPosition(0);
@@ -85,7 +100,7 @@
new PackageParserCacheHelper.ReadHelper(p);
helper.startAndInstall();
- ParsedPackage pkg = new PackageImpl(p);
+ ParsedPackage pkg = new PackageImpl(p, callback);
p.recycle();