diff options
3 files changed, 25 insertions, 2 deletions
diff --git a/services/core/java/com/android/server/net/NetworkPolicyManagerService.java b/services/core/java/com/android/server/net/NetworkPolicyManagerService.java index 72f465ce22aa..a39d5c8cdcc7 100644 --- a/services/core/java/com/android/server/net/NetworkPolicyManagerService.java +++ b/services/core/java/com/android/server/net/NetworkPolicyManagerService.java @@ -1809,7 +1809,8 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub { for (int i = 0; i < mUidPolicy.size(); i++) { final int uid = mUidPolicy.keyAt(i); final int uidPolicy = mUidPolicy.valueAt(i); - if (uidPolicy == policy) { + if ((policy == POLICY_NONE && uidPolicy == POLICY_NONE) || + (uidPolicy & policy) != 0) { uids = appendInt(uids, uid); } } diff --git a/services/tests/servicestests/assets/NetworkPolicyManagerServiceTest/netpolicy/uids-with-mixed-policies.xml b/services/tests/servicestests/assets/NetworkPolicyManagerServiceTest/netpolicy/uids-with-mixed-policies.xml new file mode 100644 index 000000000000..c4e13e51743f --- /dev/null +++ b/services/tests/servicestests/assets/NetworkPolicyManagerServiceTest/netpolicy/uids-with-mixed-policies.xml @@ -0,0 +1,9 @@ +<?xml version='1.0' encoding='utf-8' standalone='yes' ?> +<policy-list version="10"> + <uid-policy uid="10004" policy="0" /> + <uid-policy uid="10008" policy="1" /> + <uid-policy uid="10015" policy="2" /> + <uid-policy uid="10016" policy="3" /> + <uid-policy uid="10023" policy="4" /> + <uid-policy uid="10042" policy="6" /> +</policy-list> diff --git a/services/tests/servicestests/src/com/android/server/NetworkPolicyManagerServiceTest.java b/services/tests/servicestests/src/com/android/server/NetworkPolicyManagerServiceTest.java index 2075328cf0cd..064b9159c8cb 100644 --- a/services/tests/servicestests/src/com/android/server/NetworkPolicyManagerServiceTest.java +++ b/services/tests/servicestests/src/com/android/server/NetworkPolicyManagerServiceTest.java @@ -160,7 +160,6 @@ public class NetworkPolicyManagerServiceTest { */ private String mNetpolicyXml; - private @Mock IActivityManager mActivityManager; private @Mock INetworkStatsService mStatsService; private @Mock INetworkManagementService mNetworkManager; @@ -350,6 +349,20 @@ public class NetworkPolicyManagerServiceTest { assertUidPolicy(UID_D, POLICY_ALLOW_METERED_BACKGROUND); } + @Test + @NetPolicyXml("uids-with-mixed-policies.xml") + public void testGetUidsWithPolicy() throws Exception { + assertContainsInAnyOrder(mService.getUidsWithPolicy(POLICY_NONE), + UID_A); + assertContainsInAnyOrder(mService.getUidsWithPolicy(POLICY_REJECT_METERED_BACKGROUND), + UID_B, UID_D); + assertContainsInAnyOrder(mService.getUidsWithPolicy(POLICY_ALLOW_METERED_BACKGROUND), + UID_E, UID_F); + // Legacy (POLICY_ALLOW_BACKGROUND_BATTERY_SAVE) + assertContainsInAnyOrder(mService.getUidsWithPolicy(2), + UID_C, UID_D, UID_F); + } + // NOTE: testPolicyChangeTriggersListener() and testUidForeground() are too superficial, they // don't check for side-effects (like calls to NetworkManagementService) neither cover all // different modes (Data Saver, Battery Saver, Doze, App idle, etc...). |