From f048a059c4b7ed8342bfd327f8bf8ac98ca51240 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 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 6847b70839670..11e2f6cfbe06e 100644 --- a/services/core/java/com/android/server/pm/SuspendPackageHelper.java +++ b/services/core/java/com/android/server/pm/SuspendPackageHelper.java @@ -157,9 +157,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()));