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

Commit 958fbb9c authored by Suprabh Shukla's avatar Suprabh Shukla Committed by android-build-team Robot
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
(cherry picked from commit 4d74d50f)
parent 2dafb1bf
Loading
Loading
Loading
Loading
+8 −8
Original line number Diff line number Diff line
@@ -14178,7 +14178,7 @@ public class PackageManagerService extends IPackageManager.Stub
                        unactionedPackages.add(packageName);
                        continue;
                    }
                    if (!canSuspendPackageForUserLocked(packageName, userId)) {
                    if (suspended && !canSuspendPackageForUserLocked(packageName, userId)) {
                        unactionedPackages.add(packageName);
                        continue;
                    }
@@ -14333,44 +14333,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;
        }