diff options
author | Ying Zheng <yizheng@google.com> | 2018-06-21 22:30:11 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2018-06-21 22:30:11 +0000 |
commit | c3cb52abdbd7dd9b0fb70947242f452440db736c (patch) | |
tree | d0ef11a61e241ce7d12bea60fabbf92b209bc146 | |
parent | 8c994a08faafbd2539ff3ce458608010dd82f2d9 (diff) | |
parent | 2f2d640a62ef9afbfe147d85e44ac28a4cb8a1fc (diff) | |
download | Car-c3cb52abdbd7dd9b0fb70947242f452440db736c.tar.gz |
Merge "Update set last active user to exclude ephemeral users." into pi-dev
4 files changed, 49 insertions, 12 deletions
diff --git a/car-lib/src/android/car/user/CarUserManagerHelper.java b/car-lib/src/android/car/user/CarUserManagerHelper.java index 41053536d3..a0f4e15d7b 100644 --- a/car-lib/src/android/car/user/CarUserManagerHelper.java +++ b/car-lib/src/android/car/user/CarUserManagerHelper.java @@ -161,7 +161,8 @@ public class CarUserManagerHelper { } /** - * Get user id for the initial user to boot into. + * Get user id for the initial user to boot into. This is only applicable for headless + * user 0 model. * * <p>If failed to retrieve the id stored in global settings or the retrieved id does not * exist on device, then return the user with smallest user id. @@ -184,7 +185,8 @@ public class CarUserManagerHelper { // If the last active user is system user or the user id doesn't exist on device, // return the smallest id or all users. if (lastActiveUserId == UserHandle.USER_SYSTEM || !isUserExist) { - Log.e(TAG, "Can't get last active user id or the user no longer exist."); + Log.e(TAG, "Can't get last active user id or the user no longer exist, user id: ." + + lastActiveUserId); lastActiveUserId = smallestUserId; } @@ -289,7 +291,7 @@ public class CarUserManagerHelper { for (Iterator<UserInfo> iterator = users.iterator(); iterator.hasNext(); ) { UserInfo userInfo = iterator.next(); if (userInfo.isEphemeral()) { - // Remove user that is not admin. + // Remove user that is ephemeral. iterator.remove(); } } @@ -417,6 +419,13 @@ public class CarUserManagerHelper { } /** + * Checks if the foreground user is ephemeral. + */ + public boolean isForegroundUserEphemeral() { + return getCurrentForegroundUserInfo().isEphemeral(); + } + + /** * Returns whether this user can be removed from the system. * * @param userInfo User to be removed diff --git a/service/src/com/android/car/user/CarUserService.java b/service/src/com/android/car/user/CarUserService.java index 46c762c41d..bc5f2025f7 100644 --- a/service/src/com/android/car/user/CarUserService.java +++ b/service/src/com/android/car/user/CarUserService.java @@ -103,9 +103,8 @@ public class CarUserService extends BroadcastReceiver implements CarServiceBase } } if (intent.getAction() == Intent.ACTION_USER_SWITCHED) { - UserInfo foregroundUser = mCarUserManagerHelper.getCurrentForegroundUserInfo(); // Update last active user if foreground user is not ephemeral. - if (!foregroundUser.isEphemeral() && !foregroundUser.isGuest()) { + if (!mCarUserManagerHelper.isForegroundUserEphemeral()) { mCarUserManagerHelper.setLastActiveUser( mCarUserManagerHelper.getCurrentForegroundUserId(), /* skipGlobalSettings= */ false); diff --git a/tests/carservice_unit_test/src/com/android/car/CarUserManagerHelperTest.java b/tests/carservice_unit_test/src/com/android/car/CarUserManagerHelperTest.java index ca6e027843..240ba87cc0 100644 --- a/tests/carservice_unit_test/src/com/android/car/CarUserManagerHelperTest.java +++ b/tests/carservice_unit_test/src/com/android/car/CarUserManagerHelperTest.java @@ -157,6 +157,29 @@ public class CarUserManagerHelperTest { } @Test + public void testGetAllPersistentUsers() { + // Create two non-ephemeral users. + UserInfo user1 = createUserInfoForId(mForegroundUserId); + UserInfo user2 = createUserInfoForId(mForegroundUserId + 1); + // Create two ephemeral users. + UserInfo user3 = new UserInfo( + /* id= */mForegroundUserId + 2, /* name = */ "user3", UserInfo.FLAG_EPHEMERAL); + UserInfo user4 = new UserInfo( + /* id= */mForegroundUserId + 3, /* name = */ "user4", UserInfo.FLAG_EPHEMERAL); + + List<UserInfo> testUsers = Arrays.asList(user1, user2, user3, user4); + + doReturn(new ArrayList<>(testUsers)).when(mUserManager).getUsers(true); + + // Should return all 4 users. + assertThat(mCarUserManagerHelper.getAllUsers()).hasSize(4); + + // Should return all non-ephemeral users. + assertThat(mCarUserManagerHelper.getAllPersistentUsers()).hasSize(2); + assertThat(mCarUserManagerHelper.getAllPersistentUsers()).containsExactly(user1, user2); + } + + @Test public void testUserCanBeRemoved() { UserInfo testInfo = new UserInfo(); diff --git a/tests/carservice_unit_test/src/com/android/car/user/CarUserServiceTest.java b/tests/carservice_unit_test/src/com/android/car/user/CarUserServiceTest.java index a6b48bf8f1..132a7ba9f5 100644 --- a/tests/carservice_unit_test/src/com/android/car/user/CarUserServiceTest.java +++ b/tests/carservice_unit_test/src/com/android/car/user/CarUserServiceTest.java @@ -28,6 +28,7 @@ import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.content.pm.UserInfo; +import android.os.UserHandle; import android.os.UserManager; import android.support.test.runner.AndroidJUnit4; @@ -110,7 +111,6 @@ public class CarUserServiceTest { UserInfo admin = new UserInfo(adminUserId, CarUserService.OWNER_NAME, UserInfo.FLAG_ADMIN); doReturn(users).when(mCarUserManagerHelper).getAllUsers(); - // doReturn(users).when(mCarUserManagerHelper.getAllUsers()); doReturn(admin).when(mCarUserManagerHelper).createNewAdminUser(CarUserService.OWNER_NAME); doReturn(true).when(mCarUserManagerHelper).switchToUser(admin); @@ -128,17 +128,23 @@ public class CarUserServiceTest { public void testDisableModifyAccountsForSystemUserOnFirstRun() { List<UserInfo> users = new ArrayList<>(); - int systemUserId = 0; - UserInfo user0 = new UserInfo(systemUserId, CarUserService.OWNER_NAME, UserInfo.FLAG_ADMIN); + UserInfo user0 = new UserInfo(); + user0.id = UserHandle.USER_SYSTEM; + int adminUserId = 10; + UserInfo admin = new UserInfo(adminUserId, CarUserService.OWNER_NAME, UserInfo.FLAG_ADMIN); doReturn(users).when(mCarUserManagerHelper).getAllUsers(); doReturn(user0).when(mCarUserManagerHelper).getSystemUserInfo(); + doReturn(admin).when(mCarUserManagerHelper).createNewAdminUser(CarUserService.OWNER_NAME); + doReturn(true).when(mCarUserManagerHelper).switchToUser(admin); mCarUserService.onReceive(mMockContext, new Intent(Intent.ACTION_LOCKED_BOOT_COMPLETED)); - verify(mCarUserManagerHelper). - setUserRestriction(user0, UserManager.DISALLOW_MODIFY_ACCOUNTS, true); + verify(mCarUserManagerHelper) + .setUserRestriction(user0, UserManager.DISALLOW_MODIFY_ACCOUNTS, true); + verify(mCarUserManagerHelper) + .setLastActiveUser(adminUserId, /* skipGlobalSetting= */ false); } /** @@ -159,7 +165,7 @@ public class CarUserServiceTest { users.add(secUser); doReturn(users).when(mCarUserManagerHelper).getAllUsers(); - doReturn(secUserId).when(mCarUserManagerHelper).getLastActiveUser(); + doReturn(secUserId).when(mCarUserManagerHelper).getInitialUser(); mCarUserService.onReceive(mMockContext, new Intent(Intent.ACTION_LOCKED_BOOT_COMPLETED)); @@ -174,7 +180,7 @@ public class CarUserServiceTest { public void testLastActiveUserUpdatedOnUserSwitch() { int lastActiveUserId = 11; - doReturn(false).when(mCarUserManagerHelper).isForegroundUserGuest(); + doReturn(false).when(mCarUserManagerHelper).isForegroundUserEphemeral(); doReturn(lastActiveUserId).when(mCarUserManagerHelper).getCurrentForegroundUserId(); mCarUserService.onReceive(mMockContext, |