Merge "Log exceptions of illegal provisioning state transitions" into main
diff --git a/core/java/android/app/admin/flags/flags.aconfig b/core/java/android/app/admin/flags/flags.aconfig
index 081dfe6..48f0af4 100644
--- a/core/java/android/app/admin/flags/flags.aconfig
+++ b/core/java/android/app/admin/flags/flags.aconfig
@@ -323,3 +323,13 @@
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 b6e45fc8..6314b85 100644
--- a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java
+++ b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java
@@ -10625,8 +10625,16 @@
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);
@@ -10637,6 +10645,10 @@
}
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: