diff options
| author | 2016-06-20 17:25:12 +0100 | |
|---|---|---|
| committer | 2016-06-22 10:21:16 +0100 | |
| commit | 1219c924bdf98fd5342fe5bb7cd09da1012d2e1a (patch) | |
| tree | 76b39117bee8fc4e149400338850170d131d8e93 | |
| parent | 70b6cd903ee7ccca80d55bec4d8510da7cc9c0bf (diff) | |
Don't allow showing an activity if user is stopping or shutting down.
BUG:29264996
Change-Id: I9fc97c5dc37e6d5656b82b277954b5963eb345c4
3 files changed, 13 insertions, 3 deletions
diff --git a/services/core/java/com/android/server/am/ActivityStackSupervisor.java b/services/core/java/com/android/server/am/ActivityStackSupervisor.java index 738622fd923b..108cabbd3528 100644 --- a/services/core/java/com/android/server/am/ActivityStackSupervisor.java +++ b/services/core/java/com/android/server/am/ActivityStackSupervisor.java @@ -3023,8 +3023,9 @@ public final class ActivityStackSupervisor implements DisplayListener { /** Checks whether the activity should be shown for current user. */ boolean okToShowLocked(ActivityRecord r) { - return r != null && (isCurrentProfileLocked(r.userId) - || (r.info.flags & FLAG_SHOW_FOR_ALL_USERS) != 0); + return r != null && ((r.info.flags & FLAG_SHOW_FOR_ALL_USERS) != 0 + || (isCurrentProfileLocked(r.userId) + && !mService.mUserController.isUserStoppingOrShuttingDownLocked(r.userId))); } final ArrayList<ActivityRecord> processStoppingActivitiesLocked(boolean remove) { diff --git a/services/core/java/com/android/server/am/UserController.java b/services/core/java/com/android/server/am/UserController.java index 4380af335581..b685dd3f6771 100644 --- a/services/core/java/com/android/server/am/UserController.java +++ b/services/core/java/com/android/server/am/UserController.java @@ -1335,6 +1335,15 @@ final class UserController { return mStartedUserArray; } + boolean isUserStoppingOrShuttingDownLocked(int userId) { + UserState state = getStartedUserStateLocked(userId); + if (state == null) { + return false; + } + return state.state == UserState.STATE_STOPPING + || state.state == UserState.STATE_SHUTDOWN; + } + boolean isUserRunningLocked(int userId, int flags) { UserState state = getStartedUserStateLocked(userId); if (state == null) { diff --git a/services/core/java/com/android/server/pm/UserManagerService.java b/services/core/java/com/android/server/pm/UserManagerService.java index 4c515f0fc87e..d8a1c779f77e 100644 --- a/services/core/java/com/android/server/pm/UserManagerService.java +++ b/services/core/java/com/android/server/pm/UserManagerService.java @@ -732,9 +732,9 @@ public class UserManagerService extends IUserManager.Stub { long identity = Binder.clearCallingIdentity(); try { if (enableQuietMode) { + ActivityManagerNative.getDefault().stopUser(userHandle, /* force */true, null); LocalServices.getService(ActivityManagerInternal.class) .killForegroundAppsForUser(userHandle); - ActivityManagerNative.getDefault().stopUser(userHandle, /* force */true, null); } else { ActivityManagerNative.getDefault().startUserInBackground(userHandle); } |