diff options
| -rw-r--r-- | services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyEngine.java | 38 |
1 files changed, 36 insertions, 2 deletions
diff --git a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyEngine.java b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyEngine.java index 5ba22830eec9..c918fb87154f 100644 --- a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyEngine.java +++ b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyEngine.java @@ -16,6 +16,7 @@ package com.android.server.devicepolicy; +import static android.app.admin.DevicePolicyIdentifiers.USER_CONTROL_DISABLED_PACKAGES_POLICY; import static android.app.admin.PolicyUpdateReceiver.EXTRA_POLICY_TARGET_USER_ID; import static android.app.admin.PolicyUpdateReceiver.EXTRA_POLICY_UPDATE_RESULT_KEY; import static android.app.admin.PolicyUpdateResult.RESULT_FAILURE_CONFLICTING_ADMIN_POLICY; @@ -176,6 +177,16 @@ final class DevicePolicyEngine { } boolean policyEnforced = Objects.equals( localPolicyState.getCurrentResolvedPolicy(), value); + // TODO(b/285532044): remove hack and handle properly + if (!policyEnforced + && policyDefinition.getPolicyKey().getIdentifier().equals( + USER_CONTROL_DISABLED_PACKAGES_POLICY)) { + PolicyValue<Set<String>> parsedValue = (PolicyValue<Set<String>>) value; + PolicyValue<Set<String>> parsedResolvedValue = + (PolicyValue<Set<String>>) localPolicyState.getCurrentResolvedPolicy(); + policyEnforced = (parsedResolvedValue != null && parsedValue != null + && parsedResolvedValue.getValue().containsAll(parsedValue.getValue())); + } sendPolicyResultToAdmin( enforcingAdmin, policyDefinition, @@ -418,6 +429,17 @@ final class DevicePolicyEngine { boolean policyAppliedGlobally = Objects.equals( globalPolicyState.getCurrentResolvedPolicy(), value); + // TODO(b/285532044): remove hack and handle properly + if (!policyAppliedGlobally + && policyDefinition.getPolicyKey().getIdentifier().equals( + USER_CONTROL_DISABLED_PACKAGES_POLICY)) { + PolicyValue<Set<String>> parsedValue = (PolicyValue<Set<String>>) value; + PolicyValue<Set<String>> parsedResolvedValue = + (PolicyValue<Set<String>>) globalPolicyState.getCurrentResolvedPolicy(); + policyAppliedGlobally = (parsedResolvedValue != null && parsedValue != null + && parsedResolvedValue.getValue().containsAll(parsedValue.getValue())); + } + boolean policyApplied = policyAppliedGlobally && policyAppliedOnAllUsers; sendPolicyResultToAdmin( @@ -539,8 +561,20 @@ final class DevicePolicyEngine { userId); } - isAdminPolicyApplied &= Objects.equals( - value, localPolicyState.getCurrentResolvedPolicy()); + // TODO(b/285532044): remove hack and handle properly + if (policyDefinition.getPolicyKey().getIdentifier().equals( + USER_CONTROL_DISABLED_PACKAGES_POLICY)) { + if (!Objects.equals(value, localPolicyState.getCurrentResolvedPolicy())) { + PolicyValue<Set<String>> parsedValue = (PolicyValue<Set<String>>) value; + PolicyValue<Set<String>> parsedResolvedValue = + (PolicyValue<Set<String>>) localPolicyState.getCurrentResolvedPolicy(); + isAdminPolicyApplied &= (parsedResolvedValue != null && parsedValue != null + && parsedResolvedValue.getValue().containsAll(parsedValue.getValue())); + } + } else { + isAdminPolicyApplied &= Objects.equals( + value, localPolicyState.getCurrentResolvedPolicy()); + } } return isAdminPolicyApplied; } |