summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--apex/jobscheduler/service/java/com/android/server/alarm/AlarmManagerService.java9
-rw-r--r--services/tests/mockingservicestests/src/com/android/server/alarm/AlarmManagerServiceTest.java26
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