Skip to content

Commit 513b1ee

Browse files
author
Josh Deffibaugh
committed
Allows service intervals to be changed after they are scheduled
1 parent c4f2638 commit 513b1ee

File tree

2 files changed

+11
-8
lines changed

2 files changed

+11
-8
lines changed

event-handler/src/androidTest/java/com/optimizely/ab/android/event_handler/ServiceSchedulerTest.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,10 +103,11 @@ public void testScheduleWithDurationExtra() {
103103
public void testAlreadyScheduledAlarm() {
104104
final Intent intent = new Intent(context, EventIntentService.class);
105105
when(pendingIntentFactory.hasPendingIntent(intent)).thenReturn(true);
106+
when(pendingIntentFactory.getPendingIntent(intent)).thenReturn(PendingIntent.getService(InstrumentationRegistry.getTargetContext(), 1, intent, 0));
106107

107108
serviceScheduler.schedule(intent, AlarmManager.INTERVAL_HOUR);
108109

109-
verify(logger).debug("Not scheduling {}. It's already scheduled", intent.getComponent().toShortString());
110+
verify(logger).info("Unscheduled {}", intent.getComponent().toShortString());
110111
}
111112

112113
@Test

shared/src/main/java/com/optimizely/ab/android/shared/ServiceScheduler.java

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,9 @@ public ServiceScheduler(@NonNull AlarmManager alarmManager, @NonNull PendingInte
5050
/**
5151
* Schedule a service starting {@link Intent} that starts on an interval
5252
*
53+
* Previously scheduled services matching this intent will be unscheduled. They will
54+
* match even if the interval is different.
55+
*
5356
* @param intent an {@link Intent}
5457
* @param interval the interval in MS
5558
* @hide
@@ -60,15 +63,14 @@ public void schedule(Intent intent, long interval) {
6063
return;
6164
}
6265

63-
if (!pendingIntentFactory.hasPendingIntent(intent)) {
66+
if (isScheduled(intent)) {
67+
unschedule(intent);
68+
}
6469

65-
PendingIntent pendingIntent = pendingIntentFactory.getPendingIntent(intent);
66-
alarmManager.setInexactRepeating(AlarmManager.ELAPSED_REALTIME, interval, interval, pendingIntent);
70+
PendingIntent pendingIntent = pendingIntentFactory.getPendingIntent(intent);
71+
alarmManager.setInexactRepeating(AlarmManager.ELAPSED_REALTIME, interval, interval, pendingIntent);
6772

68-
logger.info("Scheduled {}", intent.getComponent().toShortString());
69-
} else {
70-
logger.debug("Not scheduling {}. It's already scheduled", intent.getComponent().toShortString());
71-
}
73+
logger.info("Scheduled {}", intent.getComponent().toShortString());
7274
}
7375

7476
/**

0 commit comments

Comments
 (0)