summaryrefslogtreecommitdiff
path: root/apex
diff options
context:
space:
mode:
author Jahdiel Alvarez <jahdiel@google.com> 2024-05-08 15:54:41 -0700
committer Jahdiel Alvarez <jahdiel@google.com> 2024-08-15 13:01:14 -0700
commit00f0fd9d93957cce014590e6e5f132fd85a5b948 (patch)
tree3a776be38765d31e8c1a69bafbbe4e18b8a16599 /apex
parent7f23739ff50bc83c4b14f6d8fac01f563db549ed (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.aconfig7
-rw-r--r--apex/jobscheduler/service/java/com/android/server/job/JobSchedulerService.java14
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());