From 84181f7db7e5f57bd750c19595b4b972a0409f43 Mon Sep 17 00:00:00 2001 From: Mayank Garg Date: Mon, 28 Sep 2020 13:23:09 -0700 Subject: [PATCH] Should not switch to a user with removal in progress Fix: 144506286 Test: atest FrameworksServicesTests:com.android.server.pm.UserManagerServiceUserInfoTest Change-Id: I465ea4c70421e5e84bbfcb50c3c6a87ae9ef2012 --- core/java/android/content/pm/UserInfo.java | 5 +++-- .../pm/UserManagerServiceUserInfoTest.java | 18 ++++++++++++++++++ 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/core/java/android/content/pm/UserInfo.java b/core/java/android/content/pm/UserInfo.java index 08b23b04f2aeb..d81dff8f2908a 100644 --- a/core/java/android/content/pm/UserInfo.java +++ b/core/java/android/content/pm/UserInfo.java @@ -366,8 +366,9 @@ public class UserInfo implements Parcelable { * @return true if this user can be switched to. **/ public boolean supportsSwitchTo() { - if (isEphemeral() && !isEnabled()) { - // Don't support switching to an ephemeral user with removal in progress. + if (partial || !isEnabled()) { + // Don't support switching to disabled or partial users, which includes users with + // removal in progress. return false; } if (preCreated) { diff --git a/services/tests/servicestests/src/com/android/server/pm/UserManagerServiceUserInfoTest.java b/services/tests/servicestests/src/com/android/server/pm/UserManagerServiceUserInfoTest.java index 0ccc02663dc50..2250185cf3d77 100644 --- a/services/tests/servicestests/src/com/android/server/pm/UserManagerServiceUserInfoTest.java +++ b/services/tests/servicestests/src/com/android/server/pm/UserManagerServiceUserInfoTest.java @@ -17,6 +17,7 @@ package com.android.server.pm; import static android.content.pm.UserInfo.FLAG_DEMO; +import static android.content.pm.UserInfo.FLAG_DISABLED; import static android.content.pm.UserInfo.FLAG_EPHEMERAL; import static android.content.pm.UserInfo.FLAG_FULL; import static android.content.pm.UserInfo.FLAG_GUEST; @@ -166,6 +167,23 @@ public class UserManagerServiceUserInfoTest { assertTrue(mUserManagerService.isUserOfType(testId, typeName)); } + /** Test UserInfo.supportsSwitchTo() for partial user. */ + @Test + public void testSupportSwitchTo_partial() throws Exception { + UserInfo userInfo = createUser(100, FLAG_FULL, null); + userInfo.partial = true; + assertFalse("Switching to a partial user should be disabled", + userInfo.supportsSwitchTo()); + } + + /** Test UserInfo.supportsSwitchTo() for disabled user. */ + @Test + public void testSupportSwitchTo_disabled() throws Exception { + UserInfo userInfo = createUser(100, FLAG_DISABLED, null); + assertFalse("Switching to a DISABLED user should be disabled", + userInfo.supportsSwitchTo()); + } + /** Test UserInfo.supportsSwitchTo() for precreated users. */ @Test public void testSupportSwitchTo_preCreated() throws Exception {