summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--apex/jobscheduler/service/java/com/android/server/job/JobSchedulerService.java29
-rw-r--r--services/tests/mockingservicestests/src/com/android/server/job/JobSchedulerServiceTest.java19
2 files changed, 42 insertions, 6 deletions
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 e0df22c5e31d..de5bed295298 100644
--- a/apex/jobscheduler/service/java/com/android/server/job/JobSchedulerService.java
+++ b/apex/jobscheduler/service/java/com/android/server/job/JobSchedulerService.java
@@ -3212,14 +3212,23 @@ public class JobSchedulerService extends com.android.server.SystemService
/** Returns the maximum amount of time this job could run for. */
public long getMaxJobExecutionTimeMs(JobStatus job) {
synchronized (mLock) {
- final boolean shouldTreatAsDataTransfer = job.getJob().isDataTransfer()
- && checkRunLongJobsPermission(job.getSourceUid(), job.getSourcePackageName());
+ final boolean allowLongerJob;
+ final boolean isDataTransfer = job.getJob().isDataTransfer();
+ if (isDataTransfer || job.shouldTreatAsUserInitiated()) {
+ allowLongerJob =
+ checkRunLongJobsPermission(job.getSourceUid(), job.getSourcePackageName());
+ } else {
+ allowLongerJob = false;
+ }
if (job.shouldTreatAsUserInitiated()) {
- if (shouldTreatAsDataTransfer) {
+ if (isDataTransfer && allowLongerJob) {
return mConstants.RUNTIME_USER_INITIATED_DATA_TRANSFER_LIMIT_MS;
}
- return mConstants.RUNTIME_USER_INITIATED_LIMIT_MS;
- } else if (shouldTreatAsDataTransfer) {
+ if (allowLongerJob) {
+ return mConstants.RUNTIME_USER_INITIATED_LIMIT_MS;
+ }
+ return mConstants.RUNTIME_FREE_QUOTA_MAX_LIMIT_MS;
+ } else if (isDataTransfer && allowLongerJob) {
return mConstants.RUNTIME_DATA_TRANSFER_LIMIT_MS;
}
return Math.min(mConstants.RUNTIME_FREE_QUOTA_MAX_LIMIT_MS,
@@ -4168,6 +4177,16 @@ public class JobSchedulerService extends com.android.server.SystemService
return mConnectivityController;
}
+ @VisibleForTesting
+ protected QuotaController getQuotaController() {
+ return mQuotaController;
+ }
+
+ @VisibleForTesting
+ protected TareController getTareController() {
+ return mTareController;
+ }
+
// Shell command infrastructure
int getJobState(PrintWriter pw, String pkgName, int userId, int jobId) {
try {
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 8e4849043984..0eeebca61094 100644
--- a/services/tests/mockingservicestests/src/com/android/server/job/JobSchedulerServiceTest.java
+++ b/services/tests/mockingservicestests/src/com/android/server/job/JobSchedulerServiceTest.java
@@ -68,6 +68,8 @@ import com.android.server.PowerAllowlistInternal;
import com.android.server.SystemServiceManager;
import com.android.server.job.controllers.ConnectivityController;
import com.android.server.job.controllers.JobStatus;
+import com.android.server.job.controllers.QuotaController;
+import com.android.server.job.controllers.TareController;
import com.android.server.pm.UserManagerInternal;
import com.android.server.usage.AppStandbyInternal;
@@ -336,14 +338,29 @@ public class JobSchedulerServiceTest {
when(jobUI.shouldTreatAsUserInitiated()).thenReturn(true);
when(jobUIDT.shouldTreatAsUserInitiated()).thenReturn(true);
- grantRunLongJobsPermission(true);
+ QuotaController quotaController = mService.getQuotaController();
+ spyOn(quotaController);
+ TareController tareController = mService.getTareController();
+ spyOn(tareController);
+ doReturn(mService.mConstants.RUNTIME_FREE_QUOTA_MAX_LIMIT_MS)
+ .when(quotaController).getMaxJobExecutionTimeMsLocked(any());
+ doReturn(mService.mConstants.RUNTIME_FREE_QUOTA_MAX_LIMIT_MS)
+ .when(quotaController).getMaxJobExecutionTimeMsLocked(any());
+ grantRunLongJobsPermission(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));
+ grantRunLongJobsPermission(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));
}
/**