diff options
| -rw-r--r-- | apex/jobscheduler/service/java/com/android/server/job/JobSchedulerService.java | 29 | ||||
| -rw-r--r-- | services/tests/mockingservicestests/src/com/android/server/job/JobSchedulerServiceTest.java | 19 |
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)); } /** |