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_SETTING_PROFILE_OWNER_FAILED;
import static android.app.admin.DevicePolicyManager.PROVISIONING_RESULT_SET_DEVICE_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.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_EUICC;
import static android.app.admin.DevicePolicyManager.WIPE_EXTERNAL_STORAGE; import static android.app.admin.DevicePolicyManager.WIPE_EXTERNAL_STORAGE;
import static android.app.admin.DevicePolicyManager.WIPE_RESET_PROTECTION_DATA; import static android.app.admin.DevicePolicyManager.WIPE_RESET_PROTECTION_DATA;
@@ -8735,7 +8736,8 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager {
final CallerIdentity caller = getCallerIdentity(); final CallerIdentity caller = getCallerIdentity();
if (userHandle != mOwners.getDeviceOwnerUserId() && !mOwners.hasProfileOwner(userHandle) 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. // No managed device, user or profile, so setting provisioning state makes no sense.
throw new IllegalStateException("Not allowed to change provisioning state unless a " throw new IllegalStateException("Not allowed to change provisioning state unless a "
+ "device or profile owner is set."); + "device or profile owner is set.");
@@ -8798,6 +8800,12 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager {
case DevicePolicyManager.STATE_USER_SETUP_FINALIZED: case DevicePolicyManager.STATE_USER_SETUP_FINALIZED:
// Cannot transition out of finalized. // Cannot transition out of finalized.
break; 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. // 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)); 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 @Test
public void testSetUserProvisioningState_illegalTransitionToAnotherInProgressState() public void testSetUserProvisioningState_illegalTransitionToAnotherInProgressState()
throws Exception { throws Exception {