Loading services/core/java/com/android/server/utils/AlarmQueue.java +5 −1 Original line number Diff line number Diff line Loading @@ -34,6 +34,7 @@ import android.util.Slog; import com.android.internal.annotations.GuardedBy; import com.android.internal.annotations.VisibleForTesting; import java.util.Comparator; import java.util.PriorityQueue; import java.util.function.Predicate; Loading @@ -58,8 +59,11 @@ public abstract class AlarmQueue<K> implements AlarmManager.OnAlarmListener { * The pair is the key and its associated alarm time (in the elapsed realtime timebase). */ private static class AlarmPriorityQueue<Q> extends PriorityQueue<Pair<Q, Long>> { private static final Comparator<Pair<?, Long>> sTimeComparator = (o1, o2) -> Long.compare(o1.second, o2.second); AlarmPriorityQueue() { super(1, (o1, o2) -> (int) (o1.second - o2.second)); super(1, sTimeComparator); } /** Loading services/tests/mockingservicestests/src/com/android/server/utils/AlarmQueueTest.java +21 −0 Original line number Diff line number Diff line Loading @@ -155,6 +155,27 @@ public class AlarmQueueTest { anyInt(), eq(nowElapsed + HOUR_IN_MILLIS), eq(ALARM_TAG), any(), any()); } @Test public void testAddingLargeAlarmTimes() { final AlarmQueue<String> alarmQueue = createAlarmQueue(true, 0); final long nowElapsed = mInjector.getElapsedRealtime(); InOrder inOrder = inOrder(mAlarmManager); alarmQueue.addAlarm("com.android.test.1", Long.MAX_VALUE - 5); inOrder.verify(mAlarmManager, timeout(1000).times(1)) .setExact(anyInt(), eq(Long.MAX_VALUE - 5), eq(ALARM_TAG), any(), any()); alarmQueue.addAlarm("com.android.test.2", Long.MAX_VALUE - 4); inOrder.verify(mAlarmManager, never()) .setExact(anyInt(), anyLong(), eq(ALARM_TAG), any(), any()); alarmQueue.addAlarm("com.android.test.3", nowElapsed + 5); inOrder.verify(mAlarmManager, timeout(1000).times(1)) .setExact(anyInt(), eq(nowElapsed + 5), eq(ALARM_TAG), any(), any()); alarmQueue.addAlarm("com.android.test.4", nowElapsed + 6); inOrder.verify(mAlarmManager, never()) .setExact(anyInt(), anyLong(), eq(ALARM_TAG), any(), any()); } /** * Verify that updating the alarm time for a key will result in the AlarmManager alarm changing, * if needed. Loading Loading
services/core/java/com/android/server/utils/AlarmQueue.java +5 −1 Original line number Diff line number Diff line Loading @@ -34,6 +34,7 @@ import android.util.Slog; import com.android.internal.annotations.GuardedBy; import com.android.internal.annotations.VisibleForTesting; import java.util.Comparator; import java.util.PriorityQueue; import java.util.function.Predicate; Loading @@ -58,8 +59,11 @@ public abstract class AlarmQueue<K> implements AlarmManager.OnAlarmListener { * The pair is the key and its associated alarm time (in the elapsed realtime timebase). */ private static class AlarmPriorityQueue<Q> extends PriorityQueue<Pair<Q, Long>> { private static final Comparator<Pair<?, Long>> sTimeComparator = (o1, o2) -> Long.compare(o1.second, o2.second); AlarmPriorityQueue() { super(1, (o1, o2) -> (int) (o1.second - o2.second)); super(1, sTimeComparator); } /** Loading
services/tests/mockingservicestests/src/com/android/server/utils/AlarmQueueTest.java +21 −0 Original line number Diff line number Diff line Loading @@ -155,6 +155,27 @@ public class AlarmQueueTest { anyInt(), eq(nowElapsed + HOUR_IN_MILLIS), eq(ALARM_TAG), any(), any()); } @Test public void testAddingLargeAlarmTimes() { final AlarmQueue<String> alarmQueue = createAlarmQueue(true, 0); final long nowElapsed = mInjector.getElapsedRealtime(); InOrder inOrder = inOrder(mAlarmManager); alarmQueue.addAlarm("com.android.test.1", Long.MAX_VALUE - 5); inOrder.verify(mAlarmManager, timeout(1000).times(1)) .setExact(anyInt(), eq(Long.MAX_VALUE - 5), eq(ALARM_TAG), any(), any()); alarmQueue.addAlarm("com.android.test.2", Long.MAX_VALUE - 4); inOrder.verify(mAlarmManager, never()) .setExact(anyInt(), anyLong(), eq(ALARM_TAG), any(), any()); alarmQueue.addAlarm("com.android.test.3", nowElapsed + 5); inOrder.verify(mAlarmManager, timeout(1000).times(1)) .setExact(anyInt(), eq(nowElapsed + 5), eq(ALARM_TAG), any(), any()); alarmQueue.addAlarm("com.android.test.4", nowElapsed + 6); inOrder.verify(mAlarmManager, never()) .setExact(anyInt(), anyLong(), eq(ALARM_TAG), any(), any()); } /** * Verify that updating the alarm time for a key will result in the AlarmManager alarm changing, * if needed. Loading