From da731460df73896d263ab85b17029a39b01be483 Mon Sep 17 00:00:00 2001 From: Suprabh Shukla Date: Thu, 10 Mar 2022 18:28:23 -0800 Subject: [PATCH] Listening to package broadcast on all users When a package is added or removed on a secondary user, the broadcast was not being processed, leading to inconsistent state, like lingering defunt alarms and stale exact alarm candidates. Test: atest FrameworksMockingServicesTests:com.android.server.alarm Bug: 218868406 Change-Id: I1f1b9a5b8f63d6564c9e121bee7d6d6d697b471d Merged-In: I1f1b9a5b8f63d6564c9e121bee7d6d6d697b471d (cherry picked from commit 6c9df302ae6c34a22167b92a331ec0e80fc280f2) --- .../java/com/android/server/alarm/AlarmManagerService.java | 6 ++++-- .../com/android/server/alarm/AlarmManagerServiceTest.java | 4 ++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/apex/jobscheduler/service/java/com/android/server/alarm/AlarmManagerService.java b/apex/jobscheduler/service/java/com/android/server/alarm/AlarmManagerService.java index 95728081bdb9..c9b33aa4dafc 100644 --- a/apex/jobscheduler/service/java/com/android/server/alarm/AlarmManagerService.java +++ b/apex/jobscheduler/service/java/com/android/server/alarm/AlarmManagerService.java @@ -4534,13 +4534,15 @@ public class AlarmManagerService extends SystemService { filter.addAction(Intent.ACTION_PACKAGE_RESTARTED); filter.addAction(Intent.ACTION_QUERY_PACKAGE_RESTART); filter.addDataScheme(IntentFilter.SCHEME_PACKAGE); - getContext().registerReceiver(this, filter); + getContext().registerReceiverForAllUsers(this, filter, + /* broadcastPermission */ null, /* scheduler */ null); // Register for events related to sdcard installation. IntentFilter sdFilter = new IntentFilter(); sdFilter.addAction(Intent.ACTION_EXTERNAL_APPLICATIONS_UNAVAILABLE); sdFilter.addAction(Intent.ACTION_USER_STOPPED); sdFilter.addAction(Intent.ACTION_UID_REMOVED); - getContext().registerReceiver(this, sdFilter); + getContext().registerReceiverForAllUsers(this, sdFilter, + /* broadcastPermission */ null, /* scheduler */ null); } @Override diff --git a/services/tests/mockingservicestests/src/com/android/server/alarm/AlarmManagerServiceTest.java b/services/tests/mockingservicestests/src/com/android/server/alarm/AlarmManagerServiceTest.java index 16afef57d31e..32d9247216c4 100644 --- a/services/tests/mockingservicestests/src/com/android/server/alarm/AlarmManagerServiceTest.java +++ b/services/tests/mockingservicestests/src/com/android/server/alarm/AlarmManagerServiceTest.java @@ -462,9 +462,9 @@ public class AlarmManagerServiceTest { final ArgumentCaptor packageReceiverCaptor = ArgumentCaptor.forClass(AlarmManagerService.UninstallReceiver.class); - verify(mMockContext).registerReceiver(packageReceiverCaptor.capture(), + verify(mMockContext).registerReceiverForAllUsers(packageReceiverCaptor.capture(), argThat((filter) -> filter.hasAction(Intent.ACTION_PACKAGE_ADDED) - && filter.hasAction(Intent.ACTION_PACKAGE_REMOVED))); + && filter.hasAction(Intent.ACTION_PACKAGE_REMOVED)), isNull(), isNull()); mPackageChangesReceiver = packageReceiverCaptor.getValue(); assertEquals(mService.mExactAlarmCandidates, Collections.emptySet());