diff options
4 files changed, 22 insertions, 7 deletions
diff --git a/core/java/android/app/ActivityManagerInternal.java b/core/java/android/app/ActivityManagerInternal.java index 39fc18d8b747..f1472dd002fd 100644 --- a/core/java/android/app/ActivityManagerInternal.java +++ b/core/java/android/app/ActivityManagerInternal.java @@ -81,6 +81,15 @@ public abstract class ActivityManagerInternal { String processName, String abiOverride, int uid, Runnable crashHandler); /** + * Called when a user has been deleted. This can happen during normal device usage + * or just at startup, when partially removed users are purged. Any state persisted by the + * ActivityManager should be purged now. + * + * @param userId The user being cleaned up. + */ + public abstract void onUserRemoved(@UserIdInt int userId); + + /** * Kill foreground apps from the specified user. */ public abstract void killForegroundAppsForUser(@UserIdInt int userId); diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java index 9b2743ca6b1d..0bd134c8dfac 100644 --- a/services/core/java/com/android/server/am/ActivityManagerService.java +++ b/services/core/java/com/android/server/am/ActivityManagerService.java @@ -18779,6 +18779,15 @@ public class ActivityManagerService extends IActivityManager.Stub } @Override + public void onUserRemoved(@UserIdInt int userId) { + // Clean up any ActivityTaskManager state (by telling it the user is stopped) + mAtmInternal.onUserStopped(userId); + // Clean up various services by removing the user + mBatteryStatsService.onUserRemoved(userId); + mUserController.onUserRemoved(userId); + } + + @Override public void killForegroundAppsForUser(@UserIdInt int userId) { synchronized (ActivityManagerService.this) { final ArrayList<ProcessRecord> procs = new ArrayList<>(); diff --git a/services/core/java/com/android/server/pm/UserManagerService.java b/services/core/java/com/android/server/pm/UserManagerService.java index 4561d2e7a8b2..e6af86e52035 100644 --- a/services/core/java/com/android/server/pm/UserManagerService.java +++ b/services/core/java/com/android/server/pm/UserManagerService.java @@ -3890,9 +3890,8 @@ public class UserManagerService extends IUserManager.Stub { new Thread() { @Override public void run() { - // Clean up any ActivityTaskManager state - LocalServices.getService(ActivityTaskManagerInternal.class) - .onUserStopped(userId); + LocalServices.getService(ActivityManagerInternal.class) + .onUserRemoved(userId); removeUserState(userId); } }.start(); diff --git a/services/core/java/com/android/server/wm/ActivityTaskManagerInternal.java b/services/core/java/com/android/server/wm/ActivityTaskManagerInternal.java index d48df9ff8e6c..4181f4be30f7 100644 --- a/services/core/java/com/android/server/wm/ActivityTaskManagerInternal.java +++ b/services/core/java/com/android/server/wm/ActivityTaskManagerInternal.java @@ -306,11 +306,9 @@ public abstract class ActivityTaskManagerInternal { public abstract void setAllowAppSwitches(@NonNull String type, int uid, int userId); /** - * Called when a user has been deleted. This can happen during normal device usage - * or just at startup, when partially removed users are purged. Any state persisted by the - * ActivityManager should be purged now. + * Called when a user has been stopped. * - * @param userId The user being cleaned up. + * @param userId The user being stopped. */ public abstract void onUserStopped(int userId); public abstract boolean isGetTasksAllowed(String caller, int callingPid, int callingUid); |