From 58c458df25768ce950812705220f91af6db81942 Mon Sep 17 00:00:00 2001 From: Sergey Nikolaienkov Date: Fri, 26 Nov 2021 13:38:55 +0100 Subject: [PATCH] Clear CDM associations onPackageDataCleared Bug: 205926405 Test: atest CtsCompanionDevicesTestCases:AssociationsCleanUpTest Change-Id: I17a5e94784136ad0406f0450ba6ef40ca99467f6 --- .../CompanionDeviceManagerService.java | 38 ++++++++++++------- 1 file changed, 24 insertions(+), 14 deletions(-) diff --git a/services/companion/java/com/android/server/companion/CompanionDeviceManagerService.java b/services/companion/java/com/android/server/companion/CompanionDeviceManagerService.java index 316807c85547c..f8be1656b3eed 100644 --- a/services/companion/java/com/android/server/companion/CompanionDeviceManagerService.java +++ b/services/companion/java/com/android/server/companion/CompanionDeviceManagerService.java @@ -225,26 +225,28 @@ public class CompanionDeviceManagerService extends SystemService { new PackageMonitor() { @Override public void onPackageRemoved(String packageName, int uid) { - Slog.d(LOG_TAG, "onPackageRemoved(packageName = " + packageName - + ", uid = " + uid + ")"); - int userId = getChangingUserId(); - updateAssociations( - set -> filterOut(set, it -> it.belongsToPackage(userId, packageName)), - userId); + final int userId = getChangingUserId(); + Slog.i(LOG_TAG, "onPackageRemoved() u" + userId + "/" + packageName); - mCompanionDevicePresenceController.unbindDevicePresenceListener( - packageName, userId); + clearAssociationForPackage(userId, packageName); + } + + @Override + public void onPackageDataCleared(String packageName, int uid) { + final int userId = getChangingUserId(); + Slog.i(LOG_TAG, "onPackageDataCleared() u" + userId + "/" + packageName); + + clearAssociationForPackage(userId, packageName); } @Override public void onPackageModified(String packageName) { - Slog.d(LOG_TAG, "onPackageModified(packageName = " + packageName + ")"); - int userId = getChangingUserId(); - forEach(getAssociations(userId, packageName), association -> { - updateSpecialAccessPermissionForAssociatedPackage(association); - }); - } + final int userId = getChangingUserId(); + Slog.i(LOG_TAG, "onPackageModified() u" + userId + "/" + packageName); + forEach(getAssociations(userId, packageName), association -> + updateSpecialAccessPermissionForAssociatedPackage(association)); + } }.register(getContext(), FgThread.get().getLooper(), UserHandle.ALL, true); } @@ -742,6 +744,14 @@ public class CompanionDeviceManagerService extends SystemService { restartBleScan(); } + void clearAssociationForPackage(@UserIdInt int userId, @NonNull String packageName) { + if (DEBUG) Slog.d(LOG_TAG, "clearAssociationForPackage() u" + userId + "/" + packageName); + + mCompanionDevicePresenceController.unbindDevicePresenceListener(packageName, userId); + updateAssociations(set -> filterOut(set, it -> it.belongsToPackage(userId, packageName)), + userId); + } + private void markIdAsPreviouslyUsedForPackage( int associationId, @UserIdInt int userId, @NonNull String packageName) { synchronized (mLock) {