Merge "Allow provisioning state transition _PROFILE_FINALIZED->_USER_UNMANAGED" into sc-dev

This commit is contained in:
TreeHugger Robot
2021-04-16 00:37:19 +00:00
committed by Android (Google) Code Review
2 changed files with 19 additions and 1 deletions

View File

@@ -96,6 +96,7 @@ import static android.app.admin.DevicePolicyManager.PROVISIONING_RESULT_REMOVE_N
import static android.app.admin.DevicePolicyManager.PROVISIONING_RESULT_SETTING_PROFILE_OWNER_FAILED;
import static android.app.admin.DevicePolicyManager.PROVISIONING_RESULT_SET_DEVICE_OWNER_FAILED;
import static android.app.admin.DevicePolicyManager.PROVISIONING_RESULT_STARTING_PROFILE_FAILED;
import static android.app.admin.DevicePolicyManager.STATE_USER_UNMANAGED;
import static android.app.admin.DevicePolicyManager.WIPE_EUICC;
import static android.app.admin.DevicePolicyManager.WIPE_EXTERNAL_STORAGE;
import static android.app.admin.DevicePolicyManager.WIPE_RESET_PROTECTION_DATA;
@@ -8735,7 +8736,8 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager {
final CallerIdentity caller = getCallerIdentity();
if (userHandle != mOwners.getDeviceOwnerUserId() && !mOwners.hasProfileOwner(userHandle)
&& getManagedUserId(userHandle) == -1) {
&& getManagedUserId(userHandle) == -1
&& newState != STATE_USER_UNMANAGED) {
// No managed device, user or profile, so setting provisioning state makes no sense.
throw new IllegalStateException("Not allowed to change provisioning state unless a "
+ "device or profile owner is set.");
@@ -8798,6 +8800,12 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager {
case DevicePolicyManager.STATE_USER_SETUP_FINALIZED:
// Cannot transition out of finalized.
break;
case DevicePolicyManager.STATE_USER_PROFILE_FINALIZED:
// Should only move to an unmanaged state after removing the work profile.
if (newState == DevicePolicyManager.STATE_USER_UNMANAGED) {
return;
}
break;
}
// Didn't meet any of the accepted state transition checks above, throw appropriate error.

View File

@@ -3178,6 +3178,16 @@ public class DevicePolicyManagerTest extends DpmTestBase {
DevicePolicyManager.STATE_USER_UNMANAGED));
}
@Test
public void testSetUserProvisioningState_profileFinalized_canTransitionToUserUnmanaged()
throws Exception {
setupProfileOwner();
exerciseUserProvisioningTransitions(CALLER_USER_HANDLE,
DevicePolicyManager.STATE_USER_PROFILE_FINALIZED,
DevicePolicyManager.STATE_USER_UNMANAGED);
}
@Test
public void testSetUserProvisioningState_illegalTransitionToAnotherInProgressState()
throws Exception {