summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--services/core/java/com/android/server/net/NetworkPolicyManagerService.java3
-rw-r--r--services/tests/servicestests/assets/NetworkPolicyManagerServiceTest/netpolicy/uids-with-mixed-policies.xml9
-rw-r--r--services/tests/servicestests/src/com/android/server/NetworkPolicyManagerServiceTest.java15
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...).