diff options
Diffstat (limited to 'apex')
3 files changed, 22 insertions, 6 deletions
diff --git a/apex/jobscheduler/framework/java/android/app/job/JobParameters.java b/apex/jobscheduler/framework/java/android/app/job/JobParameters.java index 4c98b5fd3b56..62c90dfa8a86 100644 --- a/apex/jobscheduler/framework/java/android/app/job/JobParameters.java +++ b/apex/jobscheduler/framework/java/android/app/job/JobParameters.java @@ -54,7 +54,8 @@ public class JobParameters implements Parcelable { * * @hide */ - public static final int REASON_RESTRAINED = JobProtoEnums.STOP_REASON_RESTRAINED; // 6. + public static final int REASON_RESTRICTED_BUCKET = + JobProtoEnums.STOP_REASON_RESTRICTED_BUCKET; // 6. /** * All the stop reason codes. This should be regarded as an immutable array at runtime. @@ -72,7 +73,7 @@ public class JobParameters implements Parcelable { REASON_TIMEOUT, REASON_DEVICE_IDLE, REASON_DEVICE_THERMAL, - REASON_RESTRAINED, + REASON_RESTRICTED_BUCKET, }; /** @@ -88,7 +89,7 @@ public class JobParameters implements Parcelable { case REASON_TIMEOUT: return "timeout"; case REASON_DEVICE_IDLE: return "device_idle"; case REASON_DEVICE_THERMAL: return "thermal"; - case REASON_RESTRAINED: return "restrained"; + case REASON_RESTRICTED_BUCKET: return "restricted_bucket"; default: return "unknown:" + reasonCode; } } 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 c1e529f3f966..8fc7495cb3e7 100644 --- a/apex/jobscheduler/service/java/com/android/server/job/JobSchedulerService.java +++ b/apex/jobscheduler/service/java/com/android/server/job/JobSchedulerService.java @@ -1955,9 +1955,19 @@ public class JobSchedulerService extends com.android.server.SystemService continue; } if (!running.isReady()) { - serviceContext.cancelExecutingJobLocked( - JobParameters.REASON_CONSTRAINTS_NOT_SATISFIED, - "cancelled due to unsatisfied constraints"); + // If a restricted job doesn't have dynamic constraints satisfied, assume that's + // the reason the job is being stopped, instead of because of other constraints + // not being satisfied. + if (running.getEffectiveStandbyBucket() == RESTRICTED_INDEX + && !running.areDynamicConstraintsSatisfied()) { + serviceContext.cancelExecutingJobLocked( + JobParameters.REASON_RESTRICTED_BUCKET, + "cancelled due to restricted bucket"); + } else { + serviceContext.cancelExecutingJobLocked( + JobParameters.REASON_CONSTRAINTS_NOT_SATISFIED, + "cancelled due to unsatisfied constraints"); + } } else { final JobRestriction restriction = checkIfRestricted(running); if (restriction != null) { diff --git a/apex/jobscheduler/service/java/com/android/server/job/controllers/JobStatus.java b/apex/jobscheduler/service/java/com/android/server/job/controllers/JobStatus.java index b63cc1918a7a..6c71c54c8b3f 100644 --- a/apex/jobscheduler/service/java/com/android/server/job/controllers/JobStatus.java +++ b/apex/jobscheduler/service/java/com/android/server/job/controllers/JobStatus.java @@ -1293,6 +1293,11 @@ public final class JobStatus { CONSTRAINT_CHARGING | CONSTRAINT_BATTERY_NOT_LOW | CONSTRAINT_STORAGE_NOT_LOW | CONSTRAINT_TIMING_DELAY | CONSTRAINT_IDLE; + /** Returns true whenever all dynamically set constraints are satisfied. */ + public boolean areDynamicConstraintsSatisfied() { + return mReadyDynamicSatisfied; + } + /** * @return Whether the constraints set on this job are satisfied. */ |