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
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user