private void encodeTrigger(JobTrigger trigger, Bundle data) { if (trigger == Trigger.NOW) { data.putInt( prefix + BundleProtocol.PACKED_PARAM_TRIGGER_TYPE, BundleProtocol.TRIGGER_TYPE_IMMEDIATE); } else if (trigger instanceof JobTrigger.ExecutionWindowTrigger) { JobTrigger.ExecutionWindowTrigger t = (JobTrigger.ExecutionWindowTrigger) trigger; data.putInt( prefix + BundleProtocol.PACKED_PARAM_TRIGGER_TYPE, BundleProtocol.TRIGGER_TYPE_EXECUTION_WINDOW); data.putInt(prefix + BundleProtocol.PACKED_PARAM_TRIGGER_WINDOW_START, t.getWindowStart()); data.putInt(prefix + BundleProtocol.PACKED_PARAM_TRIGGER_WINDOW_END, t.getWindowEnd()); } else if (trigger instanceof JobTrigger.ContentUriTrigger) { data.putInt( prefix + BundleProtocol.PACKED_PARAM_TRIGGER_TYPE, BundleProtocol.TRIGGER_TYPE_CONTENT_URI); ContentUriTrigger uriTrigger = (ContentUriTrigger) trigger; String jsonTrigger = convertObservedUrisToJsonString(uriTrigger.getUris()); data.putString(prefix + BundleProtocol.PACKED_PARAM_OBSERVED_URI, jsonTrigger); } else { throw new IllegalArgumentException("Unsupported trigger."); } }
private static void writeExecutionWindowTriggerToBundle( JobParameters job, Bundle b, JobTrigger.ExecutionWindowTrigger trigger) { b.putInt(REQUEST_PARAM_TRIGGER_TYPE, BundleProtocol.TRIGGER_TYPE_EXECUTION_WINDOW); if (job.isRecurring()) { b.putLong(REQUEST_PARAM_TRIGGER_WINDOW_PERIOD, trigger.getWindowEnd()); b.putLong( REQUEST_PARAM_TRIGGER_WINDOW_FLEX, trigger.getWindowEnd() - trigger.getWindowStart()); } else { b.putLong(REQUEST_PARAM_TRIGGER_WINDOW_START, trigger.getWindowStart()); b.putLong(REQUEST_PARAM_TRIGGER_WINDOW_END, trigger.getWindowEnd()); } }
@Test public void testWriteToBundle_triggers() { // immediate Bundle b = writer.writeToBundle( initializeDefaultBuilder().setTrigger(Trigger.NOW).build(), new Bundle()); assertEquals("window_start", 0, b.getLong("window_start")); assertEquals("window_end", 1, b.getLong("window_end")); // execution window (oneoff) JobTrigger.ExecutionWindowTrigger t = Trigger.executionWindow(631, 978); b = writer.writeToBundle(initializeDefaultBuilder().setTrigger(t).build(), new Bundle()); assertEquals("window_start", t.getWindowStart(), b.getLong("window_start")); assertEquals("window_end", t.getWindowEnd(), b.getLong("window_end")); // execution window (periodic) b = writer.writeToBundle( initializeDefaultBuilder().setRecurring(true).setTrigger(t).build(), new Bundle()); assertEquals("period", t.getWindowEnd(), b.getLong("period")); assertEquals("period_flex", t.getWindowEnd() - t.getWindowStart(), b.getLong("period_flex")); }
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); } } }
static void assertTriggersEqual(JobTrigger inTrigger, JobTrigger outTrigger) { assertEquals("", inTrigger.getClass(), outTrigger.getClass()); if (inTrigger instanceof JobTrigger.ExecutionWindowTrigger) { assertEquals( "getTrigger().getWindowStart()", ((JobTrigger.ExecutionWindowTrigger) inTrigger).getWindowStart(), ((JobTrigger.ExecutionWindowTrigger) outTrigger).getWindowStart()); assertEquals( "getTrigger().getWindowEnd()", ((JobTrigger.ExecutionWindowTrigger) inTrigger).getWindowEnd(), ((JobTrigger.ExecutionWindowTrigger) outTrigger).getWindowEnd()); } else if (inTrigger == Trigger.NOW) { assertEquals(inTrigger, outTrigger); } else if (inTrigger instanceof JobTrigger.ContentUriTrigger) { assertEquals( "Collection of URIs", ((ContentUriTrigger) inTrigger).getUris(), ((ContentUriTrigger) outTrigger).getUris()); } else { fail("Unknown Trigger class: " + inTrigger.getClass()); } }
@Test public void testNewInstance_withValidWindow() throws Exception { JobTrigger.ExecutionWindowTrigger trigger = Trigger.executionWindow(0, 60); assertEquals(0, trigger.getWindowStart()); assertEquals(60, trigger.getWindowEnd()); }