diff --git a/apex/jobscheduler/framework/java/android/app/job/JobInfo.java b/apex/jobscheduler/framework/java/android/app/job/JobInfo.java index f6c18d62ff1eb..7f02cb36dfc1c 100644 --- a/apex/jobscheduler/framework/java/android/app/job/JobInfo.java +++ b/apex/jobscheduler/framework/java/android/app/job/JobInfo.java @@ -396,19 +396,12 @@ public class JobInfo implements Parcelable { */ public static final int FLAG_EXPEDITED = 1 << 4; - /** - * Whether it's a data transfer job or not. - * - * @hide - */ - public static final int FLAG_DATA_TRANSFER = 1 << 5; - /** * Whether it's a user initiated job or not. * * @hide */ - public static final int FLAG_USER_INITIATED = 1 << 6; + public static final int FLAG_USER_INITIATED = 1 << 5; /** * @hide @@ -737,13 +730,6 @@ public class JobInfo implements Parcelable { return (flags & FLAG_EXPEDITED) != 0; } - /** - * @see JobInfo.Builder#setDataTransfer(boolean) - */ - public boolean isDataTransfer() { - return (flags & FLAG_DATA_TRANSFER) != 0; - } - /** * @see JobInfo.Builder#setUserInitiated(boolean) */ @@ -1849,39 +1835,6 @@ public class JobInfo implements Parcelable { return this; } - /** - * Indicates that this job will be used to transfer data to or from a remote server. The - * system could attempt to run a data transfer job longer than a regular job if the data - * being transferred is potentially very large and can take a long time to complete. - * - *
- * You must provide an estimate of the payload size via - * {@link #setEstimatedNetworkBytes(long, long)} when scheduling the job or use - * {@link JobService#updateEstimatedNetworkBytes(JobParameters, long, long)} or - * {@link JobService#updateEstimatedNetworkBytes(JobParameters, JobWorkItem, long, long)} - * shortly after the job starts. - * - *
- * For user-initiated transfers that must be started immediately, call - * {@link #setUserInitiated(boolean) setUserInitiated(true)}. Otherwise, the system may - * defer the job to a more opportune time. - * - *
- * If you want to perform more than one data transfer job, consider enqueuing multiple - * {@link JobWorkItem JobWorkItems} along with {@link #setDataTransfer(boolean)}. - * - * @see JobInfo#isDataTransfer() - */ - @NonNull - public Builder setDataTransfer(boolean dataTransfer) { - if (dataTransfer) { - mFlags |= FLAG_DATA_TRANSFER; - } else { - mFlags &= (~FLAG_DATA_TRANSFER); - } - return this; - } - /** * Indicates that this job is being scheduled to fulfill an explicit user request. * As such, user-initiated jobs can only be scheduled when the app is in the foreground @@ -1909,6 +1862,11 @@ public class JobInfo implements Parcelable { * {@link SecurityException}. * *
+ * In {@link android.os.Build.VERSION_CODES#UPSIDE_DOWN_CAKE}, user-initiated jobs can only + * be used for network data transfers. As such, they must specify a required network via + * {@link #setRequiredNetwork(NetworkRequest)} or {@link #setRequiredNetworkType(int)}. + * + *
* These jobs will not be subject to quotas and will be started immediately once scheduled * if all constraints are met and the device system health allows for additional tasks. * @@ -2179,10 +2137,6 @@ public class JobInfo implements Parcelable { if (isPeriodic) { throw new IllegalArgumentException("An expedited job cannot be periodic"); } - if ((flags & FLAG_DATA_TRANSFER) != 0) { - throw new IllegalArgumentException( - "An expedited job cannot also be a data transfer job"); - } if (isUserInitiated) { throw new IllegalArgumentException("An expedited job cannot be user-initiated"); } @@ -2202,24 +2156,6 @@ public class JobInfo implements Parcelable { } } - if ((flags & FLAG_DATA_TRANSFER) != 0) { - if (backoffPolicy == BACKOFF_POLICY_LINEAR) { - throw new IllegalArgumentException( - "A data transfer job cannot have a linear backoff policy."); - } - if (hasLateConstraint) { - throw new IllegalArgumentException("A data transfer job cannot have a deadline"); - } - if ((flags & FLAG_PREFETCH) != 0) { - throw new IllegalArgumentException( - "A data transfer job cannot also be a prefetch job"); - } - if (networkRequest == null) { - throw new IllegalArgumentException( - "A data transfer job must specify a valid network type"); - } - } - if (isUserInitiated) { if (hasEarlyConstraint) { throw new IllegalArgumentException("A user-initiated job cannot have a time delay"); @@ -2245,6 +2181,15 @@ public class JobInfo implements Parcelable { throw new IllegalArgumentException( "Can't call addTriggerContentUri() on a user-initiated job"); } + // UIDTs + if (networkRequest == null) { + throw new IllegalArgumentException( + "A user-initaited data transfer job must specify a valid network type"); + } + if (backoffPolicy == BACKOFF_POLICY_LINEAR) { + throw new IllegalArgumentException( + "A user-initiated data transfer job cannot have a linear backoff policy."); + } } } diff --git a/apex/jobscheduler/service/java/com/android/server/job/JobSchedulerService.java b/apex/jobscheduler/service/java/com/android/server/job/JobSchedulerService.java index bf3789fa0095b..0af191af2a21c 100644 --- a/apex/jobscheduler/service/java/com/android/server/job/JobSchedulerService.java +++ b/apex/jobscheduler/service/java/com/android/server/job/JobSchedulerService.java @@ -478,8 +478,6 @@ public class JobSchedulerService extends com.android.server.SystemService case Constants.KEY_RUNTIME_FREE_QUOTA_MAX_LIMIT_MS: case Constants.KEY_RUNTIME_MIN_GUARANTEE_MS: case Constants.KEY_RUNTIME_MIN_EJ_GUARANTEE_MS: - case Constants.KEY_RUNTIME_MIN_DATA_TRANSFER_GUARANTEE_MS: - case Constants.KEY_RUNTIME_DATA_TRANSFER_LIMIT_MS: case Constants.KEY_RUNTIME_MIN_USER_INITIATED_GUARANTEE_MS: case Constants.KEY_RUNTIME_USER_INITIATED_LIMIT_MS: case Constants.KEY_RUNTIME_MIN_USER_INITIATED_DATA_TRANSFER_GUARANTEE_BUFFER_FACTOR: @@ -574,10 +572,6 @@ public class JobSchedulerService extends com.android.server.SystemService "runtime_free_quota_max_limit_ms"; private static final String KEY_RUNTIME_MIN_GUARANTEE_MS = "runtime_min_guarantee_ms"; private static final String KEY_RUNTIME_MIN_EJ_GUARANTEE_MS = "runtime_min_ej_guarantee_ms"; - private static final String KEY_RUNTIME_MIN_DATA_TRANSFER_GUARANTEE_MS = - "runtime_min_data_transfer_guarantee_ms"; - private static final String KEY_RUNTIME_DATA_TRANSFER_LIMIT_MS = - "runtime_data_transfer_limit_ms"; private static final String KEY_RUNTIME_MIN_USER_INITIATED_GUARANTEE_MS = "runtime_min_user_initiated_guarantee_ms"; private static final String KEY_RUNTIME_USER_INITIATED_LIMIT_MS = @@ -616,10 +610,6 @@ public class JobSchedulerService extends com.android.server.SystemService public static final long DEFAULT_RUNTIME_MIN_GUARANTEE_MS = 10 * MINUTE_IN_MILLIS; @VisibleForTesting public static final long DEFAULT_RUNTIME_MIN_EJ_GUARANTEE_MS = 3 * MINUTE_IN_MILLIS; - public static final long DEFAULT_RUNTIME_MIN_DATA_TRANSFER_GUARANTEE_MS = - DEFAULT_RUNTIME_MIN_GUARANTEE_MS; - public static final long DEFAULT_RUNTIME_DATA_TRANSFER_LIMIT_MS = - DEFAULT_RUNTIME_FREE_QUOTA_MAX_LIMIT_MS; public static final long DEFAULT_RUNTIME_MIN_USER_INITIATED_GUARANTEE_MS = Math.max(10 * MINUTE_IN_MILLIS, DEFAULT_RUNTIME_MIN_GUARANTEE_MS); public static final long DEFAULT_RUNTIME_USER_INITIATED_LIMIT_MS = @@ -738,18 +728,6 @@ public class JobSchedulerService extends com.android.server.SystemService */ public long RUNTIME_MIN_EJ_GUARANTEE_MS = DEFAULT_RUNTIME_MIN_EJ_GUARANTEE_MS; - /** - * The minimum amount of time we try to guarantee normal data transfer jobs will run for. - */ - public long RUNTIME_MIN_DATA_TRANSFER_GUARANTEE_MS = - DEFAULT_RUNTIME_MIN_DATA_TRANSFER_GUARANTEE_MS; - - /** - * The maximum amount of time we will let a normal data transfer job run for. This will only - * apply if there are no other limits that apply to the specific data transfer job. - */ - public long RUNTIME_DATA_TRANSFER_LIMIT_MS = DEFAULT_RUNTIME_DATA_TRANSFER_LIMIT_MS; - /** * The minimum amount of time we try to guarantee normal user-initiated jobs will run for. */ @@ -885,8 +863,6 @@ public class JobSchedulerService extends com.android.server.SystemService KEY_RUNTIME_FREE_QUOTA_MAX_LIMIT_MS, KEY_RUNTIME_MIN_GUARANTEE_MS, KEY_RUNTIME_MIN_EJ_GUARANTEE_MS, KEY_RUNTIME_MIN_USER_INITIATED_DATA_TRANSFER_GUARANTEE_BUFFER_FACTOR, - KEY_RUNTIME_MIN_DATA_TRANSFER_GUARANTEE_MS, - KEY_RUNTIME_DATA_TRANSFER_LIMIT_MS, KEY_RUNTIME_MIN_USER_INITIATED_GUARANTEE_MS, KEY_RUNTIME_USER_INITIATED_LIMIT_MS, KEY_RUNTIME_MIN_USER_INITIATED_DATA_TRANSFER_GUARANTEE_MS, @@ -904,17 +880,6 @@ public class JobSchedulerService extends com.android.server.SystemService properties.getLong(KEY_RUNTIME_FREE_QUOTA_MAX_LIMIT_MS, DEFAULT_RUNTIME_FREE_QUOTA_MAX_LIMIT_MS)); // Make sure min runtime is at least as long as regular jobs. - RUNTIME_MIN_DATA_TRANSFER_GUARANTEE_MS = Math.max(RUNTIME_MIN_GUARANTEE_MS, - properties.getLong( - KEY_RUNTIME_MIN_DATA_TRANSFER_GUARANTEE_MS, - DEFAULT_RUNTIME_MIN_DATA_TRANSFER_GUARANTEE_MS)); - // Max limit should be at least the min guarantee AND the free quota. - RUNTIME_DATA_TRANSFER_LIMIT_MS = Math.max(RUNTIME_FREE_QUOTA_MAX_LIMIT_MS, - Math.max(RUNTIME_MIN_DATA_TRANSFER_GUARANTEE_MS, - properties.getLong( - KEY_RUNTIME_DATA_TRANSFER_LIMIT_MS, - DEFAULT_RUNTIME_DATA_TRANSFER_LIMIT_MS))); - // Make sure min runtime is at least as long as regular jobs. RUNTIME_MIN_USER_INITIATED_GUARANTEE_MS = Math.max(RUNTIME_MIN_GUARANTEE_MS, properties.getLong( KEY_RUNTIME_MIN_USER_INITIATED_GUARANTEE_MS, @@ -993,10 +958,6 @@ public class JobSchedulerService extends com.android.server.SystemService pw.print(KEY_RUNTIME_MIN_EJ_GUARANTEE_MS, RUNTIME_MIN_EJ_GUARANTEE_MS).println(); pw.print(KEY_RUNTIME_FREE_QUOTA_MAX_LIMIT_MS, RUNTIME_FREE_QUOTA_MAX_LIMIT_MS) .println(); - pw.print(KEY_RUNTIME_MIN_DATA_TRANSFER_GUARANTEE_MS, - RUNTIME_MIN_DATA_TRANSFER_GUARANTEE_MS).println(); - pw.print(KEY_RUNTIME_DATA_TRANSFER_LIMIT_MS, - RUNTIME_DATA_TRANSFER_LIMIT_MS).println(); pw.print(KEY_RUNTIME_MIN_USER_INITIATED_GUARANTEE_MS, RUNTIME_MIN_USER_INITIATED_GUARANTEE_MS).println(); pw.print(KEY_RUNTIME_USER_INITIATED_LIMIT_MS, @@ -3291,7 +3252,7 @@ public class JobSchedulerService extends com.android.server.SystemService if (job.shouldTreatAsUserInitiatedJob() && checkRunUserInitiatedJobsPermission( job.getSourceUid(), job.getSourcePackageName())) { - if (job.getJob().isDataTransfer()) { + if (job.getJob().getRequiredNetwork() != null) { // UI+DT final long estimatedTransferTimeMs = mConnectivityController.getEstimatedTransferTimeMs(job); if (estimatedTransferTimeMs == ConnectivityController.UNKNOWN_TIME) { @@ -3308,9 +3269,6 @@ public class JobSchedulerService extends com.android.server.SystemService )); } return mConstants.RUNTIME_MIN_USER_INITIATED_GUARANTEE_MS; - } else if (job.getJob().isDataTransfer()) { - // For now, don't increase a bg data transfer's minimum guarantee. - return mConstants.RUNTIME_MIN_DATA_TRANSFER_GUARANTEE_MS; } else if (job.shouldTreatAsExpeditedJob()) { // Don't guarantee RESTRICTED jobs more than 5 minutes. return job.getEffectiveStandbyBucket() != RESTRICTED_INDEX @@ -3328,7 +3286,7 @@ public class JobSchedulerService extends com.android.server.SystemService final boolean allowLongerJob = job.shouldTreatAsUserInitiatedJob() && checkRunUserInitiatedJobsPermission( job.getSourceUid(), job.getSourcePackageName()); - if (job.getJob().isDataTransfer() && allowLongerJob) { // UI+DT + if (job.getJob().getRequiredNetwork() != null && allowLongerJob) { // UI+DT return mConstants.RUNTIME_USER_INITIATED_DATA_TRANSFER_LIMIT_MS; } if (allowLongerJob) { // UI with LRJ permission @@ -3337,9 +3295,6 @@ public class JobSchedulerService extends com.android.server.SystemService if (job.shouldTreatAsUserInitiatedJob()) { return mConstants.RUNTIME_FREE_QUOTA_MAX_LIMIT_MS; } - if (job.getJob().isDataTransfer()) { - return mConstants.RUNTIME_DATA_TRANSFER_LIMIT_MS; - } return Math.min(mConstants.RUNTIME_FREE_QUOTA_MAX_LIMIT_MS, mConstants.USE_TARE_POLICY ? mTareController.getMaxJobExecutionTimeMsLocked(job) diff --git a/core/api/current.txt b/core/api/current.txt index e97a45a120d6e..21e358fd71913 100644 --- a/core/api/current.txt +++ b/core/api/current.txt @@ -8733,7 +8733,6 @@ package android.app.job { method public long getTriggerContentMaxDelay(); method public long getTriggerContentUpdateDelay(); method @Nullable public android.app.job.JobInfo.TriggerContentUri[] getTriggerContentUris(); - method public boolean isDataTransfer(); method public boolean isExpedited(); method public boolean isImportantWhileForeground(); method public boolean isPeriodic(); @@ -8770,7 +8769,6 @@ package android.app.job { method public android.app.job.JobInfo build(); method public android.app.job.JobInfo.Builder setBackoffCriteria(long, int); method public android.app.job.JobInfo.Builder setClipData(@Nullable android.content.ClipData, int); - method @NonNull public android.app.job.JobInfo.Builder setDataTransfer(boolean); method public android.app.job.JobInfo.Builder setEstimatedNetworkBytes(long, long); method @NonNull public android.app.job.JobInfo.Builder setExpedited(boolean); method public android.app.job.JobInfo.Builder setExtras(@NonNull android.os.PersistableBundle); diff --git a/services/tests/mockingservicestests/src/com/android/server/job/JobSchedulerServiceTest.java b/services/tests/mockingservicestests/src/com/android/server/job/JobSchedulerServiceTest.java index 991d5667206b5..8b420a36602c1 100644 --- a/services/tests/mockingservicestests/src/com/android/server/job/JobSchedulerServiceTest.java +++ b/services/tests/mockingservicestests/src/com/android/server/job/JobSchedulerServiceTest.java @@ -234,15 +234,9 @@ public class JobSchedulerServiceTest { createJobInfo(5).setPriority(JobInfo.PRIORITY_HIGH)); JobStatus jobDef = createJobStatus("testGetMinJobExecutionGuaranteeMs", createJobInfo(6)); - JobStatus jobDT = createJobStatus("testGetMinJobExecutionGuaranteeMs", - createJobInfo(7) - .setDataTransfer(true).setRequiredNetworkType(JobInfo.NETWORK_TYPE_ANY)); - JobStatus jobUI = createJobStatus("testGetMinJobExecutionGuaranteeMs", - createJobInfo(8)); // TODO(255371817): add setUserInitiated(true) JobStatus jobUIDT = createJobStatus("testGetMinJobExecutionGuaranteeMs", - // TODO(255371817): add setUserInitiated(true) createJobInfo(9) - .setDataTransfer(true).setRequiredNetworkType(JobInfo.NETWORK_TYPE_ANY)); + .setUserInitiated(true).setRequiredNetworkType(JobInfo.NETWORK_TYPE_ANY)); spyOn(ejMax); spyOn(ejHigh); @@ -250,8 +244,6 @@ public class JobSchedulerServiceTest { spyOn(ejHighDowngraded); spyOn(jobHigh); spyOn(jobDef); - spyOn(jobDT); - spyOn(jobUI); spyOn(jobUIDT); when(ejMax.shouldTreatAsExpeditedJob()).thenReturn(true); @@ -260,14 +252,11 @@ public class JobSchedulerServiceTest { when(ejHighDowngraded.shouldTreatAsExpeditedJob()).thenReturn(false); when(jobHigh.shouldTreatAsExpeditedJob()).thenReturn(false); when(jobDef.shouldTreatAsExpeditedJob()).thenReturn(false); - when(jobUI.shouldTreatAsUserInitiatedJob()).thenReturn(true); when(jobUIDT.shouldTreatAsUserInitiatedJob()).thenReturn(true); ConnectivityController connectivityController = mService.getConnectivityController(); spyOn(connectivityController); mService.mConstants.RUNTIME_MIN_GUARANTEE_MS = 10 * MINUTE_IN_MILLIS; - mService.mConstants.RUNTIME_MIN_DATA_TRANSFER_GUARANTEE_MS = 15 * MINUTE_IN_MILLIS; - mService.mConstants.RUNTIME_DATA_TRANSFER_LIMIT_MS = 60 * MINUTE_IN_MILLIS; mService.mConstants.RUNTIME_MIN_USER_INITIATED_DATA_TRANSFER_GUARANTEE_BUFFER_FACTOR = 1.5f; mService.mConstants.RUNTIME_MIN_USER_INITIATED_DATA_TRANSFER_GUARANTEE_MS = HOUR_IN_MILLIS; mService.mConstants.RUNTIME_USER_INITIATED_DATA_TRANSFER_LIMIT_MS = 6 * HOUR_IN_MILLIS; @@ -284,37 +273,14 @@ public class JobSchedulerServiceTest { mService.getMinJobExecutionGuaranteeMs(jobHigh)); assertEquals(mService.mConstants.RUNTIME_MIN_GUARANTEE_MS, mService.getMinJobExecutionGuaranteeMs(jobDef)); - grantRunUserInitiatedJobsPermission(false); // Without permission - assertEquals(mService.mConstants.RUNTIME_MIN_DATA_TRANSFER_GUARANTEE_MS, - mService.getMinJobExecutionGuaranteeMs(jobDT)); - grantRunUserInitiatedJobsPermission(true); // With permission - doReturn(ConnectivityController.UNKNOWN_TIME) - .when(connectivityController).getEstimatedTransferTimeMs(any()); - assertEquals(mService.mConstants.RUNTIME_MIN_DATA_TRANSFER_GUARANTEE_MS, - mService.getMinJobExecutionGuaranteeMs(jobDT)); - doReturn(mService.mConstants.RUNTIME_MIN_DATA_TRANSFER_GUARANTEE_MS / 2) - .when(connectivityController).getEstimatedTransferTimeMs(any()); - assertEquals(mService.mConstants.RUNTIME_MIN_DATA_TRANSFER_GUARANTEE_MS, - mService.getMinJobExecutionGuaranteeMs(jobDT)); - doReturn(mService.mConstants.RUNTIME_MIN_DATA_TRANSFER_GUARANTEE_MS * 2) - .when(connectivityController).getEstimatedTransferTimeMs(any()); - assertEquals(mService.mConstants.RUNTIME_MIN_DATA_TRANSFER_GUARANTEE_MS, - mService.getMinJobExecutionGuaranteeMs(jobDT)); - doReturn(mService.mConstants.RUNTIME_DATA_TRANSFER_LIMIT_MS * 2) - .when(connectivityController).getEstimatedTransferTimeMs(any()); - assertEquals(mService.mConstants.RUNTIME_MIN_DATA_TRANSFER_GUARANTEE_MS, - mService.getMinJobExecutionGuaranteeMs(jobDT)); // UserInitiated grantRunUserInitiatedJobsPermission(false); - // Permission isn't granted, so it should just be treated as a regular data transfer job. - assertEquals(mService.mConstants.RUNTIME_MIN_DATA_TRANSFER_GUARANTEE_MS, - mService.getMinJobExecutionGuaranteeMs(jobUIDT)); // Permission isn't granted, so it should just be treated as a regular job. assertEquals(mService.mConstants.RUNTIME_MIN_GUARANTEE_MS, - mService.getMinJobExecutionGuaranteeMs(jobUI)); + mService.getMinJobExecutionGuaranteeMs(jobUIDT)); grantRunUserInitiatedJobsPermission(true); // With permission - assertEquals(mService.mConstants.RUNTIME_MIN_USER_INITIATED_GUARANTEE_MS, - mService.getMinJobExecutionGuaranteeMs(jobUI)); + assertEquals(mService.mConstants.RUNTIME_MIN_USER_INITIATED_DATA_TRANSFER_GUARANTEE_MS, + mService.getMinJobExecutionGuaranteeMs(jobUIDT)); doReturn(ConnectivityController.UNKNOWN_TIME) .when(connectivityController).getEstimatedTransferTimeMs(any()); assertEquals(mService.mConstants.RUNTIME_MIN_USER_INITIATED_DATA_TRANSFER_GUARANTEE_MS, @@ -338,21 +304,10 @@ public class JobSchedulerServiceTest { @Test public void testGetMaxJobExecutionTimeMs() { - JobStatus jobDT = createJobStatus("testGetMaxJobExecutionTimeMs", - createJobInfo(7) - .setDataTransfer(true).setRequiredNetworkType(JobInfo.NETWORK_TYPE_ANY)); - JobStatus jobUI = createJobStatus("testGetMaxJobExecutionTimeMs", - createJobInfo(9)); // TODO(255371817): add setUserInitiated(true) JobStatus jobUIDT = createJobStatus("testGetMaxJobExecutionTimeMs", - // TODO(255371817): add setUserInitiated(true) createJobInfo(10) - .setDataTransfer(true).setRequiredNetworkType(JobInfo.NETWORK_TYPE_ANY)); - - spyOn(jobDT); - spyOn(jobUI); + .setUserInitiated(true).setRequiredNetworkType(JobInfo.NETWORK_TYPE_ANY)); spyOn(jobUIDT); - - when(jobUI.shouldTreatAsUserInitiatedJob()).thenReturn(true); when(jobUIDT.shouldTreatAsUserInitiatedJob()).thenReturn(true); QuotaController quotaController = mService.getQuotaController(); @@ -365,17 +320,9 @@ public class JobSchedulerServiceTest { .when(quotaController).getMaxJobExecutionTimeMsLocked(any()); grantRunUserInitiatedJobsPermission(true); - assertEquals(mService.mConstants.RUNTIME_DATA_TRANSFER_LIMIT_MS, - mService.getMaxJobExecutionTimeMs(jobDT)); - assertEquals(mService.mConstants.RUNTIME_USER_INITIATED_LIMIT_MS, - mService.getMaxJobExecutionTimeMs(jobUI)); assertEquals(mService.mConstants.RUNTIME_USER_INITIATED_DATA_TRANSFER_LIMIT_MS, mService.getMaxJobExecutionTimeMs(jobUIDT)); grantRunUserInitiatedJobsPermission(false); - assertEquals(mService.mConstants.RUNTIME_DATA_TRANSFER_LIMIT_MS, - mService.getMaxJobExecutionTimeMs(jobDT)); - assertEquals(mService.mConstants.RUNTIME_FREE_QUOTA_MAX_LIMIT_MS, - mService.getMaxJobExecutionTimeMs(jobUI)); assertEquals(mService.mConstants.RUNTIME_FREE_QUOTA_MAX_LIMIT_MS, mService.getMaxJobExecutionTimeMs(jobUIDT)); } @@ -478,7 +425,8 @@ public class JobSchedulerServiceTest { @Test public void testGetRescheduleJobForFailure_userStopped() { JobStatus uiJob = createJobStatus("testGetRescheduleJobForFailure", - createJobInfo().setUserInitiated(true)); + createJobInfo().setUserInitiated(true) + .setRequiredNetworkType(JobInfo.NETWORK_TYPE_ANY)); JobStatus uvJob = createJobStatus("testGetRescheduleJobForFailure", createJobInfo()); spyOn(uvJob); doReturn(true).when(uvJob).isUserVisibleJob(); diff --git a/services/tests/mockingservicestests/src/com/android/server/job/controllers/FlexibilityControllerTest.java b/services/tests/mockingservicestests/src/com/android/server/job/controllers/FlexibilityControllerTest.java index 1e65b380310fa..6bc552c7f32ed 100644 --- a/services/tests/mockingservicestests/src/com/android/server/job/controllers/FlexibilityControllerTest.java +++ b/services/tests/mockingservicestests/src/com/android/server/job/controllers/FlexibilityControllerTest.java @@ -619,7 +619,7 @@ public class FlexibilityControllerTest { @Test public void testExceptions_UserInitiated() { JobInfo.Builder jb = createJob(0); - jb.setUserInitiated(true); + jb.setUserInitiated(true).setRequiredNetworkType(JobInfo.NETWORK_TYPE_ANY); JobStatus js = createJobStatus("testExceptions_UserInitiated", jb); assertFalse(js.hasFlexibilityConstraint()); } diff --git a/services/tests/mockingservicestests/src/com/android/server/job/controllers/JobStatusTest.java b/services/tests/mockingservicestests/src/com/android/server/job/controllers/JobStatusTest.java index e6bc72f94f05b..5dc8ed58994d9 100644 --- a/services/tests/mockingservicestests/src/com/android/server/job/controllers/JobStatusTest.java +++ b/services/tests/mockingservicestests/src/com/android/server/job/controllers/JobStatusTest.java @@ -170,6 +170,7 @@ public class JobStatusTest { final JobInfo jobInfo = new JobInfo.Builder(101, new ComponentName("foo", "bar")) .setUserInitiated(true) + .setRequiredNetworkType(JobInfo.NETWORK_TYPE_ANY) .build(); JobStatus job = createJobStatus(jobInfo); assertTrue(job.canRunInBatterySaver()); @@ -216,6 +217,7 @@ public class JobStatusTest { final JobInfo jobInfo = new JobInfo.Builder(101, new ComponentName("foo", "bar")) .setUserInitiated(true) + .setRequiredNetworkType(JobInfo.NETWORK_TYPE_ANY) .build(); JobStatus job = createJobStatus(jobInfo); assertTrue(job.canRunInDoze()); @@ -236,6 +238,7 @@ public class JobStatusTest { // User-initiated jobs are always user-visible unless they've been demoted. jobInfo = new JobInfo.Builder(101, new ComponentName("foo", "bar")) .setUserInitiated(true) + .setRequiredNetworkType(JobInfo.NETWORK_TYPE_ANY) .build(); job = createJobStatus(jobInfo); @@ -507,6 +510,7 @@ public class JobStatusTest { jobInfo = new JobInfo.Builder(101, new ComponentName("foo", "bar")) .setUserInitiated(true) + .setRequiredNetworkType(JobInfo.NETWORK_TYPE_ANY) .build(); job = createJobStatus(jobInfo); diff --git a/services/tests/servicestests/src/com/android/server/job/PendingJobQueueTest.java b/services/tests/servicestests/src/com/android/server/job/PendingJobQueueTest.java index 23d708227e4f2..be1375310704c 100644 --- a/services/tests/servicestests/src/com/android/server/job/PendingJobQueueTest.java +++ b/services/tests/servicestests/src/com/android/server/job/PendingJobQueueTest.java @@ -16,6 +16,9 @@ package com.android.server.job; +import static android.app.job.JobInfo.NETWORK_TYPE_ANY; +import static android.app.job.JobInfo.NETWORK_TYPE_NONE; + import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; @@ -525,7 +528,9 @@ public class PendingJobQueueTest { final boolean ui = random.nextBoolean(); final boolean ej = !ui && random.nextBoolean(); JobStatus job = createJobStatus("testPendingJobSorting_Random", - createJobInfo(i).setExpedited(ej).setUserInitiated(ui), random.nextInt(250)); + createJobInfo(i).setExpedited(ej).setUserInitiated(ui) + .setRequiredNetworkType(ui ? NETWORK_TYPE_ANY : NETWORK_TYPE_NONE), + random.nextInt(250)); job.enqueueTime = random.nextInt(1_000_000); jobQueue.add(job); } @@ -562,7 +567,9 @@ public class PendingJobQueueTest { final boolean ui = random.nextBoolean(); final boolean ej = !ui && random.nextBoolean(); JobStatus job = createJobStatus("testPendingJobSortingTransitivity", - createJobInfo(i).setExpedited(ej).setUserInitiated(ui), random.nextInt(50)); + createJobInfo(i).setExpedited(ej).setUserInitiated(ui) + .setRequiredNetworkType(ui ? NETWORK_TYPE_ANY : NETWORK_TYPE_NONE), + random.nextInt(50)); job.enqueueTime = random.nextInt(1_000_000); job.overrideState = random.nextInt(4); jobQueue.add(job); @@ -586,7 +593,8 @@ public class PendingJobQueueTest { final boolean ui = random.nextFloat() < .02; final boolean ej = !ui && random.nextFloat() < .03; JobStatus job = createJobStatus("testPendingJobSortingTransitivity_Concentrated", - createJobInfo(i).setExpedited(ej).setUserInitiated(ui), + createJobInfo(i).setExpedited(ej).setUserInitiated(ui) + .setRequiredNetworkType(ui ? NETWORK_TYPE_ANY : NETWORK_TYPE_NONE), random.nextInt(20)); job.enqueueTime = random.nextInt(250); job.overrideState = random.nextFloat() < .01