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

Commit 25945302 authored by Jeff Sharkey's avatar Jeff Sharkey Committed by Android (Google) Code Review
Browse files

Merge "Persist version data on a per-volume basis." into mnc-dev

parents 822f6141 f80b52b0
Loading
Loading
Loading
Loading
+65 −49
Original line number Diff line number Diff line
@@ -224,6 +224,7 @@ import com.android.server.SystemConfig;
import com.android.server.Watchdog;
import com.android.server.pm.PermissionsState.PermissionState;
import com.android.server.pm.Settings.DatabaseVersion;
import com.android.server.pm.Settings.VersionInfo;
import com.android.server.storage.DeviceStorageMonitorInternal;
import org.xmlpull.v1.XmlPullParser;
@@ -1654,6 +1655,11 @@ public class PackageManagerService extends IPackageManager.Stub {
        @Override
        public void onVolumeForgotten(String fsUuid) {
            if (TextUtils.isEmpty(fsUuid)) {
                Slog.w(TAG, "Forgetting internal storage is probably a mistake; ignoring");
                return;
            }
            // Remove any apps installed on the forgotten volume
            synchronized (mPackages) {
                final List<PackageSetting> packages = mSettings.getVolumePackagesLPr(fsUuid);
@@ -1663,6 +1669,7 @@ public class PackageManagerService extends IPackageManager.Stub {
                            UserHandle.USER_OWNER, PackageManager.DELETE_ALL_USERS);
                }
                mSettings.onVolumeForgotten(fsUuid);
                mSettings.writeLPr();
            }
        }
