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

Commit 87b5d7b2 authored by Kenny Root's avatar Kenny Root
Browse files

Check system app before removal

Mae sure we check to see whether an app is really deleted or just
skipped.

Bug: 6494869
Change-Id: I918f16e4ccda87f7f6f67855c7a7aef435c64e20
parent 728e4394
Loading
Loading
Loading
Loading
+25 −7
Original line number Diff line number Diff line
@@ -1064,7 +1064,7 @@ public class PackageManagerService extends IPackageManager.Stub {
            mInstaller.moveFiles();

            // Prune any system packages that no longer exist.
            final List<String> possiblyDeletedSystemApps = new ArrayList<String>();
            final List<String> possiblyDeletedUpdatedSystemApps = new ArrayList<String>();
            if (!mOnlyCore) {
                Iterator<PackageSetting> psit = mSettings.mPackages.values().iterator();
                while (psit.hasNext()) {
@@ -1104,7 +1104,10 @@ public class PackageManagerService extends IPackageManager.Stub {
                        mInstaller.remove(ps.name, 0);
                        sUserManager.removePackageForAllUsers(ps.name);
                    } else {
                        possiblyDeletedSystemApps.add(ps.name);
                        final PackageSetting disabledPs = mSettings.getDisabledSystemPkgLPr(ps.name);
                        if (disabledPs.codePath == null || !disabledPs.codePath.exists()) {
                            possiblyDeletedUpdatedSystemApps.add(ps.name);
                        }
                    }
                }
            }
@@ -1135,18 +1138,33 @@ public class PackageManagerService extends IPackageManager.Stub {
                        scanMode, 0);

                /**
                 * Remove disable package settings for any system apps
                 * that were removed via an OTA.
                 * Remove disable package settings for any updated system
                 * apps that were removed via an OTA. If they're not a
                 * previously-updated app, remove them completely.
                 * Otherwise, just revoke their system-level permissions.
                 */
                for (String deletedAppName : possiblyDeletedSystemApps) {
                for (String deletedAppName : possiblyDeletedUpdatedSystemApps) {
                    PackageParser.Package deletedPkg = mPackages.get(deletedAppName);
                    if (deletedPkg != null) {
                    mSettings.removeDisabledSystemPackageLPw(deletedAppName);

                    String msg;
                    if (deletedPkg == null) {
                        msg = "Updated system package " + deletedAppName
                                + " no longer exists; wiping its data";

                        mInstaller.remove(deletedAppName, 0);
                        sUserManager.removePackageForAllUsers(deletedAppName);
                    } else {
                        msg = "Updated system app + " + deletedAppName
                                + " no longer present; removing system privileges for "
                                + deletedAppName;

                        deletedPkg.applicationInfo.flags &= ~ApplicationInfo.FLAG_SYSTEM;

                        PackageSetting deletedPs = mSettings.mPackages.get(deletedAppName);
                        deletedPs.pkgFlags &= ~ApplicationInfo.FLAG_SYSTEM;
                    }
                    reportSettingsProblem(Log.WARN, msg);
                }
            } else {
                mAppInstallObserver = null;