Loading core/java/android/net/NetworkPolicy.java +28 −1 Original line number Diff line number Diff line Loading @@ -18,8 +18,11 @@ package android.net; import static android.net.NetworkStats.METERED_ALL; import static android.net.NetworkStats.METERED_YES; import static android.net.NetworkTemplate.MATCH_BLUETOOTH; import static android.net.NetworkTemplate.MATCH_CARRIER; import static android.net.NetworkTemplate.MATCH_ETHERNET; import static android.net.NetworkTemplate.MATCH_MOBILE; import static android.net.NetworkTemplate.MATCH_WIFI; import static android.net.NetworkTemplate.SUBSCRIBER_ID_MATCH_RULE_EXACT; import android.annotation.NonNull; Loading Loading @@ -324,7 +327,7 @@ public class NetworkPolicy implements Parcelable, Comparable<NetworkPolicy> { @NonNull private byte[] getNetworkTemplateBytesForBackup() throws IOException { if (!template.isPersistable()) { if (!isTemplatePersistable(this.template)) { Log.wtf(TAG, "Trying to backup non-persistable template: " + this); } Loading Loading @@ -378,4 +381,28 @@ public class NetworkPolicy implements Parcelable, Comparable<NetworkPolicy> { "Restored network template contains unknown match rule " + matchRule, e); } } /** * Check if the template can be persisted into disk. */ public static boolean isTemplatePersistable(@NonNull NetworkTemplate template) { switch (template.getMatchRule()) { case MATCH_BLUETOOTH: case MATCH_ETHERNET: return true; case MATCH_CARRIER: case MATCH_MOBILE: return !template.getSubscriberIds().isEmpty(); case MATCH_WIFI: if (Objects.equals(template.getWifiNetworkKey(), null) && template.getSubscriberIds().isEmpty()) { return false; } return true; default: // Don't allow persistable for unknown types or legacy types such as // MATCH_MOBILE_WILDCARD, MATCH_PROXY, etc. return false; } } } core/tests/coretests/src/android/net/NetworkPolicyTest.kt +28 −0 Original line number Diff line number Diff line Loading @@ -16,6 +16,10 @@ package android.net import android.net.NetworkTemplate.MATCH_BLUETOOTH import android.net.NetworkTemplate.MATCH_ETHERNET import android.net.NetworkTemplate.MATCH_MOBILE import android.net.NetworkTemplate.MATCH_WIFI import android.text.format.Time.TIMEZONE_UTC import androidx.test.runner.AndroidJUnit4 import org.junit.Test Loading @@ -24,6 +28,8 @@ import java.io.ByteArrayInputStream import java.io.DataInputStream import java.time.ZoneId import kotlin.test.assertEquals import kotlin.test.assertFalse import kotlin.test.assertTrue private const val TEST_IMSI1 = "TESTIMSI1" private const val TEST_SSID1 = "TESTISSID1" Loading Loading @@ -53,4 +59,26 @@ class NetworkPolicyTest { val restored = NetworkPolicy.getNetworkPolicyFromBackup(stream) assertEquals(policy, restored) } @Test fun testIsTemplatePersistable() { listOf(MATCH_MOBILE, MATCH_WIFI).forEach { // Verify wildcard templates cannot be persistable. assertFalse(NetworkPolicy.isTemplatePersistable(NetworkTemplate.Builder(it).build())) // Verify mobile/wifi templates can be persistable if the Subscriber Id is supplied. assertTrue(NetworkPolicy.isTemplatePersistable(NetworkTemplate.Builder(it) .setSubscriberIds(setOf(TEST_IMSI1)).build())) } // Verify bluetooth and ethernet templates can be persistable without any other // field is supplied. listOf(MATCH_BLUETOOTH, MATCH_ETHERNET).forEach { assertTrue(NetworkPolicy.isTemplatePersistable(NetworkTemplate.Builder(it).build())) } // Verify wifi template can be persistable if the Wifi Network Key is supplied. assertTrue(NetworkPolicy.isTemplatePersistable(NetworkTemplate.Builder(MATCH_WIFI) .setWifiNetworkKey(TEST_SSID1).build())) } } No newline at end of file packages/ConnectivityT/framework-t/src/android/net/NetworkTemplate.java +0 −24 Original line number Diff line number Diff line Loading @@ -559,30 +559,6 @@ public final class NetworkTemplate implements Parcelable { } } /** * Check if the template can be persisted into disk. * * @hide */ // TODO: Move to the NetworkPolicy. public boolean isPersistable() { switch (mMatchRule) { case MATCH_MOBILE_WILDCARD: case MATCH_WIFI_WILDCARD: return false; case MATCH_CARRIER: return mSubscriberId != null; case MATCH_WIFI: if (Objects.equals(mNetworkId, WIFI_NETWORK_KEY_ALL) && mSubscriberIdMatchRule == SUBSCRIBER_ID_MATCH_RULE_ALL) { return false; } return true; default: return true; } } /** * Get match rule of the template. See {@code MATCH_*}. */ Loading services/core/java/com/android/server/net/NetworkPolicyManagerService.java +2 −2 Original line number Diff line number Diff line Loading @@ -2456,7 +2456,7 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub { networkId, templateMeteredness, NetworkStats.ROAMING_ALL, NetworkStats.DEFAULT_NETWORK_ALL, NetworkTemplate.NETWORK_TYPE_ALL, NetworkTemplate.OEM_MANAGED_ALL, subscriberIdMatchRule); if (template.isPersistable()) { if (NetworkPolicy.isTemplatePersistable(template)) { mNetworkPolicy.put(template, new NetworkPolicy(template, cycleRule, warningBytes, limitBytes, lastWarningSnooze, lastLimitSnooze, metered, inferred)); Loading Loading @@ -2663,7 +2663,7 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub { for (int i = 0; i < mNetworkPolicy.size(); i++) { final NetworkPolicy policy = mNetworkPolicy.valueAt(i); final NetworkTemplate template = policy.template; if (!template.isPersistable()) continue; if (!NetworkPolicy.isTemplatePersistable(template)) continue; out.startTag(null, TAG_NETWORK_POLICY); writeIntAttribute(out, ATTR_NETWORK_TEMPLATE, template.getMatchRule()); Loading Loading
core/java/android/net/NetworkPolicy.java +28 −1 Original line number Diff line number Diff line Loading @@ -18,8 +18,11 @@ package android.net; import static android.net.NetworkStats.METERED_ALL; import static android.net.NetworkStats.METERED_YES; import static android.net.NetworkTemplate.MATCH_BLUETOOTH; import static android.net.NetworkTemplate.MATCH_CARRIER; import static android.net.NetworkTemplate.MATCH_ETHERNET; import static android.net.NetworkTemplate.MATCH_MOBILE; import static android.net.NetworkTemplate.MATCH_WIFI; import static android.net.NetworkTemplate.SUBSCRIBER_ID_MATCH_RULE_EXACT; import android.annotation.NonNull; Loading Loading @@ -324,7 +327,7 @@ public class NetworkPolicy implements Parcelable, Comparable<NetworkPolicy> { @NonNull private byte[] getNetworkTemplateBytesForBackup() throws IOException { if (!template.isPersistable()) { if (!isTemplatePersistable(this.template)) { Log.wtf(TAG, "Trying to backup non-persistable template: " + this); } Loading Loading @@ -378,4 +381,28 @@ public class NetworkPolicy implements Parcelable, Comparable<NetworkPolicy> { "Restored network template contains unknown match rule " + matchRule, e); } } /** * Check if the template can be persisted into disk. */ public static boolean isTemplatePersistable(@NonNull NetworkTemplate template) { switch (template.getMatchRule()) { case MATCH_BLUETOOTH: case MATCH_ETHERNET: return true; case MATCH_CARRIER: case MATCH_MOBILE: return !template.getSubscriberIds().isEmpty(); case MATCH_WIFI: if (Objects.equals(template.getWifiNetworkKey(), null) && template.getSubscriberIds().isEmpty()) { return false; } return true; default: // Don't allow persistable for unknown types or legacy types such as // MATCH_MOBILE_WILDCARD, MATCH_PROXY, etc. return false; } } }
core/tests/coretests/src/android/net/NetworkPolicyTest.kt +28 −0 Original line number Diff line number Diff line Loading @@ -16,6 +16,10 @@ package android.net import android.net.NetworkTemplate.MATCH_BLUETOOTH import android.net.NetworkTemplate.MATCH_ETHERNET import android.net.NetworkTemplate.MATCH_MOBILE import android.net.NetworkTemplate.MATCH_WIFI import android.text.format.Time.TIMEZONE_UTC import androidx.test.runner.AndroidJUnit4 import org.junit.Test Loading @@ -24,6 +28,8 @@ import java.io.ByteArrayInputStream import java.io.DataInputStream import java.time.ZoneId import kotlin.test.assertEquals import kotlin.test.assertFalse import kotlin.test.assertTrue private const val TEST_IMSI1 = "TESTIMSI1" private const val TEST_SSID1 = "TESTISSID1" Loading Loading @@ -53,4 +59,26 @@ class NetworkPolicyTest { val restored = NetworkPolicy.getNetworkPolicyFromBackup(stream) assertEquals(policy, restored) } @Test fun testIsTemplatePersistable() { listOf(MATCH_MOBILE, MATCH_WIFI).forEach { // Verify wildcard templates cannot be persistable. assertFalse(NetworkPolicy.isTemplatePersistable(NetworkTemplate.Builder(it).build())) // Verify mobile/wifi templates can be persistable if the Subscriber Id is supplied. assertTrue(NetworkPolicy.isTemplatePersistable(NetworkTemplate.Builder(it) .setSubscriberIds(setOf(TEST_IMSI1)).build())) } // Verify bluetooth and ethernet templates can be persistable without any other // field is supplied. listOf(MATCH_BLUETOOTH, MATCH_ETHERNET).forEach { assertTrue(NetworkPolicy.isTemplatePersistable(NetworkTemplate.Builder(it).build())) } // Verify wifi template can be persistable if the Wifi Network Key is supplied. assertTrue(NetworkPolicy.isTemplatePersistable(NetworkTemplate.Builder(MATCH_WIFI) .setWifiNetworkKey(TEST_SSID1).build())) } } No newline at end of file
packages/ConnectivityT/framework-t/src/android/net/NetworkTemplate.java +0 −24 Original line number Diff line number Diff line Loading @@ -559,30 +559,6 @@ public final class NetworkTemplate implements Parcelable { } } /** * Check if the template can be persisted into disk. * * @hide */ // TODO: Move to the NetworkPolicy. public boolean isPersistable() { switch (mMatchRule) { case MATCH_MOBILE_WILDCARD: case MATCH_WIFI_WILDCARD: return false; case MATCH_CARRIER: return mSubscriberId != null; case MATCH_WIFI: if (Objects.equals(mNetworkId, WIFI_NETWORK_KEY_ALL) && mSubscriberIdMatchRule == SUBSCRIBER_ID_MATCH_RULE_ALL) { return false; } return true; default: return true; } } /** * Get match rule of the template. See {@code MATCH_*}. */ Loading
services/core/java/com/android/server/net/NetworkPolicyManagerService.java +2 −2 Original line number Diff line number Diff line Loading @@ -2456,7 +2456,7 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub { networkId, templateMeteredness, NetworkStats.ROAMING_ALL, NetworkStats.DEFAULT_NETWORK_ALL, NetworkTemplate.NETWORK_TYPE_ALL, NetworkTemplate.OEM_MANAGED_ALL, subscriberIdMatchRule); if (template.isPersistable()) { if (NetworkPolicy.isTemplatePersistable(template)) { mNetworkPolicy.put(template, new NetworkPolicy(template, cycleRule, warningBytes, limitBytes, lastWarningSnooze, lastLimitSnooze, metered, inferred)); Loading Loading @@ -2663,7 +2663,7 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub { for (int i = 0; i < mNetworkPolicy.size(); i++) { final NetworkPolicy policy = mNetworkPolicy.valueAt(i); final NetworkTemplate template = policy.template; if (!template.isPersistable()) continue; if (!NetworkPolicy.isTemplatePersistable(template)) continue; out.startTag(null, TAG_NETWORK_POLICY); writeIntAttribute(out, ATTR_NETWORK_TEMPLATE, template.getMatchRule()); Loading