summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Shreya Singh <shreyacsingh@google.com> 2024-07-30 13:43:01 +0000
committer Shreya Singh <shreyacsingh@google.com> 2024-09-16 13:51:27 +0000
commit7b725c49a23f65ee2fa5f4187694d6e62da2b3ac (patch)
treea632a47df348dd8ce9939fdbbbb4d76ce35bf173
parent1f80f07195bcddacdbbc8ce8c0a834742ac1f42a (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.aconfig10
-rw-r--r--services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java16
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: