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

Commit 8e862bcc authored by Song Chun Fan's avatar Song Chun Fan Committed by Android (Google) Code Review
Browse files

Merge "[pm] copy some fields from AndroidPackage to PackageState" into main

parents f1e8d173 0838eec5
Loading
Loading
Loading
Loading
+8 −8
Original line number Diff line number Diff line
@@ -1269,10 +1269,9 @@ final class InstallPackageHelper {
                    replace = true;
                    if (DEBUG_INSTALL) Slog.d(TAG, "Replace existing package: " + pkgName);
                }
                final AndroidPackage oldPackage = mPm.mPackages.get(pkgName);
                if (replace && oldPackage != null) {
                if (replace) {
                    // Prevent apps opting out from runtime permissions
                    final int oldTargetSdk = oldPackage.getTargetSdkVersion();
                    final int oldTargetSdk = ps.getTargetSdkVersion();
                    final int newTargetSdk = parsedPackage.getTargetSdkVersion();
                    if (oldTargetSdk > Build.VERSION_CODES.LOLLIPOP_MR1
                            && newTargetSdk <= Build.VERSION_CODES.LOLLIPOP_MR1) {
@@ -1284,10 +1283,10 @@ final class InstallPackageHelper {
                                        + " target SDK " + oldTargetSdk + " does.");
                    }
                    // Prevent persistent apps from being updated
                    if (oldPackage.isPersistent()
                    if (ps.isPersistent()
                            && ((installFlags & PackageManager.INSTALL_STAGED) == 0)) {
                        throw new PrepareFailure(PackageManager.INSTALL_FAILED_INVALID_APK,
                                "Package " + oldPackage.getPackageName() + " is a persistent app. "
                                "Package " + pkgName + " is a persistent app. "
                                        + "Persistent apps are not updateable.");
                    }
                }
@@ -1668,7 +1667,7 @@ final class InstallPackageHelper {
                    }

                    // don't allow a system upgrade unless the upgrade hash matches
                    if (oldPackage != null && oldPackage.getRestrictUpdateHash() != null
                    if (oldPackageState.getRestrictUpdateHash() != null
                            && oldPackageState.isSystem()) {
                        final byte[] digestBytes;
                        try {
@@ -1684,12 +1683,13 @@ final class InstallPackageHelper {
                            throw new PrepareFailure(INSTALL_FAILED_INVALID_APK,
                                    "Could not compute hash: " + pkgName11);
                        }
                        if (!Arrays.equals(oldPackage.getRestrictUpdateHash(), digestBytes)) {
                        if (!Arrays.equals(oldPackageState.getRestrictUpdateHash(), digestBytes)) {
                            throw new PrepareFailure(INSTALL_FAILED_INVALID_APK,
                                    "New package fails restrict-update check: " + pkgName11);
                        }
                        // retain upgrade restriction
                        parsedPackage.setRestrictUpdateHash(oldPackage.getRestrictUpdateHash());
                        parsedPackage.setRestrictUpdateHash(
                                oldPackageState.getRestrictUpdateHash());
                    }

                    if (oldPackage != null) {
+1 −2
Original line number Diff line number Diff line
@@ -1469,8 +1469,7 @@ public class PackageManagerService implements PackageSender, TestUtilityService
            archPkg.versionCodeMajor = (int) (longVersionCode >> 32);
            archPkg.versionCode = (int) longVersionCode;

            // TODO(b/297916136): extract target sdk version.
            archPkg.targetSdkVersion = MIN_INSTALLABLE_TARGET_SDK;
            archPkg.targetSdkVersion = ps.getTargetSdkVersion();

            // These get translated in flags important for user data management.
            archPkg.defaultToDeviceProtectedStorage = String.valueOf(
+44 −2

File changed.

Preview size limit exceeded, changes collapsed.

+4 −2
Original line number Diff line number Diff line
@@ -220,7 +220,8 @@ final class ScanPackageUtils {
                    UserManagerService.getInstance(), usesSdkLibraries,
                    parsedPackage.getUsesSdkLibrariesVersionsMajor(), usesStaticLibraries,
                    parsedPackage.getUsesStaticLibrariesVersions(), parsedPackage.getMimeGroups(),
                    newDomainSetId);
                    newDomainSetId, parsedPackage.isPersistent(),
                    parsedPackage.getTargetSdkVersion(), parsedPackage.getRestrictUpdateHash());
        } else {
            // make a deep copy to avoid modifying any existing system state.
            pkgSetting = new PackageSetting(pkgSetting);
@@ -240,7 +241,8 @@ final class ScanPackageUtils {
                    UserManagerService.getInstance(),
                    usesSdkLibraries, parsedPackage.getUsesSdkLibrariesVersionsMajor(),
                    usesStaticLibraries, parsedPackage.getUsesStaticLibrariesVersions(),
                    parsedPackage.getMimeGroups(), newDomainSetId);
                    parsedPackage.getMimeGroups(), newDomainSetId, parsedPackage.isPersistent(),
                    parsedPackage.getTargetSdkVersion(), parsedPackage.getRestrictUpdateHash());
        }

        if (createNewPackage && originalPkgSetting != null) {
+16 −5
Original line number Diff line number Diff line
@@ -1060,7 +1060,8 @@ public final class Settings implements Watchable, Snappable, ResilientAtomicFile
            boolean virtualPreload, boolean isStoppedSystemApp, UserManagerService userManager,
            String[] usesSdkLibraries, long[] usesSdkLibrariesVersions,
            String[] usesStaticLibraries, long[] usesStaticLibrariesVersions,
            Set<String> mimeGroupNames, @NonNull UUID domainSetId) {
            Set<String> mimeGroupNames, @NonNull UUID domainSetId, boolean isPersistent,
            int targetSdkVersion, byte[] restrictUpdatedHash) {
        final PackageSetting pkgSetting;
        if (originalPkg != null) {
            if (PackageManagerService.DEBUG_UPGRADE) Log.v(PackageManagerService.TAG, "Package "
@@ -1080,7 +1081,10 @@ public final class Settings implements Watchable, Snappable, ResilientAtomicFile
                    .setUsesStaticLibrariesVersions(usesStaticLibrariesVersions)
                    // Update new package state.
                    .setLastModifiedTime(codePath.lastModified())
                    .setDomainSetId(domainSetId);
                    .setDomainSetId(domainSetId)
                    .setIsPersistent(isPersistent)
                    .setTargetSdkVersion(targetSdkVersion)
                    .setRestrictUpdateHash(restrictUpdatedHash);
            pkgSetting.setFlags(pkgFlags)
                    .setPrivateFlags(pkgPrivateFlags);
        } else {
@@ -1092,7 +1096,10 @@ public final class Settings implements Watchable, Snappable, ResilientAtomicFile
                    null /*cpuAbiOverrideString*/, versionCode, pkgFlags, pkgPrivateFlags,
                    0 /*sharedUserAppId*/, usesSdkLibraries, usesSdkLibrariesVersions,
                    usesStaticLibraries, usesStaticLibrariesVersions,
                    createMimeGroups(mimeGroupNames), domainSetId);
                    createMimeGroups(mimeGroupNames), domainSetId)
                    .setIsPersistent(isPersistent)
                    .setTargetSdkVersion(targetSdkVersion)
                    .setRestrictUpdateHash(restrictUpdatedHash);
            pkgSetting.setLastModifiedTime(codePath.lastModified());
            if (sharedUser != null) {
                pkgSetting.setSharedUserAppId(sharedUser.mAppId);
@@ -1206,7 +1213,8 @@ public final class Settings implements Watchable, Snappable, ResilientAtomicFile
            int pkgPrivateFlags, @NonNull UserManagerService userManager,
            @Nullable String[] usesSdkLibraries, @Nullable long[] usesSdkLibrariesVersions,
            @Nullable String[] usesStaticLibraries, @Nullable long[] usesStaticLibrariesVersions,
            @Nullable Set<String> mimeGroupNames, @NonNull UUID domainSetId)
            @Nullable Set<String> mimeGroupNames, @NonNull UUID domainSetId, boolean isPersistent,
            int targetSdkVersion, byte[] restrictUpdatedHash)
                    throws PackageManagerException {
        final String pkgName = pkgSetting.getPackageName();
        if (sharedUser != null) {
@@ -1258,7 +1266,10 @@ public final class Settings implements Watchable, Snappable, ResilientAtomicFile
        pkgSetting.setPrimaryCpuAbi(primaryCpuAbi)
                .setSecondaryCpuAbi(secondaryCpuAbi)
                .updateMimeGroups(mimeGroupNames)
                .setDomainSetId(domainSetId);
                .setDomainSetId(domainSetId)
                .setIsPersistent(isPersistent)
                .setTargetSdkVersion(targetSdkVersion)
                .setRestrictUpdateHash(restrictUpdatedHash);
        // Update SDK library dependencies if needed.
        if (usesSdkLibraries != null && usesSdkLibrariesVersions != null
                && usesSdkLibraries.length == usesSdkLibrariesVersions.length) {
Loading