summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--services/core/java/android/content/pm/PackageManagerInternal.java9
-rw-r--r--services/core/java/com/android/server/pm/PackageManagerInternalBase.java2
-rw-r--r--services/core/java/com/android/server/pm/ProtectedPackages.java17
3 files changed, 19 insertions, 9 deletions
diff --git a/services/core/java/android/content/pm/PackageManagerInternal.java b/services/core/java/android/content/pm/PackageManagerInternal.java
index 5f5327da412f..f101e7364c31 100644
--- a/services/core/java/android/content/pm/PackageManagerInternal.java
+++ b/services/core/java/android/content/pm/PackageManagerInternal.java
@@ -375,10 +375,15 @@ public abstract class PackageManagerInternal {
int deviceOwnerUserId, String deviceOwner, SparseArray<String> profileOwners);
/**
- * Marks packages as protected for a given user or all users in case of USER_ALL.
+ * Marks packages as protected for a given user or all users in case of USER_ALL. Setting
+ * {@code packageNames} to {@code null} means unset all existing protected packages for the
+ * given user.
+ *
+ * <p> Note that setting it if set for a specific user, it takes precedence over the packages
+ * set globally using USER_ALL.
*/
public abstract void setOwnerProtectedPackages(
- @UserIdInt int userId, @NonNull List<String> packageNames);
+ @UserIdInt int userId, @Nullable List<String> packageNames);
/**
* Returns {@code true} if a given package can't be wiped. Otherwise, returns {@code false}.
diff --git a/services/core/java/com/android/server/pm/PackageManagerInternalBase.java b/services/core/java/com/android/server/pm/PackageManagerInternalBase.java
index cc9c1e0ac179..fb47c8aabbf3 100644
--- a/services/core/java/com/android/server/pm/PackageManagerInternalBase.java
+++ b/services/core/java/com/android/server/pm/PackageManagerInternalBase.java
@@ -354,7 +354,7 @@ abstract class PackageManagerInternalBase extends PackageManagerInternal {
@Override
@Deprecated
public final void setOwnerProtectedPackages(
- @UserIdInt int userId, @NonNull List<String> packageNames) {
+ @UserIdInt int userId, @Nullable List<String> packageNames) {
getProtectedPackages().setOwnerProtectedPackages(userId, packageNames);
}
diff --git a/services/core/java/com/android/server/pm/ProtectedPackages.java b/services/core/java/com/android/server/pm/ProtectedPackages.java
index e9239889973a..98533725371f 100644
--- a/services/core/java/com/android/server/pm/ProtectedPackages.java
+++ b/services/core/java/com/android/server/pm/ProtectedPackages.java
@@ -16,7 +16,6 @@
package com.android.server.pm;
-import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.UserIdInt;
import android.content.Context;
@@ -81,8 +80,8 @@ public class ProtectedPackages {
/** Sets packages protected by a device or profile owner. */
public synchronized void setOwnerProtectedPackages(
- @UserIdInt int userId, @NonNull List<String> packageNames) {
- if (packageNames.isEmpty()) {
+ @UserIdInt int userId, @Nullable List<String> packageNames) {
+ if (packageNames == null) {
mOwnerProtectedPackages.remove(userId);
} else {
mOwnerProtectedPackages.put(userId, new ArraySet<>(packageNames));
@@ -134,15 +133,21 @@ public class ProtectedPackages {
*/
private synchronized boolean isOwnerProtectedPackage(
@UserIdInt int userId, String packageName) {
- return isPackageProtectedForUser(UserHandle.USER_ALL, packageName)
- || isPackageProtectedForUser(userId, packageName);
+ return hasProtectedPackages(userId)
+ ? isPackageProtectedForUser(userId, packageName)
+ : isPackageProtectedForUser(UserHandle.USER_ALL, packageName);
}
- private synchronized boolean isPackageProtectedForUser(int userId, String packageName) {
+ private synchronized boolean isPackageProtectedForUser(
+ @UserIdInt int userId, String packageName) {
int userIdx = mOwnerProtectedPackages.indexOfKey(userId);
return userIdx >= 0 && mOwnerProtectedPackages.valueAt(userIdx).contains(packageName);
}
+ private synchronized boolean hasProtectedPackages(@UserIdInt int userId) {
+ return mOwnerProtectedPackages.indexOfKey(userId) >= 0;
+ }
+
/**
* Returns {@code true} if a given package's state is protected. Otherwise, returns
* {@code false}.