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 6c9df302ae)
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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());
|
||||
|
||||
Reference in New Issue
Block a user