diff options
author | Suprabh Shukla <suprabh@google.com> | 2022-03-10 18:28:23 -0800 |
---|---|---|
committer | Suprabh Shukla <suprabh@google.com> | 2022-03-16 22:43:21 +0000 |
commit | da731460df73896d263ab85b17029a39b01be483 (patch) | |
tree | e3aa94ad1110f8978f487ad45c0dcb5a1c7e60dc | |
parent | 5cbb4d7d27d0e23643c3350d80b176ce2cbdba0d (diff) |
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)
-rw-r--r-- | apex/jobscheduler/service/java/com/android/server/alarm/AlarmManagerService.java | 6 | ||||
-rw-r--r-- | services/tests/mockingservicestests/src/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<AlarmManagerService.UninstallReceiver> 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()); |