Loading apex/jobscheduler/service/java/com/android/server/job/controllers/BackgroundJobsController.java +16 −3 Original line number Original line Diff line number Diff line Loading @@ -126,6 +126,7 @@ public final class BackgroundJobsController extends StateController { } } @Override @Override @GuardedBy("mLock") public void startTrackingLocked() { public void startTrackingLocked() { mAppStateTracker.addListener(mForceAppStandbyListener); mAppStateTracker.addListener(mForceAppStandbyListener); final IntentFilter filter = new IntentFilter(); final IntentFilter filter = new IntentFilter(); Loading @@ -137,15 +138,18 @@ public final class BackgroundJobsController extends StateController { } } @Override @Override @GuardedBy("mLock") public void maybeStartTrackingJobLocked(JobStatus jobStatus, JobStatus lastJob) { public void maybeStartTrackingJobLocked(JobStatus jobStatus, JobStatus lastJob) { updateSingleJobRestrictionLocked(jobStatus, sElapsedRealtimeClock.millis(), UNKNOWN); updateSingleJobRestrictionLocked(jobStatus, sElapsedRealtimeClock.millis(), UNKNOWN); } } @Override @Override @GuardedBy("mLock") public void maybeStopTrackingJobLocked(JobStatus jobStatus, JobStatus incomingJob) { public void maybeStopTrackingJobLocked(JobStatus jobStatus, JobStatus incomingJob) { } } @Override @Override @GuardedBy("mLock") public void evaluateStateLocked(JobStatus jobStatus) { public void evaluateStateLocked(JobStatus jobStatus) { if (jobStatus.isRequestedExpeditedJob()) { if (jobStatus.isRequestedExpeditedJob()) { // Only requested-EJs could have their run-in-bg constraint change outside of something // Only requested-EJs could have their run-in-bg constraint change outside of something Loading @@ -155,11 +159,13 @@ public final class BackgroundJobsController extends StateController { } } @Override @Override @GuardedBy("mLock") public void onAppRemovedLocked(String packageName, int uid) { public void onAppRemovedLocked(String packageName, int uid) { mPackageStoppedState.delete(uid, packageName); mPackageStoppedState.delete(uid, packageName); } } @Override @Override @GuardedBy("mLock") public void onUserRemovedLocked(int userId) { public void onUserRemovedLocked(int userId) { for (int u = mPackageStoppedState.numMaps() - 1; u >= 0; --u) { for (int u = mPackageStoppedState.numMaps() - 1; u >= 0; --u) { final int uid = mPackageStoppedState.keyAt(u); final int uid = mPackageStoppedState.keyAt(u); Loading @@ -170,6 +176,7 @@ public final class BackgroundJobsController extends StateController { } } @Override @Override @GuardedBy("mLock") public void dumpControllerStateLocked(final IndentingPrintWriter pw, public void dumpControllerStateLocked(final IndentingPrintWriter pw, final Predicate<JobStatus> predicate) { final Predicate<JobStatus> predicate) { pw.println("Aconfig flags:"); pw.println("Aconfig flags:"); Loading Loading @@ -223,6 +230,7 @@ public final class BackgroundJobsController extends StateController { } } @Override @Override @GuardedBy("mLock") public void dumpControllerStateLocked(ProtoOutputStream proto, long fieldId, public void dumpControllerStateLocked(ProtoOutputStream proto, long fieldId, Predicate<JobStatus> predicate) { Predicate<JobStatus> predicate) { final long token = proto.start(fieldId); final long token = proto.start(fieldId); Loading Loading @@ -260,14 +268,17 @@ public final class BackgroundJobsController extends StateController { proto.end(token); proto.end(token); } } @GuardedBy("mLock") private void updateAllJobRestrictionsLocked() { private void updateAllJobRestrictionsLocked() { updateJobRestrictionsLocked(/*filterUid=*/ -1, UNKNOWN); updateJobRestrictionsLocked(/*filterUid=*/ -1, UNKNOWN); } } @GuardedBy("mLock") private void updateJobRestrictionsForUidLocked(int uid, boolean isActive) { private void updateJobRestrictionsForUidLocked(int uid, boolean isActive) { updateJobRestrictionsLocked(uid, (isActive) ? KNOWN_ACTIVE : KNOWN_INACTIVE); updateJobRestrictionsLocked(uid, (isActive) ? KNOWN_ACTIVE : KNOWN_INACTIVE); } } @GuardedBy("mLock") private void updateJobRestrictionsLocked(int filterUid, int newActiveState) { private void updateJobRestrictionsLocked(int filterUid, int newActiveState) { mUpdateJobFunctor.prepare(newActiveState); mUpdateJobFunctor.prepare(newActiveState); Loading Loading @@ -295,7 +306,8 @@ public final class BackgroundJobsController extends StateController { } } } } private boolean isPackageStopped(String packageName, int uid) { @GuardedBy("mLock") private boolean isPackageStoppedLocked(String packageName, int uid) { if (mPackageStoppedState.contains(uid, packageName)) { if (mPackageStoppedState.contains(uid, packageName)) { return mPackageStoppedState.get(uid, packageName); return mPackageStoppedState.get(uid, packageName); } } Loading @@ -304,19 +316,20 @@ public final class BackgroundJobsController extends StateController { return isStopped; return isStopped; } } @GuardedBy("mLock") boolean updateSingleJobRestrictionLocked(JobStatus jobStatus, final long nowElapsed, boolean updateSingleJobRestrictionLocked(JobStatus jobStatus, final long nowElapsed, int activeState) { int activeState) { final int uid = jobStatus.getSourceUid(); final int uid = jobStatus.getSourceUid(); final String packageName = jobStatus.getSourcePackageName(); final String packageName = jobStatus.getSourcePackageName(); final boolean isSourcePkgStopped = final boolean isSourcePkgStopped = isPackageStopped(jobStatus.getSourcePackageName(), jobStatus.getSourceUid()); isPackageStoppedLocked(jobStatus.getSourcePackageName(), jobStatus.getSourceUid()); final boolean isCallingPkgStopped; final boolean isCallingPkgStopped; if (!jobStatus.isProxyJob()) { if (!jobStatus.isProxyJob()) { isCallingPkgStopped = isSourcePkgStopped; isCallingPkgStopped = isSourcePkgStopped; } else { } else { isCallingPkgStopped = isCallingPkgStopped = isPackageStopped(jobStatus.getCallingPackageName(), jobStatus.getUid()); isPackageStoppedLocked(jobStatus.getCallingPackageName(), jobStatus.getUid()); } } final boolean isStopped = android.content.pm.Flags.stayStopped() final boolean isStopped = android.content.pm.Flags.stayStopped() && (isCallingPkgStopped || isSourcePkgStopped); && (isCallingPkgStopped || isSourcePkgStopped); Loading services/tests/mockingservicestests/src/com/android/server/job/controllers/BackgroundJobsControllerTest.java +1 −1 Original line number Original line Diff line number Diff line /* /* * Copyright (C) 2018 The Android Open Source Project * Copyright (C) 2023 The Android Open Source Project * * * Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License. Loading Loading
apex/jobscheduler/service/java/com/android/server/job/controllers/BackgroundJobsController.java +16 −3 Original line number Original line Diff line number Diff line Loading @@ -126,6 +126,7 @@ public final class BackgroundJobsController extends StateController { } } @Override @Override @GuardedBy("mLock") public void startTrackingLocked() { public void startTrackingLocked() { mAppStateTracker.addListener(mForceAppStandbyListener); mAppStateTracker.addListener(mForceAppStandbyListener); final IntentFilter filter = new IntentFilter(); final IntentFilter filter = new IntentFilter(); Loading @@ -137,15 +138,18 @@ public final class BackgroundJobsController extends StateController { } } @Override @Override @GuardedBy("mLock") public void maybeStartTrackingJobLocked(JobStatus jobStatus, JobStatus lastJob) { public void maybeStartTrackingJobLocked(JobStatus jobStatus, JobStatus lastJob) { updateSingleJobRestrictionLocked(jobStatus, sElapsedRealtimeClock.millis(), UNKNOWN); updateSingleJobRestrictionLocked(jobStatus, sElapsedRealtimeClock.millis(), UNKNOWN); } } @Override @Override @GuardedBy("mLock") public void maybeStopTrackingJobLocked(JobStatus jobStatus, JobStatus incomingJob) { public void maybeStopTrackingJobLocked(JobStatus jobStatus, JobStatus incomingJob) { } } @Override @Override @GuardedBy("mLock") public void evaluateStateLocked(JobStatus jobStatus) { public void evaluateStateLocked(JobStatus jobStatus) { if (jobStatus.isRequestedExpeditedJob()) { if (jobStatus.isRequestedExpeditedJob()) { // Only requested-EJs could have their run-in-bg constraint change outside of something // Only requested-EJs could have their run-in-bg constraint change outside of something Loading @@ -155,11 +159,13 @@ public final class BackgroundJobsController extends StateController { } } @Override @Override @GuardedBy("mLock") public void onAppRemovedLocked(String packageName, int uid) { public void onAppRemovedLocked(String packageName, int uid) { mPackageStoppedState.delete(uid, packageName); mPackageStoppedState.delete(uid, packageName); } } @Override @Override @GuardedBy("mLock") public void onUserRemovedLocked(int userId) { public void onUserRemovedLocked(int userId) { for (int u = mPackageStoppedState.numMaps() - 1; u >= 0; --u) { for (int u = mPackageStoppedState.numMaps() - 1; u >= 0; --u) { final int uid = mPackageStoppedState.keyAt(u); final int uid = mPackageStoppedState.keyAt(u); Loading @@ -170,6 +176,7 @@ public final class BackgroundJobsController extends StateController { } } @Override @Override @GuardedBy("mLock") public void dumpControllerStateLocked(final IndentingPrintWriter pw, public void dumpControllerStateLocked(final IndentingPrintWriter pw, final Predicate<JobStatus> predicate) { final Predicate<JobStatus> predicate) { pw.println("Aconfig flags:"); pw.println("Aconfig flags:"); Loading Loading @@ -223,6 +230,7 @@ public final class BackgroundJobsController extends StateController { } } @Override @Override @GuardedBy("mLock") public void dumpControllerStateLocked(ProtoOutputStream proto, long fieldId, public void dumpControllerStateLocked(ProtoOutputStream proto, long fieldId, Predicate<JobStatus> predicate) { Predicate<JobStatus> predicate) { final long token = proto.start(fieldId); final long token = proto.start(fieldId); Loading Loading @@ -260,14 +268,17 @@ public final class BackgroundJobsController extends StateController { proto.end(token); proto.end(token); } } @GuardedBy("mLock") private void updateAllJobRestrictionsLocked() { private void updateAllJobRestrictionsLocked() { updateJobRestrictionsLocked(/*filterUid=*/ -1, UNKNOWN); updateJobRestrictionsLocked(/*filterUid=*/ -1, UNKNOWN); } } @GuardedBy("mLock") private void updateJobRestrictionsForUidLocked(int uid, boolean isActive) { private void updateJobRestrictionsForUidLocked(int uid, boolean isActive) { updateJobRestrictionsLocked(uid, (isActive) ? KNOWN_ACTIVE : KNOWN_INACTIVE); updateJobRestrictionsLocked(uid, (isActive) ? KNOWN_ACTIVE : KNOWN_INACTIVE); } } @GuardedBy("mLock") private void updateJobRestrictionsLocked(int filterUid, int newActiveState) { private void updateJobRestrictionsLocked(int filterUid, int newActiveState) { mUpdateJobFunctor.prepare(newActiveState); mUpdateJobFunctor.prepare(newActiveState); Loading Loading @@ -295,7 +306,8 @@ public final class BackgroundJobsController extends StateController { } } } } private boolean isPackageStopped(String packageName, int uid) { @GuardedBy("mLock") private boolean isPackageStoppedLocked(String packageName, int uid) { if (mPackageStoppedState.contains(uid, packageName)) { if (mPackageStoppedState.contains(uid, packageName)) { return mPackageStoppedState.get(uid, packageName); return mPackageStoppedState.get(uid, packageName); } } Loading @@ -304,19 +316,20 @@ public final class BackgroundJobsController extends StateController { return isStopped; return isStopped; } } @GuardedBy("mLock") boolean updateSingleJobRestrictionLocked(JobStatus jobStatus, final long nowElapsed, boolean updateSingleJobRestrictionLocked(JobStatus jobStatus, final long nowElapsed, int activeState) { int activeState) { final int uid = jobStatus.getSourceUid(); final int uid = jobStatus.getSourceUid(); final String packageName = jobStatus.getSourcePackageName(); final String packageName = jobStatus.getSourcePackageName(); final boolean isSourcePkgStopped = final boolean isSourcePkgStopped = isPackageStopped(jobStatus.getSourcePackageName(), jobStatus.getSourceUid()); isPackageStoppedLocked(jobStatus.getSourcePackageName(), jobStatus.getSourceUid()); final boolean isCallingPkgStopped; final boolean isCallingPkgStopped; if (!jobStatus.isProxyJob()) { if (!jobStatus.isProxyJob()) { isCallingPkgStopped = isSourcePkgStopped; isCallingPkgStopped = isSourcePkgStopped; } else { } else { isCallingPkgStopped = isCallingPkgStopped = isPackageStopped(jobStatus.getCallingPackageName(), jobStatus.getUid()); isPackageStoppedLocked(jobStatus.getCallingPackageName(), jobStatus.getUid()); } } final boolean isStopped = android.content.pm.Flags.stayStopped() final boolean isStopped = android.content.pm.Flags.stayStopped() && (isCallingPkgStopped || isSourcePkgStopped); && (isCallingPkgStopped || isSourcePkgStopped); Loading
services/tests/mockingservicestests/src/com/android/server/job/controllers/BackgroundJobsControllerTest.java +1 −1 Original line number Original line Diff line number Diff line /* /* * Copyright (C) 2018 The Android Open Source Project * Copyright (C) 2023 The Android Open Source Project * * * Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License. Loading