From e3b834d13187463ac2e24e4b7df24ba859d44fa5 Mon Sep 17 00:00:00 2001 From: Kholoud Mohamed Date: Fri, 2 Jun 2023 09:45:49 +0000 Subject: [PATCH] fix result code for user controlled disabled package Bug: 284824710 Bug: 284955904 Test: atest com.android.cts.devicepolicy.DeviceOwnerTest Test: btest android.devicepolicy.cts.UserControlDisabledPackagesTest Change-Id: Ie502e879728d396aa4e1a642b2e20e47cab07f26 --- .../devicepolicy/DevicePolicyEngine.java | 38 ++++++++++++++++++- 1 file 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 5ba22830eec95..c918fb87154fd 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> parsedValue = (PolicyValue>) value; + PolicyValue> parsedResolvedValue = + (PolicyValue>) 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> parsedValue = (PolicyValue>) value; + PolicyValue> parsedResolvedValue = + (PolicyValue>) 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> parsedValue = (PolicyValue>) value; + PolicyValue> parsedResolvedValue = + (PolicyValue>) localPolicyState.getCurrentResolvedPolicy(); + isAdminPolicyApplied &= (parsedResolvedValue != null && parsedValue != null + && parsedResolvedValue.getValue().containsAll(parsedValue.getValue())); + } + } else { + isAdminPolicyApplied &= Objects.equals( + value, localPolicyState.getCurrentResolvedPolicy()); + } } return isAdminPolicyApplied; }