diff options
author | 2024-05-08 15:54:41 -0700 | |
---|---|---|
committer | 2024-08-15 13:01:14 -0700 | |
commit | 00f0fd9d93957cce014590e6e5f132fd85a5b948 (patch) | |
tree | 3a776be38765d31e8c1a69bafbbe4e18b8a16599 /apex | |
parent | 7f23739ff50bc83c4b14f6d8fac01f563db549ed (diff) |
Refactor JobScheduler to handle user switch via onUserSwitching method
JobSchedulerService will handle SystemService's onUserSwitching method
in order to remove the previous user from its internal started users
array in the case the previous user is stopped during user switch.
With respect to the stopping previous user apps feature, this will
prevent JobSchedulerService from restarting packages that were early
killed during the user switch system event.
Test: Manually run user switch on device
Test: atest frameworks/base/services/tests/mockingservicestests/src/com/android/server/job
Test: atest frameworks/base/services/tests/servicestests/src/com/android/server/job
Test: atest CtsJobSchedulerTestCases
Bug: 323200731
Flag: com.android.server.job.remove_user_during_user_switch
Change-Id: Ie2813482db061c8b2f21ce0731bbf5cf23897158
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()); |