@@ -2239,17 +2246,16 @@ public class PackageManagerService extends IPackageManager.Stub {
            // cases get permissions that the user didn't initially explicitly
            // allow...  it would be nice to have some better way to handle
            // this situation.
            final boolean regrantPermissions = mSettings.mInternalSdkPlatform
                    != mSdkVersion;
            if (regrantPermissions) Slog.i(TAG, "Platform changed from "
                    + mSettings.mInternalSdkPlatform + " to " + mSdkVersion
                    + "; regranting permissions for internal storage");
            mSettings.mInternalSdkPlatform = mSdkVersion;
            updatePermissionsLPw(null, null, UPDATE_PERMISSIONS_ALL
                    | (regrantPermissions
                            ? (UPDATE_PERMISSIONS_REPLACE_PKG|UPDATE_PERMISSIONS_REPLACE_ALL)
                            : 0));
            final VersionInfo ver = mSettings.getInternalVersion();
            int updateFlags = UPDATE_PERMISSIONS_ALL;
            if (ver.sdkVersion != mSdkVersion) {
                Slog.i(TAG, "Platform changed from " + ver.sdkVersion + " to "
                        + mSdkVersion + "; regranting permissions for internal storage");
                updateFlags |= UPDATE_PERMISSIONS_REPLACE_PKG | UPDATE_PERMISSIONS_REPLACE_ALL;
            }
            updatePermissionsLPw(null, null, updateFlags);
            ver.sdkVersion = mSdkVersion;
            // If this is the first boot, and it is a normal boot, then
            // we need to initialize the default preferred apps.
@@ -2261,20 +2267,22 @@ public class PackageManagerService extends IPackageManager.Stub {
            // If this is first boot after an OTA, and a normal boot, then
            // we need to clear code cache directories.
            mIsUpgrade = !Build.FINGERPRINT.equals(mSettings.mFingerprint);
            mIsUpgrade = !Build.FINGERPRINT.equals(ver.fingerprint);
            if (mIsUpgrade && !onlyCore) {
                Slog.i(TAG, "Build fingerprint changed; clearing code caches");
                for (int i = 0; i < mSettings.mPackages.size(); i++) {
                    final PackageSetting ps = mSettings.mPackages.valueAt(i);
                    if (Objects.equals(StorageManager.UUID_PRIVATE_INTERNAL, ps.volumeUuid)) {
                        deleteCodeCacheDirsLI(ps.volumeUuid, ps.name);
                    }
                mSettings.mFingerprint = Build.FINGERPRINT;
                }
                ver.fingerprint = Build.FINGERPRINT;
            }
            checkDefaultBrowser();
            // All the changes are done during package scanning.
            mSettings.updateInternalDatabaseVersion();
            ver.databaseVersion = Settings.CURRENT_DATABASE_VERSION;
            // can downgrade to reader
            mSettings.writeLPr();
@@ -3919,10 +3927,8 @@ public class PackageManagerService extends IPackageManager.Stub {
     * were updated, return true.
     */
    private boolean isCompatSignatureUpdateNeeded(PackageParser.Package scannedPkg) {
        return (isExternal(scannedPkg) && mSettings.isExternalDatabaseVersionOlderThan(
                DatabaseVersion.SIGNATURE_END_ENTITY))
                || (!isExternal(scannedPkg) && mSettings.isInternalDatabaseVersionOlderThan(
                        DatabaseVersion.SIGNATURE_END_ENTITY));
        final VersionInfo ver = getSettingsVersionForPackage(scannedPkg);
        return ver.databaseVersion < DatabaseVersion.SIGNATURE_END_ENTITY;
    }
    /**
@@ -3969,13 +3975,8 @@ public class PackageManagerService extends IPackageManager.Stub {
    }
    private boolean isRecoverSignatureUpdateNeeded(PackageParser.Package scannedPkg) {
        if (isExternal(scannedPkg)) {
            return mSettings.isExternalDatabaseVersionOlderThan(
                    DatabaseVersion.SIGNATURE_MALFORMED_RECOVER);
        } else {
            return mSettings.isInternalDatabaseVersionOlderThan(
                    DatabaseVersion.SIGNATURE_MALFORMED_RECOVER);
        }
        final VersionInfo ver = getSettingsVersionForPackage(scannedPkg);
        return ver.databaseVersion < DatabaseVersion.SIGNATURE_MALFORMED_RECOVER;
    }
    private int compareSignaturesRecover(PackageSignatures existingSigs,
@@ -12491,6 +12492,18 @@ public class PackageManagerService extends IPackageManager.Stub {
        return installFlags;
    }
    private VersionInfo getSettingsVersionForPackage(PackageParser.Package pkg) {
        if (isExternal(pkg)) {
            if (TextUtils.isEmpty(pkg.volumeUuid)) {
                return mSettings.getExternalVersion();
            } else {
                return mSettings.findOrCreateVersion(pkg.volumeUuid);
            }
        } else {
            return mSettings.getInternalVersion();
        }
    }
    private void deleteTempPackageFiles() {
        final FilenameFilter filter = new FilenameFilter() {
            public boolean accept(File dir, String name) {
@@ -14756,16 +14769,7 @@ public class PackageManagerService extends IPackageManager.Stub {
                    if (dumpState.onTitlePrinted())
                        pw.println();
                    pw.println("Database versions:");
                    pw.print("  SDK Version:");
                    pw.print(" internal=");
                    pw.print(mSettings.mInternalSdkPlatform);
                    pw.print(" external=");
                    pw.println(mSettings.mExternalSdkPlatform);
                    pw.print("  DB Version:");
                    pw.print(" internal=");
                    pw.print(mSettings.mInternalDatabaseVersion);
                    pw.print(" external=");
                    pw.println(mSettings.mExternalDatabaseVersion);
                    mSettings.dumpVersionLPr(new IndentingPrintWriter(pw, "  "));
                }
            }
@@ -15412,20 +15416,18 @@ public class PackageManagerService extends IPackageManager.Stub {
            // cases get permissions that the user didn't initially explicitly
            // allow... it would be nice to have some better way to handle
            // this situation.
            final boolean regrantPermissions = mSettings.mExternalSdkPlatform != mSdkVersion;
            if (regrantPermissions)
                Slog.i(TAG, "Platform changed from " + mSettings.mExternalSdkPlatform + " to "
                        + mSdkVersion + "; regranting permissions for external storage");
            mSettings.mExternalSdkPlatform = mSdkVersion;
            final VersionInfo ver = mSettings.getExternalVersion();
            // Make sure group IDs have been assigned, and any permission
            // changes in other apps are accounted for
            updatePermissionsLPw(null, null, UPDATE_PERMISSIONS_ALL
                    | (regrantPermissions
                            ? (UPDATE_PERMISSIONS_REPLACE_PKG|UPDATE_PERMISSIONS_REPLACE_ALL)
                            : 0));
            int updateFlags = UPDATE_PERMISSIONS_ALL;
            if (ver.sdkVersion != mSdkVersion) {
                logCriticalInfo(Log.INFO, "Platform changed from " + ver.sdkVersion + " to "
                        + mSdkVersion + "; regranting permissions for external");
                updateFlags |= UPDATE_PERMISSIONS_REPLACE_PKG | UPDATE_PERMISSIONS_REPLACE_ALL;
            }
            updatePermissionsLPw(null, null, updateFlags);
            mSettings.updateExternalDatabaseVersion();
            // Yay, everything is now upgraded
            ver.forceCurrent();
            // can downgrade to reader
            // Persist settings
@@ -15517,6 +15519,7 @@ public class PackageManagerService extends IPackageManager.Stub {
        final int parseFlags = mDefParseFlags | PackageParser.PARSE_EXTERNAL_STORAGE;
        synchronized (mInstallLock) {
        synchronized (mPackages) {
            final VersionInfo ver = mSettings.findOrCreateVersion(vol.fsUuid);
            final List<PackageSetting> packages = mSettings.getVolumePackagesLPr(vol.fsUuid);
            for (PackageSetting ps : packages) {
                final PackageParser.Package pkg;
@@ -15526,9 +15529,22 @@ public class PackageManagerService extends IPackageManager.Stub {
                } catch (PackageManagerException e) {
                    Slog.w(TAG, "Failed to scan " + ps.codePath + ": " + e.getMessage());
                }
                if (!Build.FINGERPRINT.equals(ver.fingerprint)) {
                    deleteCodeCacheDirsLI(ps.volumeUuid, ps.name);
                }
            }
            int updateFlags = UPDATE_PERMISSIONS_ALL;
            if (ver.sdkVersion != mSdkVersion) {
                logCriticalInfo(Log.INFO, "Platform changed from " + ver.sdkVersion + " to "
                        + mSdkVersion + "; regranting permissions for " + vol.fsUuid);
                updateFlags |= UPDATE_PERMISSIONS_REPLACE_PKG | UPDATE_PERMISSIONS_REPLACE_ALL;
            }
            updatePermissionsLPw(null, null, updateFlags);
            // TODO: regrant any permissions that changed based since original install
            // Yay, everything is now upgraded
            ver.forceCurrent();
            mSettings.writeLPr();
        }
+141 −101

File changed.

Preview size limit exceeded, changes collapsed.