From 6183cfe1f62775aad42c412b717515b2f0413675 Mon Sep 17 00:00:00 2001 From: Kholoud Mohamed Date: Tue, 26 Jan 2021 16:46:06 +0000 Subject: [PATCH] Add hack in provisionFullyManagedDevice to allow silent provisioning This hack allows silent provisioning tests to run, which we need until we have enough cts coverage for the API. Test: atest DeviceOwnerProvisioningHostsideTest Bug: 178187130 Change-Id: I1ae8c1cff9c401d5ee50eaea196b39d8bc948cc1 --- .../DevicePolicyManagerService.java | 23 +++++++++++++------ 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java index d235a7f0f3e99..4b1bae4d903ee 100644 --- a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java +++ b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java @@ -16220,12 +16220,16 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager { final long identity = Binder.clearCallingIdentity(); try { - int result = checkProvisioningPreConditionSkipPermission( - ACTION_PROVISION_MANAGED_DEVICE, deviceAdmin.getPackageName()); - if (result != CODE_OK) { - throw new ServiceSpecificException( - PROVISIONING_RESULT_PRE_CONDITION_FAILED, - "Provisioning preconditions failed with result: " + result); + // TODO(b/178187130): This check fails silent provisioning, uncomment once silent + // provisioning is no longer used. + if (false) { + int result = checkProvisioningPreConditionSkipPermission( + ACTION_PROVISION_MANAGED_DEVICE, deviceAdmin.getPackageName()); + if (result != CODE_OK) { + throw new ServiceSpecificException( + PROVISIONING_RESULT_PRE_CONDITION_FAILED, + "Provisioning preconditions failed with result: " + result); + } } setTimeAndTimezone(provisioningParams.getTimeZone(), provisioningParams.getLocalTime()); @@ -16333,6 +16337,11 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager { private boolean setActiveAdminAndDeviceOwner( @UserIdInt int userId, ComponentName adminComponent, String name) { enableAndSetActiveAdmin(userId, userId, adminComponent); - return setDeviceOwner(adminComponent, name, userId); + // TODO(b/178187130): Directly set DO and remove the check once silent provisioning is no + // longer used. + if (getDeviceOwnerComponent(/* callingUserOnly= */ true) == null) { + return setDeviceOwner(adminComponent, name, userId); + } + return true; } }