@Override public int schedule(@NonNull Job job) { Log.i("TrackingBackend", "beginning schedule loop"); synchronized (mStore) { final Iterator<JobHistory> it = mStore.iterator(); while (it.hasNext()) { JobParameters j = it.next().job; if (j.getTag().equals(job.getTag()) && j.getService().equals(job.getService())) { it.remove(); } } mStore.add(new JobHistory(job)); } Log.i("TrackingBackend", "ending schedule loop"); return mDriver.schedule(job); }
/** * Stops the job if it is running. * * <p>Needed to avoid possibility of sending job result before the reschedule request is received * by Google Play services. */ static void onSchedule(Job job) { // Stop if running synchronized (callbacks) { SimpleArrayMap<String, JobCallback> jobs = callbacks.get(job.getService()); if (jobs == null) { // not running return; } JobCallback jobCallback = jobs.get(job.getTag()); if (jobCallback == null) { // not running return; } } JobInvocation key = new JobInvocation.Builder() .setTag(job.getTag()) .setService(job.getService()) .setTrigger(job.getTrigger()) .build(); ExecutionDelegator.stopJob(key, false /* must not send the result */); } }
private Job schedule(Job job) { if (LOCAL_LOGV) { Log.v(TAG, "schedule job " + job.getTag()); } final int result = firebaseJobDispatcher.schedule(job); if (result == SCHEDULE_RESULT_SUCCESS) { return job; } else { Log.w(TAG, "Error scheduling job: "+result); return null; } }
@Nullable private Job schedule(int inSeconds, BackupType backupType, boolean force) { if (LOCAL_LOGV) { Log.v(TAG, "scheduleBackup(" + inSeconds + ", " + backupType + ", " + force + ")"); } if (force || (preferences.isAutoBackupEnabled() && inSeconds > 0)) { final Job job = createJob(inSeconds, backupType); if (schedule(job) != null) { if (LOCAL_LOGV) { Log.v(TAG, "Scheduled backup job " + job + ", tag: " + job.getTag() + " due " + "" + (inSeconds > 0 ? "in " + inSeconds + " seconds" : "now")); } } return job; } else { if (LOCAL_LOGV) Log.v(TAG, "Not scheduling backup because auto backup is disabled."); return null; } }
@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; } }
private void verifyJobScheduled(Job job, int scheduled, String expectedType) { assertThat(job).isNotNull(); if (scheduled <= 0) { assertThat(job.getTrigger()).isInstanceOf(JobTrigger.ImmediateTrigger.class); } else { assertThat(job.getTrigger()).isInstanceOf(JobTrigger.ExecutionWindowTrigger.class); JobTrigger.ExecutionWindowTrigger trigger = (JobTrigger.ExecutionWindowTrigger) job.getTrigger(); JobTrigger.ExecutionWindowTrigger testTrigger = Trigger.executionWindow(scheduled, scheduled); assertThat(trigger.getWindowEnd()).isEqualTo(testTrigger.getWindowEnd()); assertThat(trigger.getWindowStart()).isEqualTo(testTrigger.getWindowStart()); } assertThat(job.getTag()).isEqualTo(expectedType); if ("BROADCAST_INTENT".equals(expectedType)) { assertThat(job.getConstraints()).isEmpty(); } else { assertThat(job.getConstraints()).asList().contains(Constraint.ON_ANY_NETWORK); } } }