/** * Call {@link #isRequirementNetworkTypeMet()} to check whether this requirement is fulfilled. * * @return The network state which is required to run the job. * @see JobRequest#requiredNetworkType() */ public JobRequest.NetworkType requiredNetworkType() { return mRequest.requiredNetworkType(); }
/** * @return Whether any of the requirements is different than the default value. */ public boolean hasRequirements() { return requiresCharging() || requiresDeviceIdle() || requiresBatteryNotLow() || requiresStorageNotLow() || requiredNetworkType() != DEFAULT_NETWORK_TYPE; }
private void setupNetworkRequirement(Job job, JobRequest.NetworkType requirement, boolean connected, int networkType, boolean roaming) { NetworkInfo networkInfo = mock(NetworkInfo.class); when(networkInfo.isConnected()).thenReturn(connected); when(networkInfo.isConnectedOrConnecting()).thenReturn(connected); when(networkInfo.getType()).thenReturn(networkType); when(networkInfo.isRoaming()).thenReturn(roaming); ConnectivityManager connectivityManager = mock(ConnectivityManager.class); when(connectivityManager.getActiveNetworkInfo()).thenReturn(networkInfo); when(job.getContext().getSystemService(Context.CONNECTIVITY_SERVICE)).thenReturn(connectivityManager); when(job.getParams().getRequest().requiredNetworkType()).thenReturn(requirement); }
/** * @return {@code false} if the {@link Job} requires the device to be in a specific network state and it * isn't in this state. Otherwise always returns {@code true}. */ protected boolean isRequirementNetworkTypeMet() { JobRequest.NetworkType requirement = getParams().getRequest().requiredNetworkType(); if (requirement == JobRequest.NetworkType.ANY) { return true; } JobRequest.NetworkType current = Device.getNetworkType(getContext()); switch (requirement) { case CONNECTED: return current != JobRequest.NetworkType.ANY; case NOT_ROAMING: return current == JobRequest.NetworkType.NOT_ROAMING || current == JobRequest.NetworkType.UNMETERED || current == JobRequest.NetworkType.METERED; case UNMETERED: return current == JobRequest.NetworkType.UNMETERED; case METERED: return current == JobRequest.NetworkType.CONNECTED || current == JobRequest.NetworkType.NOT_ROAMING; default: throw new IllegalStateException("not implemented"); } }
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); }
protected <T extends Task.Builder> T prepareBuilder(T builder, JobRequest request) { builder.setTag(createTag(request)) .setService(PlatformGcmService.class) .setUpdateCurrent(true) .setRequiredNetwork(convertNetworkType(request.requiredNetworkType())) .setPersisted(JobUtil.hasBootPermission(mContext)) .setRequiresCharging(request.requiresCharging()) .setExtras(request.getTransientExtras()); return 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(); }
/*package*/ boolean meetsRequirements(boolean checkRequirementsEnforced) { if (checkRequirementsEnforced && !getParams().getRequest().requirementsEnforced()) { return true; } if (!isRequirementChargingMet()) { CAT.w("Job requires charging, reschedule"); return false; } if (!isRequirementDeviceIdleMet()) { CAT.w("Job requires device to be idle, reschedule"); return false; } if (!isRequirementNetworkTypeMet()) { CAT.w("Job requires network to be %s, but was %s", getParams().getRequest().requiredNetworkType(), Device.getNetworkType(getContext())); return false; } if (!isRequirementBatteryNotLowMet()) { CAT.w("Job requires battery not be low, reschedule"); return false; } if (!isRequirementStorageNotLowMet()) { CAT.w("Job requires storage not be low, reschedule"); return false; } return true; }
/** * Call {@link #isRequirementNetworkTypeMet()} to check whether this requirement is fulfilled. * * @return The network state which is required to run the job. * @see JobRequest#requiredNetworkType() */ public JobRequest.NetworkType requiredNetworkType() { return mRequest.requiredNetworkType(); }
/** * @return Whether any of the requirements is different than the default value. */ public boolean hasRequirements() { return requiresCharging() || requiresDeviceIdle() || requiresBatteryNotLow() || requiresStorageNotLow() || requiredNetworkType() != DEFAULT_NETWORK_TYPE; }
/** * @return {@code false} if the {@link Job} requires the device to be in a specific network state and it * isn't in this state. Otherwise always returns {@code true}. */ protected boolean isRequirementNetworkTypeMet() { JobRequest.NetworkType requirement = getParams().getRequest().requiredNetworkType(); if (requirement == JobRequest.NetworkType.ANY) { return true; } JobRequest.NetworkType current = Device.getNetworkType(getContext()); switch (requirement) { case CONNECTED: return current != JobRequest.NetworkType.ANY; case NOT_ROAMING: return current == JobRequest.NetworkType.NOT_ROAMING || current == JobRequest.NetworkType.UNMETERED || current == JobRequest.NetworkType.METERED; case UNMETERED: return current == JobRequest.NetworkType.UNMETERED; case METERED: return current == JobRequest.NetworkType.CONNECTED || current == JobRequest.NetworkType.NOT_ROAMING; default: throw new IllegalStateException("not implemented"); } }
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); }
protected <T extends Task.Builder> T prepareBuilder(T builder, JobRequest request) { builder.setTag(createTag(request)) .setService(PlatformGcmService.class) .setUpdateCurrent(true) .setRequiredNetwork(convertNetworkType(request.requiredNetworkType())) .setPersisted(JobUtil.hasBootPermission(mContext)) .setRequiresCharging(request.requiresCharging()) .setExtras(request.getTransientExtras()); return builder; }
/*package*/ boolean meetsRequirements(boolean checkRequirementsEnforced) { if (checkRequirementsEnforced && !getParams().getRequest().requirementsEnforced()) { return true; } if (!isRequirementChargingMet()) { CAT.w("Job requires charging, reschedule"); return false; } if (!isRequirementDeviceIdleMet()) { CAT.w("Job requires device to be idle, reschedule"); return false; } if (!isRequirementNetworkTypeMet()) { CAT.w("Job requires network to be %s, but was %s", getParams().getRequest().requiredNetworkType(), Device.getNetworkType(getContext())); return false; } if (!isRequirementBatteryNotLowMet()) { CAT.w("Job requires battery not be low, reschedule"); return false; } if (!isRequirementStorageNotLowMet()) { CAT.w("Job requires storage not be low, reschedule"); return false; } return true; }