diff options
| author | 2018-04-13 07:37:25 +0000 | |
|---|---|---|
| committer | 2018-04-13 07:37:25 +0000 | |
| commit | df88614db2c408a45518bd51a28705b542525c73 (patch) | |
| tree | b08d7e6dd50226fafdb40808f50219ba330fe60e | |
| parent | 2bc6f2e46afbeca482f5fa4ea3ef43f7f7dd6e8f (diff) | |
| parent | f81bf7fa7582f55a31435f37e02de5c03014cc19 (diff) | |
Merge "Silently ignore force stop API for protected packages" into pi-dev
3 files changed, 18 insertions, 0 deletions
diff --git a/core/java/android/content/pm/PackageManagerInternal.java b/core/java/android/content/pm/PackageManagerInternal.java index a9d0911065f5..0c5f228782ae 100644 --- a/core/java/android/content/pm/PackageManagerInternal.java +++ b/core/java/android/content/pm/PackageManagerInternal.java @@ -302,6 +302,12 @@ public abstract class PackageManagerInternal { public abstract boolean isPackageDataProtected(int userId, String packageName); /** + * Returns {@code true} if a given package's state is protected, e.g. it cannot be force + * stopped, suspended, disabled or hidden. Otherwise, returns {@code false}. + */ + public abstract boolean isPackageStateProtected(String packageName, int userId); + + /** * Returns {@code true} if a given package is installed as ephemeral. Otherwise, returns * {@code false}. */ diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java index 47284cba8c3d..f620c77d779a 100644 --- a/services/core/java/com/android/server/am/ActivityManagerService.java +++ b/services/core/java/com/android/server/am/ActivityManagerService.java @@ -6771,6 +6771,13 @@ public class ActivityManagerService extends IActivityManager.Stub int[] users = userId == UserHandle.USER_ALL ? mUserController.getUsers() : new int[] { userId }; for (int user : users) { + if (getPackageManagerInternalLocked().isPackageStateProtected( + packageName, user)) { + Slog.w(TAG, "Ignoring request to force stop protected package " + + packageName + " u" + user); + return; + } + int pkgUid = -1; try { pkgUid = pm.getPackageUid(packageName, MATCH_DEBUG_TRIAGED_MISSING, diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java index a0476041787a..57c2b75a0f4b 100644 --- a/services/core/java/com/android/server/pm/PackageManagerService.java +++ b/services/core/java/com/android/server/pm/PackageManagerService.java @@ -23856,6 +23856,11 @@ Slog.v(TAG, ":: stepped forward, applying functor at tag " + parser.getName()); } @Override + public boolean isPackageStateProtected(String packageName, int userId) { + return mProtectedPackages.isPackageStateProtected(userId, packageName); + } + + @Override public boolean isPackageEphemeral(int userId, String packageName) { synchronized (mPackages) { final PackageSetting ps = mSettings.mPackages.get(packageName); |