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_PACKAGE_RESTARTED);
|
||||||
filter.addAction(Intent.ACTION_QUERY_PACKAGE_RESTART);
|
filter.addAction(Intent.ACTION_QUERY_PACKAGE_RESTART);
|
||||||
filter.addDataScheme(IntentFilter.SCHEME_PACKAGE);
|
filter.addDataScheme(IntentFilter.SCHEME_PACKAGE);
|
||||||
getContext().registerReceiver(this, filter);
|
getContext().registerReceiverForAllUsers(this, filter,
|
||||||
|
/* broadcastPermission */ null, /* scheduler */ null);
|
||||||
// Register for events related to sdcard installation.
|
// Register for events related to sdcard installation.
|
||||||
IntentFilter sdFilter = new IntentFilter();
|
IntentFilter sdFilter = new IntentFilter();
|
||||||
sdFilter.addAction(Intent.ACTION_EXTERNAL_APPLICATIONS_UNAVAILABLE);
|
sdFilter.addAction(Intent.ACTION_EXTERNAL_APPLICATIONS_UNAVAILABLE);
|
||||||
sdFilter.addAction(Intent.ACTION_USER_STOPPED);
|
sdFilter.addAction(Intent.ACTION_USER_STOPPED);
|
||||||
sdFilter.addAction(Intent.ACTION_UID_REMOVED);
|
sdFilter.addAction(Intent.ACTION_UID_REMOVED);
|
||||||
getContext().registerReceiver(this, sdFilter);
|
getContext().registerReceiverForAllUsers(this, sdFilter,
|
||||||
|
/* broadcastPermission */ null, /* scheduler */ null);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -462,9 +462,9 @@ public class AlarmManagerServiceTest {
|
|||||||
|
|
||||||
final ArgumentCaptor<AlarmManagerService.UninstallReceiver> packageReceiverCaptor =
|
final ArgumentCaptor<AlarmManagerService.UninstallReceiver> packageReceiverCaptor =
|
||||||
ArgumentCaptor.forClass(AlarmManagerService.UninstallReceiver.class);
|
ArgumentCaptor.forClass(AlarmManagerService.UninstallReceiver.class);
|
||||||
verify(mMockContext).registerReceiver(packageReceiverCaptor.capture(),
|
verify(mMockContext).registerReceiverForAllUsers(packageReceiverCaptor.capture(),
|
||||||
argThat((filter) -> filter.hasAction(Intent.ACTION_PACKAGE_ADDED)
|
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();
|
mPackageChangesReceiver = packageReceiverCaptor.getValue();
|
||||||
|
|
||||||
assertEquals(mService.mExactAlarmCandidates, Collections.emptySet());
|
assertEquals(mService.mExactAlarmCandidates, Collections.emptySet());
|
||||||
|
|||||||
Reference in New Issue
Block a user