Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 29ed1f50 authored by TYM Tsai's avatar TYM Tsai Committed by Android (Google) Code Review
Browse files

Merge "Set callback to the PackageImpl if creates via a Parcel" into main

parents b36e6054 b87258eb
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -3281,6 +3281,11 @@ public class PackageImpl implements ParsedPackage, AndroidPackageInternal,
    }

    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);
+2 −1
Original line number Diff line number Diff line
@@ -3601,7 +3601,8 @@ final class InstallPackageHelper {
                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);
            }
+1 −1
Original line number Diff line number Diff line
@@ -1739,7 +1739,7 @@ public class PackageManagerService implements PackageSender, TestUtilityService
                        () -> 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 */,
+18 −3
Original line number Diff line number Diff line
@@ -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 android.util.Slog;

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 @@ public class PackageCacher implements IPackageCacher {

    @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 @@ public class PackageCacher implements IPackageCacher {

    @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 @@ public class PackageCacher implements IPackageCacher {
                new PackageParserCacheHelper.ReadHelper(p);
        helper.startAndInstall();

        ParsedPackage pkg = new PackageImpl(p);
        ParsedPackage pkg = new PackageImpl(p, callback);

        p.recycle();