diff options
| -rw-r--r-- | apex/jobscheduler/service/java/com/android/server/alarm/AlarmManagerService.java | 9 | ||||
| -rw-r--r-- | services/tests/mockingservicestests/src/com/android/server/alarm/AlarmManagerServiceTest.java | 26 |
2 files changed, 29 insertions, 6 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 2533a0f47ee6..c319ea1d333a 100644 --- a/apex/jobscheduler/service/java/com/android/server/alarm/AlarmManagerService.java +++ b/apex/jobscheduler/service/java/com/android/server/alarm/AlarmManagerService.java @@ -1933,8 +1933,9 @@ public class AlarmManagerService extends SystemService { Intent.FLAG_RECEIVER_REGISTERED_ONLY | Intent.FLAG_RECEIVER_FOREGROUND | Intent.FLAG_RECEIVER_VISIBLE_TO_INSTANT_APPS); - mTimeTickOptions = BroadcastOptions - .makeRemovingMatchingFilter(new IntentFilter(Intent.ACTION_TIME_TICK)) + mTimeTickOptions = BroadcastOptions.makeBasic() + .setDeliveryGroupPolicy(BroadcastOptions.DELIVERY_GROUP_POLICY_MOST_RECENT) + .setDeferUntilActive(true) .toBundle(); mTimeTickTrigger = new IAlarmListener.Stub() { @Override @@ -4252,8 +4253,8 @@ public class AlarmManagerService extends SystemService { } } // And send a TIME_TICK right now, since it is important to get the UI updated. - mHandler.post(() -> - getContext().sendBroadcastAsUser(mTimeTickIntent, UserHandle.ALL)); + mHandler.post(() -> getContext().sendBroadcastAsUser(mTimeTickIntent, + UserHandle.ALL, null, mTimeTickOptions)); } else { mNonInteractiveStartTime = nowELAPSED; } 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 57c5a6efa099..47271c78f7b5 100644 --- a/services/tests/mockingservicestests/src/com/android/server/alarm/AlarmManagerServiceTest.java +++ b/services/tests/mockingservicestests/src/com/android/server/alarm/AlarmManagerServiceTest.java @@ -112,7 +112,6 @@ import static org.mockito.Mockito.atLeastOnce; import static org.mockito.Mockito.never; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verifyZeroInteractions; -import static org.mockito.Mockito.when; import android.Manifest; import android.app.ActivityManager; @@ -1264,7 +1263,30 @@ public class AlarmManagerServiceTest { mService.interactiveStateChangedLocked(false); mService.interactiveStateChangedLocked(true); runnableCaptor.getValue().run(); - verify(mMockContext).sendBroadcastAsUser(mService.mTimeTickIntent, UserHandle.ALL); + final ArgumentCaptor<Bundle> optionsCaptor = ArgumentCaptor.forClass(Bundle.class); + verify(mMockContext).sendBroadcastAsUser(eq(mService.mTimeTickIntent), eq(UserHandle.ALL), + isNull(), optionsCaptor.capture()); + verifyTimeTickBroadcastOptions(optionsCaptor.getValue()); + } + + @Test + public void sendsTimeTickOnAlarmTrigger() throws Exception { + final ArgumentCaptor<Runnable> runnableCaptor = ArgumentCaptor.forClass(Runnable.class); + // Stubbing so the handler doesn't actually run the runnable. + doReturn(true).when(mService.mHandler).post(runnableCaptor.capture()); + mService.mTimeTickTrigger.doAlarm(mock(IAlarmCompleteListener.class)); + runnableCaptor.getValue().run(); + final ArgumentCaptor<Bundle> optionsCaptor = ArgumentCaptor.forClass(Bundle.class); + verify(mMockContext).sendBroadcastAsUser(eq(mService.mTimeTickIntent), eq(UserHandle.ALL), + isNull(), optionsCaptor.capture()); + verifyTimeTickBroadcastOptions(optionsCaptor.getValue()); + } + + private void verifyTimeTickBroadcastOptions(Bundle actualOptionsBundle) { + final BroadcastOptions actualOptions = new BroadcastOptions(actualOptionsBundle); + assertEquals(BroadcastOptions.DELIVERY_GROUP_POLICY_MOST_RECENT, + actualOptions.getDeliveryGroupPolicy()); + assertTrue(actualOptions.isDeferUntilActive()); } @Test |