summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Yan Zhu <yanzhuyan@google.com> 2021-02-11 12:59:25 -0800
committer Felipe Leme <felipeal@google.com> 2021-02-17 19:54:49 -0800
commit0cb930a35fb360e933243b5cd7c5051236e5e44f (patch)
tree94f598fcc46321a394051fb0fb717d63792c4370
parent084588880855fd4ed0aa4dbd620d8a0653518d07 (diff)
Add additional constraint in DPMS for Automotive
Restricts setting DO for headless system user when there are only two users Bug: 170333009 Test: atest CustomDeviceOwnerTest#testCannotSetDeviceOwnerWhenSecondaryUserPresent Change-Id: I8a826fedf4faa17266dea039288342b91e142ee5
-rw-r--r--services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java17
1 files changed, 11 insertions, 6 deletions
diff --git a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java
index 604d1d6c010b..c6884870b2dd 100644
--- a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java
+++ b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java
@@ -10062,7 +10062,6 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager {
final int userId = user.id;
- // TODO(b/177547285): add CTS test
if (mInjector.userManagerIsHeadlessSystemUserMode()) {
ComponentName admin = mOwners.getDeviceOwnerComponent();
Slog.i(LOG_TAG, "Automatically setting profile owner (" + admin + ") on new user "
@@ -12834,8 +12833,10 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager {
if (mOwners.hasProfileOwner(deviceOwnerUserId)) {
return CODE_USER_HAS_PROFILE_OWNER;
}
+
+ boolean isHeadlessSystemUserMode = mInjector.userManagerIsHeadlessSystemUserMode();
// System user is always running in headless system user mode.
- if (!mInjector.userManagerIsHeadlessSystemUserMode()
+ if (!isHeadlessSystemUserMode
&& !mUserManager.isUserRunning(new UserHandle(deviceOwnerUserId))) {
return CODE_USER_NOT_RUNNING;
}
@@ -12843,7 +12844,7 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager {
return CODE_HAS_PAIRED;
}
- if (mInjector.userManagerIsHeadlessSystemUserMode()) {
+ if (isHeadlessSystemUserMode) {
if (deviceOwnerUserId != UserHandle.USER_SYSTEM) {
Slog.e(LOG_TAG, "In headless system user mode, "
+ "device owner can only be set on headless system user.");
@@ -12855,9 +12856,13 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager {
// If shell command runs after user setup completed check device status. Otherwise, OK.
if (mIsWatch || hasUserSetupCompleted(UserHandle.USER_SYSTEM)) {
// In non-headless system user mode, DO can be setup only if
- // there's no non-system user
- if (!mInjector.userManagerIsHeadlessSystemUserMode()
- && mUserManager.getUserCount() > 1) {
+ // there's no non-system user.
+ // In headless system user mode, DO can be setup only if there are
+ // two users: the headless system user and the foreground user.
+ // If there could be multiple foreground users, this constraint should be modified.
+
+ int maxNumberOfExistingUsers = isHeadlessSystemUserMode ? 2 : 1;
+ if (mUserManager.getUserCount() > maxNumberOfExistingUsers) {
return CODE_NONSYSTEM_USER_EXISTS;
}