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

Commit 6d141b0a authored by Suchi Amalapurapu's avatar Suchi Amalapurapu Committed by Android (Google) Code Review
Browse files

Merge "Fix persisting flags for apps with data only Force gc's before deleting containers.:"

parents f2526939 d32c8020
Loading
Loading
Loading
Loading
+30 −16
Original line number Diff line number Diff line
@@ -540,6 +540,7 @@ class PackageManagerService extends IPackageManager.Stub {
                    if (DEBUG_INSTALL) Log.v(TAG, "Handling post-install for " + msg.arg1);
                    PostInstallData data = mRunningInstalls.get(msg.arg1);
                    mRunningInstalls.delete(msg.arg1);
                    boolean deleteOld = false;

                    if (data != null) {
                        InstallArgs args = data.args;
@@ -563,13 +564,17 @@ class PackageManagerService extends IPackageManager.Stub {
                            }
                            if (res.removedInfo.args != null) {
                                // Remove the replaced package's older resources safely now
                                deleteOld = true;
                            }
                        }
                        // Force a gc to clear up things
                        Runtime.getRuntime().gc();
                        // We delete after a gc for applications  on sdcard.
                        if (deleteOld) {
                            synchronized (mInstallLock) {
                                res.removedInfo.args.doPostDeleteLI(true);
                            }
                        }
                        }
                        Runtime.getRuntime().gc();

                        if (args.observer != null) {
                            try {
                                args.observer.packageInstalled(res.name, res.returnCode);
@@ -1350,6 +1355,10 @@ class PackageManagerService extends IPackageManager.Stub {
            if(ps.pkg == null) {
                ps.pkg = new PackageParser.Package(packageName);
                ps.pkg.applicationInfo.packageName = packageName;
                ps.pkg.applicationInfo.flags = ps.pkgFlags;
                ps.pkg.applicationInfo.publicSourceDir = ps.resourcePathString;
                ps.pkg.applicationInfo.sourceDir = ps.codePathString;
                ps.pkg.applicationInfo.dataDir = getDataPathForPackage(ps.pkg).getPath();
            }
            return generatePackageInfo(ps.pkg, flags);
        }
@@ -2568,6 +2577,17 @@ class PackageManagerService extends IPackageManager.Stub {
        return true;
    }

    private File getDataPathForPackage(PackageParser.Package pkg) {
        boolean useEncryptedFSDir = useEncryptedFilesystemForPackage(pkg);
        File dataPath;
        if (useEncryptedFSDir) {
            dataPath = new File(mSecureAppDataDir, pkg.packageName);
        } else {
            dataPath = new File(mAppDataDir, pkg.packageName);
        }
        return dataPath;
    }
    
    private PackageParser.Package scanPackageLI(PackageParser.Package pkg,
            int parseFlags, int scanMode) {
        File scanFile = new File(pkg.mScanPath);
@@ -2932,11 +2952,7 @@ class PackageManagerService extends IPackageManager.Stub {
        } else {
            // This is a normal package, need to make its data directory.
            boolean useEncryptedFSDir = useEncryptedFilesystemForPackage(pkg);
            if (useEncryptedFSDir) {
                dataPath = new File(mSecureAppDataDir, pkgName);
            } else {
                dataPath = new File(mAppDataDir, pkgName);
            }
            dataPath = getDataPathForPackage(pkg);
            
            boolean uidError = false;
            
@@ -5159,14 +5175,9 @@ class PackageManagerService extends IPackageManager.Stub {
            int scanMode,
            String installerPackageName, PackageInstalledInfo res) {
        // Remember this for later, in case we need to rollback this install
        boolean dataDirExists;
        String pkgName = pkg.packageName;

        if (useEncryptedFilesystemForPackage(pkg)) {
            dataDirExists = (new File(mSecureAppDataDir, pkgName)).exists();
        } else {
            dataDirExists = (new File(mAppDataDir, pkgName)).exists();
        }
        boolean dataDirExists = getDataPathForPackage(pkg).exists();
        res.name = pkgName;
        synchronized(mPackages) {
            if (mPackages.containsKey(pkgName) || mAppDirs.containsKey(pkg.mPath)) {
@@ -5741,6 +5752,8 @@ class PackageManagerService extends IPackageManager.Stub {
                sendPackageBroadcast(Intent.ACTION_PACKAGE_REPLACED, packageName, extras);
            }
        }
        // Force a gc here.
        Runtime.getRuntime().gc();
        // Delete the resources here after sending the broadcast to let
        // other processes clean up before deleting resources.
        if (info.args != null) {
@@ -7136,7 +7149,8 @@ class PackageManagerService extends IPackageManager.Stub {
        void setFlags(int pkgFlags) {
            this.pkgFlags = (pkgFlags & ApplicationInfo.FLAG_SYSTEM) |
            (pkgFlags & ApplicationInfo.FLAG_FORWARD_LOCK) |
            (pkgFlags & ApplicationInfo.FLAG_ON_SDCARD);
            (pkgFlags & ApplicationInfo.FLAG_ON_SDCARD) |
            (pkgFlags & ApplicationInfo.FLAG_NEVER_ENCRYPT);
        }
    }