Fix bug in createAndManageUser on non hsum devices
The recent changes for blocking createAndManageUser accidentally blocked it even on non-hsum devices if the DPC had specified the single_user mode in its manifest.
Bug: 336547982
Test: atest com.android.cts.devicepolicy.DeviceOwnerTest
Change-Id: I937c68eb1a6eef6cc26e18d7f17f651e4dac072e
diff --git a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java
index be235b3b..4f4d390 100644
--- a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java
+++ b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java
@@ -12413,7 +12413,8 @@
if (Flags.headlessDeviceOwnerSingleUserEnabled()) {
// Block this method if the device is in headless main user mode
Preconditions.checkCallAuthorization(
- getHeadlessDeviceOwnerModeForDeviceOwner()
+ !mInjector.userManagerIsHeadlessSystemUserMode()
+ || getHeadlessDeviceOwnerModeForDeviceOwner()
!= HEADLESS_DEVICE_OWNER_MODE_SINGLE_USER,
"createAndManageUser was called while in headless single user mode");
}
@@ -23472,10 +23473,12 @@
}
private boolean hasAdminPolicy(int adminPolicy, String callerPackageName) {
- CallerIdentity caller = getCallerIdentity(callerPackageName);
- ActiveAdmin deviceAdmin = getActiveAdminWithPolicyForUidLocked(
- null, adminPolicy, caller.getUid());
- return deviceAdmin != null;
+ synchronized (getLockObject()) {
+ CallerIdentity caller = getCallerIdentity(callerPackageName);
+ ActiveAdmin deviceAdmin = getActiveAdminWithPolicyForUidLocked(
+ null, adminPolicy, caller.getUid());
+ return deviceAdmin != null;
+ }
}
/**