diff options
Diffstat (limited to 'apex')
-rw-r--r-- | apex/jobscheduler/service/aconfig/job.aconfig | 7 | ||||
-rw-r--r-- | apex/jobscheduler/service/java/com/android/server/job/JobSchedulerService.java | 14 |
2 files changed, 21 insertions, 0 deletions
diff --git a/apex/jobscheduler/service/aconfig/job.aconfig b/apex/jobscheduler/service/aconfig/job.aconfig index e8568651eeaa..613b7842ae3a 100644 --- a/apex/jobscheduler/service/aconfig/job.aconfig +++ b/apex/jobscheduler/service/aconfig/job.aconfig @@ -58,3 +58,10 @@ flag { purpose: PURPOSE_BUGFIX } } + +flag { + name: "remove_user_during_user_switch" + namespace: "backstage_power" + description: "Remove started user if user will be stopped due to user switch" + bug: "321598070" +} 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 5f2b01a7304a..3d25ed5aa2b7 100644 --- a/apex/jobscheduler/service/java/com/android/server/job/JobSchedulerService.java +++ b/apex/jobscheduler/service/java/com/android/server/job/JobSchedulerService.java @@ -1669,6 +1669,20 @@ public class JobSchedulerService extends com.android.server.SystemService } @Override + public void onUserSwitching(@Nullable TargetUser from, @NonNull TargetUser to) { + if (!Flags.removeUserDuringUserSwitch() + || from == null + || !mActivityManagerInternal.isEarlyPackageKillEnabledForUserSwitch( + from.getUserIdentifier(), + to.getUserIdentifier())) { + return; + } + synchronized (mLock) { + mStartedUsers = ArrayUtils.removeInt(mStartedUsers, from.getUserIdentifier()); + } + } + + @Override public void onUserStopping(@NonNull TargetUser user) { synchronized (mLock) { mStartedUsers = ArrayUtils.removeInt(mStartedUsers, user.getUserIdentifier()); |