aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYing Zheng <yizheng@google.com>2018-06-21 10:05:58 -0700
committerYing Zheng <yizheng@google.com>2018-06-21 12:49:00 -0700
commit2f2d640a62ef9afbfe147d85e44ac28a4cb8a1fc (patch)
tree0c61ed773ae44d2abcd90e63a700b221f40c8831
parent12eecfd9600c0f48b3652733f60c29e70ad6650b (diff)
downloadCar-2f2d640a62ef9afbfe147d85e44ac28a4cb8a1fc.tar.gz
Update set last active user to exclude ephemeral users.
Bug: 110156344,78908555 Test: Unit test Change-Id: I4975184ef47adaeb472ea295b7d433cee24ea3a4
-rw-r--r--car-lib/src/android/car/user/CarUserManagerHelper.java15
-rw-r--r--service/src/com/android/car/user/CarUserService.java3
-rw-r--r--tests/carservice_unit_test/src/com/android/car/CarUserManagerHelperTest.java23
-rw-r--r--tests/carservice_unit_test/src/com/android/car/user/CarUserServiceTest.java20
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,