summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Amith Yamasani <yamasani@google.com> 2014-12-09 12:30:04 -0800
committer Amith Yamasani <yamasani@google.com> 2014-12-10 14:21:48 -0800
commit6f96a44df3457350f2d290fb811319bb888cc19c (patch)
tree161e7d26cb99720855306ac7f0fe4bd1ee7dfb23
parent6bdbae07cf9b3929dca471072bea7001f7996efb (diff)
Stop guest user on exiting, to conserve resources
Bug: 18672730 Change-Id: I17bc26ce2e10ceebeb18b75565daf21aa7df7774
-rwxr-xr-xservices/core/java/com/android/server/am/ActivityManagerService.java25
1 files changed, 25 insertions, 0 deletions
diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java
index 1227148421af..e0f8aa6a676b 100755
--- a/services/core/java/com/android/server/am/ActivityManagerService.java
+++ b/services/core/java/com/android/server/am/ActivityManagerService.java
@@ -18969,6 +18969,31 @@ public final class ActivityManagerService extends ActivityManagerNative
}
mUserSwitchObservers.finishBroadcast();
}
+ stopGuestUserIfBackground();
+ }
+
+ /**
+ * Stops the guest user if it has gone to the background.
+ */
+ private void stopGuestUserIfBackground() {
+ synchronized (this) {
+ final int num = mUserLru.size();
+ for (int i = 0; i < num; i++) {
+ Integer oldUserId = mUserLru.get(i);
+ UserStartedState oldUss = mStartedUsers.get(oldUserId);
+ if (oldUserId == UserHandle.USER_OWNER || oldUserId == mCurrentUserId
+ || oldUss.mState == UserStartedState.STATE_STOPPING
+ || oldUss.mState == UserStartedState.STATE_SHUTDOWN) {
+ continue;
+ }
+ UserInfo userInfo = mUserManager.getUserInfo(oldUserId);
+ if (userInfo.isGuest()) {
+ // This is a user to be stopped.
+ stopUserLocked(oldUserId, null);
+ break;
+ }
+ }
+ }
}
void scheduleStartProfilesLocked() {