/** * Call {@link #isRequirementDeviceIdleMet()} to check whether this requirement is fulfilled. * * @return If {@code true}, then job should only run if the device is idle. * @see JobRequest#requiresDeviceIdle() */ public boolean requiresDeviceIdle() { return mRequest.requiresDeviceIdle(); }
/** * @return {@code false} if the {@link Job} requires the device to be idle and it isn't idle. Otherwise * always returns {@code true}. */ protected boolean isRequirementDeviceIdleMet() { return !(getParams().getRequest().requiresDeviceIdle() && !Device.isIdle(getContext())); }
/** * @return Whether any of the requirements is different than the default value. */ public boolean hasRequirements() { return requiresCharging() || requiresDeviceIdle() || requiresBatteryNotLow() || requiresStorageNotLow() || requiredNetworkType() != DEFAULT_NETWORK_TYPE; }
@SuppressWarnings("deprecation") private void setupDeviceIdle(Job job, boolean requirement, boolean deviceIdle) { PowerManager powerManager = mock(PowerManager.class); when(powerManager.isDeviceIdleMode()).thenReturn(deviceIdle); when(powerManager.isInteractive()).thenReturn(!deviceIdle); when(powerManager.isScreenOn()).thenReturn(!deviceIdle); when(powerManager.isInteractive()).thenReturn(!deviceIdle); when(job.getParams().getRequest().requiresDeviceIdle()).thenReturn(requirement); when(job.getContext().getSystemService(Context.POWER_SERVICE)).thenReturn(powerManager); }
protected JobInfo.Builder createBaseBuilder(JobRequest request, boolean allowPersisting) { JobInfo.Builder builder = new JobInfo.Builder(request.getJobId(), new ComponentName(mContext, PlatformJobService.class)) .setRequiresCharging(request.requiresCharging()) .setRequiresDeviceIdle(request.requiresDeviceIdle()) .setRequiredNetworkType(convertNetworkType(request.requiredNetworkType())) .setPersisted(allowPersisting && !request.isTransient() && JobUtil.hasBootPermission(mContext)); return setTransientBundle(request, builder); }
private static Constraints buildConstraints(JobRequest request) { Constraints.Builder constraintsBuilder = new Constraints.Builder() .setRequiresBatteryNotLow(request.requiresBatteryNotLow()) .setRequiresCharging(request.requiresCharging()) .setRequiresStorageNotLow(request.requiresStorageNotLow()) .setRequiredNetworkType(mapNetworkType(request.requiredNetworkType())); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { constraintsBuilder.setRequiresDeviceIdle(request.requiresDeviceIdle()); } return constraintsBuilder.build(); }
@Test public void testPeriodic() { long interval = JobRequest.MIN_INTERVAL * 5; JobRequest request = getBuilder() .setPeriodic(interval) .setExtras(new PersistableBundleCompat()) .build(); assertThat(request.getJobId()).isGreaterThan(0); assertThat(request.getTag()).isEqualTo(DummyJobs.SuccessJob.TAG); assertThat(request.getIntervalMs()).isEqualTo(interval); assertThat(request.getFlexMs()).isEqualTo(interval); assertThat(request.isPeriodic()).isTrue(); assertThat(request.isFlexSupport()).isFalse(); assertThat(request.getStartMs()).isNegative(); assertThat(request.getEndMs()).isNegative(); assertThat(request.getBackoffMs()).isEqualTo(JobRequest.DEFAULT_BACKOFF_MS); assertThat(request.getBackoffPolicy()).isEqualTo(JobRequest.DEFAULT_BACKOFF_POLICY); assertThat(request.getExtras()).isNotNull(); assertThat(request.isExact()).isFalse(); assertThat(request.requiredNetworkType()).isEqualTo(JobRequest.DEFAULT_NETWORK_TYPE); assertThat(request.requirementsEnforced()).isFalse(); assertThat(request.requiresCharging()).isFalse(); assertThat(request.requiresDeviceIdle()).isFalse(); }
/** * Call {@link #isRequirementDeviceIdleMet()} to check whether this requirement is fulfilled. * * @return If {@code true}, then job should only run if the device is idle. * @see JobRequest#requiresDeviceIdle() */ public boolean requiresDeviceIdle() { return mRequest.requiresDeviceIdle(); }
/** * @return {@code false} if the {@link Job} requires the device to be idle and it isn't idle. Otherwise * always returns {@code true}. */ protected boolean isRequirementDeviceIdleMet() { return !(getParams().getRequest().requiresDeviceIdle() && !Device.isIdle(getContext())); }
/** * @return Whether any of the requirements is different than the default value. */ public boolean hasRequirements() { return requiresCharging() || requiresDeviceIdle() || requiresBatteryNotLow() || requiresStorageNotLow() || requiredNetworkType() != DEFAULT_NETWORK_TYPE; }
protected JobInfo.Builder createBaseBuilder(JobRequest request, boolean allowPersisting) { JobInfo.Builder builder = new JobInfo.Builder(request.getJobId(), new ComponentName(mContext, PlatformJobService.class)) .setRequiresCharging(request.requiresCharging()) .setRequiresDeviceIdle(request.requiresDeviceIdle()) .setRequiredNetworkType(convertNetworkType(request.requiredNetworkType())) .setPersisted(allowPersisting && !request.isTransient() && JobUtil.hasBootPermission(mContext)); return setTransientBundle(request, builder); }
@Test public void testAdapter() throws InterruptedException, IOException { FilePayload payload = buildPayload(); int tenMinutes = 10 * 60 * 1000; UploadRequest<FilePayload> request = buildUploadRequest(payload, tenMinutes); JobRequest adapted = AndroidJobStrategy.adapt(request); assertEquals(20, adapted.getStartMs()); assertEquals(tenMinutes, adapted.getEndMs()); assertEquals(true, adapted.requiresCharging()); assertEquals(false, adapted.requiresDeviceIdle()); assertEquals(100, adapted.getBackoffMs()); assertEquals(JobRequest.BackoffPolicy.LINEAR, adapted.getBackoffPolicy()); assertEquals(9, adapted.getExtras().get("maxErrorRetries")); } }