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

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

Merge "[archive] optimize clearArchiveState a bit" into main

parents 8228f759 fa3975ab
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -701,7 +701,7 @@ final class InstallPackageHelper {
                    pkgSetting.setUninstallReason(PackageManager.UNINSTALL_REASON_UNKNOWN, userId);
                    pkgSetting.setFirstInstallTime(System.currentTimeMillis(), userId);
                    // Clear any existing archive state.
                    mPm.mInstallerService.mPackageArchiver.clearArchiveState(packageName, userId);
                    mPm.mInstallerService.mPackageArchiver.clearArchiveState(pkgSetting, userId);
                    mPm.mSettings.writePackageRestrictionsLPr(userId);
                    mPm.mSettings.writeKernelMappingLPr(pkgSetting);
                    installed = true;
@@ -2327,7 +2327,7 @@ final class InstallPackageHelper {
                                installerPackageName);
                    }
                    // Clear any existing archive state.
                    mPm.mInstallerService.mPackageArchiver.clearArchiveState(pkgName, userId);
                    mPm.mInstallerService.mPackageArchiver.clearArchiveState(ps, userId);
                } else if (allUsers != null) {
                    // The caller explicitly specified INSTALL_ALL_USERS flag.
                    // Thus, updating the settings to install the app for all users.
@@ -2351,7 +2351,7 @@ final class InstallPackageHelper {
                                        installerPackageName);
                            }
                            // Clear any existing archive state.
                            mPm.mInstallerService.mPackageArchiver.clearArchiveState(pkgName,
                            mPm.mInstallerService.mPackageArchiver.clearArchiveState(ps,
                                    currentUserId);
                        } else {
                            ps.setInstalled(false, currentUserId);
+20 −5
Original line number Diff line number Diff line
@@ -356,19 +356,34 @@ public class PackageArchiver {
    }

    void clearArchiveState(String packageName, int userId) {
        final PackageSetting ps;
        synchronized (mPm.mLock) {
            PackageSetting ps = mPm.mSettings.getPackageLPr(packageName);
            if (ps != null) {
                ps.setArchiveState(/* archiveState= */ null, userId);
            ps = mPm.mSettings.getPackageLPr(packageName);
        }
        clearArchiveState(ps, userId);
    }
        File iconsDir = getIconsDir(packageName, userId);

    void clearArchiveState(PackageSetting ps, int userId) {
        synchronized (mPm.mLock) {
            if (ps == null || ps.getUserStateOrDefault(userId).getArchiveState() == null) {
                // No archive states to clear
                return;
            }
            if (DEBUG) {
                Slog.e(TAG, "Clearing archive states for " + ps.getPackageName());
            }
            ps.setArchiveState(/* archiveState= */ null, userId);
        }
        File iconsDir = getIconsDir(ps.getPackageName(), userId);
        if (!iconsDir.exists()) {
            if (DEBUG) {
                Slog.e(TAG, "Icons are already deleted at " + iconsDir.getAbsolutePath());
            }
            return;
        }
        // TODO(b/319238030) Move this into installd.
        if (!FileUtils.deleteContentsAndDir(iconsDir)) {
            Slog.e(TAG, "Failed to clean up archive files for " + packageName);
            Slog.e(TAG, "Failed to clean up archive files for " + ps.getPackageName());
        } else {
            if (DEBUG) {
                Slog.e(TAG, "Deleted icons at " + iconsDir.getAbsolutePath());