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

Commit 4d74d50f authored by Suprabh Shukla's avatar Suprabh Shukla
Browse files

Allow unsuspending critical packages

PackageManager prevents certain packages from being suspended to ensure
device is in a sane state. It should not disallow unsuspening these
packages for the same reason.

Test: Existing tests:
atest FrameworksServicesTests:SuspendPackagesTest
Manually, changed the default dialer, then
adb shell pm suspend com.android.dialer
change the default dialer to com.android.dialer, then
adb shell pm unsuspend com.android.dialer
should succeeed.

Bug: 79846500
Change-Id: Ie198f61bf3b092e497f978e60a27f9d52cdda9c7
parent 0b9a87c6
Loading
Loading
Loading
Loading
+8 −8
Original line number Diff line number Diff line
@@ -14207,7 +14207,7 @@ public class PackageManagerService extends IPackageManager.Stub
                        unactionedPackages.add(packageName);
                        continue;
                    }
                    if (!canSuspendPackageForUserLocked(packageName, userId)) {
                    if (suspended && !canSuspendPackageForUserLocked(packageName, userId)) {
                        unactionedPackages.add(packageName);
                        continue;
                    }
@@ -14362,44 +14362,44 @@ public class PackageManagerService extends IPackageManager.Stub
    @GuardedBy("mPackages")
    private boolean canSuspendPackageForUserLocked(String packageName, int userId) {
        if (isPackageDeviceAdmin(packageName, userId)) {
            Slog.w(TAG, "Cannot suspend/un-suspend package \"" + packageName
            Slog.w(TAG, "Cannot suspend package \"" + packageName
                    + "\": has an active device admin");
            return false;
        }
        String activeLauncherPackageName = getActiveLauncherPackageName(userId);
        if (packageName.equals(activeLauncherPackageName)) {
            Slog.w(TAG, "Cannot suspend/un-suspend package \"" + packageName
            Slog.w(TAG, "Cannot suspend package \"" + packageName
                    + "\": contains the active launcher");
            return false;
        }
        if (packageName.equals(mRequiredInstallerPackage)) {
            Slog.w(TAG, "Cannot suspend/un-suspend package \"" + packageName
            Slog.w(TAG, "Cannot suspend package \"" + packageName
                    + "\": required for package installation");
            return false;
        }
        if (packageName.equals(mRequiredUninstallerPackage)) {
            Slog.w(TAG, "Cannot suspend/un-suspend package \"" + packageName
            Slog.w(TAG, "Cannot suspend package \"" + packageName
                    + "\": required for package uninstallation");
            return false;
        }
        if (packageName.equals(mRequiredVerifierPackage)) {
            Slog.w(TAG, "Cannot suspend/un-suspend package \"" + packageName
            Slog.w(TAG, "Cannot suspend package \"" + packageName
                    + "\": required for package verification");
            return false;
        }
        if (packageName.equals(getDefaultDialerPackageName(userId))) {
            Slog.w(TAG, "Cannot suspend/un-suspend package \"" + packageName
            Slog.w(TAG, "Cannot suspend package \"" + packageName
                    + "\": is the default dialer");
            return false;
        }
        if (mProtectedPackages.isPackageStateProtected(userId, packageName)) {
            Slog.w(TAG, "Cannot suspend/un-suspend package \"" + packageName
            Slog.w(TAG, "Cannot suspend package \"" + packageName
                    + "\": protected package");
            return false;
        }