From d161411c4450334b6af1475448798bcaf1ecaa36 Mon Sep 17 00:00:00 2001 From: Winson Date: Fri, 9 Sep 2022 15:32:36 -0700 Subject: [PATCH] Check if caller is suspending package before unsuspended broadcast The code falsely assumed the caller unsuspending a package was the one previously suspending it. This checks that the caller actually is the only suspending package in the map. Also adjusts some test callback infrastructure to make it easier to use and read. Bug: 232319688 Merged-In: Ie06df12ff3da6cf209fb3149e6aa80b0e63ce56e Change-Id: Ie06df12ff3da6cf209fb3149e6aa80b0e63ce56e --- .../java/com/android/server/pm/SuspendPackageHelper.java | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/services/core/java/com/android/server/pm/SuspendPackageHelper.java b/services/core/java/com/android/server/pm/SuspendPackageHelper.java index 908b12e1752dd..7ad4d226d8013 100644 --- a/services/core/java/com/android/server/pm/SuspendPackageHelper.java +++ b/services/core/java/com/android/server/pm/SuspendPackageHelper.java @@ -160,9 +160,11 @@ public final class SuspendPackageHelper { } } - // If size one, the package will be unsuspended from this call - boolean packageUnsuspended = - !suspended && CollectionUtils.size(suspendParamsMap) <= 1; + // If only the callingPackage is suspending this package, + // it will be unsuspended when this change is committed + boolean packageUnsuspended = !suspended + && CollectionUtils.size(suspendParamsMap) == 1 + && suspendParamsMap.containsKey(callingPackage); if (suspended || packageUnsuspended) { changedPackagesList.add(packageName); changedUids.add(UserHandle.getUid(userId, packageState.getAppId()));