BackupJobs(Context context, Preferences preferences) { this.preferences = preferences; firebaseJobDispatcher = new FirebaseJobDispatcher( preferences.isUseOldScheduler() ? new AlarmManagerDriver(context) : new GooglePlayDriver(context)); }
@Override public int cancelAll() { if (LOCAL_LOGV) { Log.v(TAG, "AlarmManagerDriver: cancelAll"); } cancel(BackupType.REGULAR.name()); return CANCEL_RESULT_SUCCESS; }
@Override public int schedule(@NonNull Job job) { if (LOCAL_LOGV) { Log.v(TAG, "AlarmManagerDriver: schedule " +job); } final JobTrigger trigger = job.getTrigger(); final long atTime = scheduleTime(trigger); if (atTime > 0) { alarmManager.set(RTC_WAKEUP, atTime, createPendingIntent(context, BackupType.fromName(job.getTag()))); return SCHEDULE_RESULT_SUCCESS; } else { Log.w(TAG, "unsupported trigger for job "+job); return SCHEDULE_RESULT_UNSUPPORTED_TRIGGER; } }
@Test public void testScheduleJobWithUnknownTrigger() throws Exception { final Job job = jobBuilder() .setTrigger(Trigger.contentUriTrigger(Collections.singletonList(new ObservedUri(Uri.parse("foo://bar"), 0)))) .build(); final int result = subject.schedule(job); assertThat(result).isEqualTo(SCHEDULE_RESULT_UNSUPPORTED_TRIGGER); }
@Override public int cancel(@NonNull String tag) { if (LOCAL_LOGV) { Log.v(TAG, "AlarmManagerDriver: cancel " +tag); } // Matching intents based on Intent#filterEquals(): // That is, if their action, data, type, class, and categories are the same. alarmManager.cancel(createPendingIntent(context, BackupType.fromName(tag))); return CANCEL_RESULT_SUCCESS; }
@Test public void testScheduleJobWithoutTrigger() throws Exception { final Job job = jobBuilder().build(); final int result = subject.schedule(job); assertThat(result).isEqualTo(SCHEDULE_RESULT_SUCCESS); assertAlarmScheduled("UNKNOWN"); }
@Before public void setUp() throws Exception { subject = new AlarmManagerDriver(RuntimeEnvironment.application); }
@Test public void testScheduleJobWithExecutionWindowTrigger() throws Exception { final Job job = jobBuilder() .setTrigger(Trigger.executionWindow(30, 30)) .build(); final int result = subject.schedule(job); assertThat(result).isEqualTo(SCHEDULE_RESULT_SUCCESS); assertAlarmScheduled("UNKNOWN"); }
@Test public void testScheduleJobWithExecutionWindowTriggerAndTag() throws Exception { final Job job = jobBuilder() .setTag("REGULAR") .setTrigger(Trigger.executionWindow(30, 30)) .build(); final int result = subject.schedule(job); assertThat(result).isEqualTo(SCHEDULE_RESULT_SUCCESS); assertAlarmScheduled("REGULAR"); }