diff options
| author | 2024-07-30 13:43:01 +0000 | |
|---|---|---|
| committer | 2024-09-16 13:51:27 +0000 | |
| commit | 7b725c49a23f65ee2fa5f4187694d6e62da2b3ac (patch) | |
| tree | a632a47df348dd8ce9939fdbbbb4d76ce35bf173 | |
| parent | 1f80f07195bcddacdbbc8ce8c0a834742ac1f42a (diff) | |
Log exceptions of illegal provisioning state transitions
Bug: 326441417
Test: Manual
Flag: android.app.admin.flags.user_provisioning_same_state
Change-Id: Ie03d360aa864151837b85a173d6e6d756646f336
| -rw-r--r-- | core/java/android/app/admin/flags/flags.aconfig | 10 | ||||
| -rw-r--r-- | services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java | 16 |
2 files changed, 24 insertions, 2 deletions
diff --git a/core/java/android/app/admin/flags/flags.aconfig b/core/java/android/app/admin/flags/flags.aconfig index 9148e3c3a072..37a79832d26b 100644 --- a/core/java/android/app/admin/flags/flags.aconfig +++ b/core/java/android/app/admin/flags/flags.aconfig @@ -412,3 +412,13 @@ flag { purpose: PURPOSE_BUGFIX } } + +flag { + name: "user_provisioning_same_state" + namespace: "enterprise" + description: "Handle exceptions while setting same provisioning state." + bug: "326441417" + metadata { + purpose: PURPOSE_BUGFIX + } +} diff --git a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java index 9ed645b6ca9b..0de16f8cc617 100644 --- a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java +++ b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java @@ -10628,8 +10628,16 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub { final DevicePolicyData policyData = getUserData(userId); if (transitionCheckNeeded) { // Optional state transition check for non-ADB case. - checkUserProvisioningStateTransition(policyData.mUserProvisioningState, - newState); + try { + checkUserProvisioningStateTransition( + policyData.mUserProvisioningState, + newState); + + } catch (IllegalStateException e) { + Slogf.e(LOG_TAG, + "Exception caught while changing provisioning state", e); + throw e; + } } policyData.mUserProvisioningState = newState; saveSettingsLocked(userId); @@ -10640,6 +10648,10 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub { } private void checkUserProvisioningStateTransition(int currentState, int newState) { + if (Flags.userProvisioningSameState()) { + Preconditions.checkState(newState != currentState, "New state cannot" + + " be the same as the current state: [" + newState + "]"); + } // Valid transitions for normal use-cases. switch (currentState) { case DevicePolicyManager.STATE_USER_UNMANAGED: |