Loading core/java/android/net/NetworkTemplate.java +146 −12 Original line number Diff line number Diff line Loading @@ -82,6 +82,24 @@ public class NetworkTemplate implements Parcelable { public static final int MATCH_WIFI_WILDCARD = 7; public static final int MATCH_BLUETOOTH = 8; public static final int MATCH_PROXY = 9; public static final int MATCH_CARRIER = 10; /** * Value of the match rule of the subscriberId to match networks with specific subscriberId. */ public static final int SUBSCRIBER_ID_MATCH_RULE_EXACT = 0; /** * Value of the match rule of the subscriberId to match networks with any subscriberId which * includes null and non-null. */ public static final int SUBSCRIBER_ID_MATCH_RULE_ALL = 1; /** * Wi-Fi Network ID is never supposed to be null (if it is, it is a bug that * should be fixed), so it's not possible to want to match null vs * non-null. Therefore it's fine to use null as a sentinel for Network ID. */ public static final String WIFI_NETWORKID_ALL = null; /** * Include all network types when filtering. This is meant to merge in with the Loading Loading @@ -125,6 +143,7 @@ public class NetworkTemplate implements Parcelable { case MATCH_WIFI_WILDCARD: case MATCH_BLUETOOTH: case MATCH_PROXY: case MATCH_CARRIER: return true; default: Loading Loading @@ -168,10 +187,12 @@ public class NetworkTemplate implements Parcelable { @NetworkType int ratType) { if (TextUtils.isEmpty(subscriberId)) { return new NetworkTemplate(MATCH_MOBILE_WILDCARD, null, null, null, METERED_ALL, ROAMING_ALL, DEFAULT_NETWORK_ALL, ratType, OEM_MANAGED_ALL); METERED_ALL, ROAMING_ALL, DEFAULT_NETWORK_ALL, ratType, OEM_MANAGED_ALL, SUBSCRIBER_ID_MATCH_RULE_EXACT); } return new NetworkTemplate(MATCH_MOBILE, subscriberId, new String[]{subscriberId}, null, METERED_ALL, ROAMING_ALL, DEFAULT_NETWORK_ALL, ratType, OEM_MANAGED_ALL); METERED_ALL, ROAMING_ALL, DEFAULT_NETWORK_ALL, ratType, OEM_MANAGED_ALL, SUBSCRIBER_ID_MATCH_RULE_EXACT); } /** Loading @@ -189,6 +210,8 @@ public class NetworkTemplate implements Parcelable { */ @UnsupportedAppUsage public static NetworkTemplate buildTemplateWifiWildcard() { // TODO: Consider replace this with MATCH_WIFI with NETWORK_ID_ALL // and SUBSCRIBER_ID_MATCH_RULE_ALL. return new NetworkTemplate(MATCH_WIFI_WILDCARD, null, null); } Loading @@ -202,8 +225,27 @@ public class NetworkTemplate implements Parcelable { * Template to match {@link ConnectivityManager#TYPE_WIFI} networks with the * given SSID. */ public static NetworkTemplate buildTemplateWifi(String networkId) { return new NetworkTemplate(MATCH_WIFI, null, networkId); public static NetworkTemplate buildTemplateWifi(@NonNull String networkId) { Objects.requireNonNull(networkId); return new NetworkTemplate(MATCH_WIFI, null /* subscriberId */, new String[] { null } /* matchSubscriberIds */, networkId, METERED_ALL, ROAMING_ALL, DEFAULT_NETWORK_ALL, NETWORK_TYPE_ALL, OEM_MANAGED_ALL, SUBSCRIBER_ID_MATCH_RULE_ALL); } /** * Template to match all {@link ConnectivityManager#TYPE_WIFI} networks with the given SSID, * and IMSI. * * Call with {@link #WIFI_NETWORKID_ALL} for {@code networkId} to get result regardless of SSID. */ public static NetworkTemplate buildTemplateWifi(@Nullable String networkId, @Nullable String subscriberId) { return new NetworkTemplate(MATCH_WIFI, subscriberId, new String[] { subscriberId }, networkId, METERED_ALL, ROAMING_ALL, DEFAULT_NETWORK_ALL, NETWORK_TYPE_ALL, OEM_MANAGED_ALL, SUBSCRIBER_ID_MATCH_RULE_EXACT); } /** Loading Loading @@ -231,6 +273,14 @@ public class NetworkTemplate implements Parcelable { return new NetworkTemplate(MATCH_PROXY, null, null); } /** * Template to match all carrier networks with the given IMSI. */ public static NetworkTemplate buildTemplateCarrier(@NonNull String subscriberId) { Objects.requireNonNull(subscriberId); return new NetworkTemplate(MATCH_CARRIER, subscriberId, null); } private final int mMatchRule; private final String mSubscriberId; Loading @@ -251,10 +301,26 @@ public class NetworkTemplate implements Parcelable { private final int mRoaming; private final int mDefaultNetwork; private final int mSubType; private final int mSubscriberIdMatchRule; // Bitfield containing OEM network properties{@code NetworkIdentity#OEM_*}. private final int mOemManaged; private void checkValidSubscriberIdMatchRule() { switch (mMatchRule) { case MATCH_MOBILE: case MATCH_CARRIER: // MOBILE and CARRIER templates must always specify a subscriber ID. if (mSubscriberIdMatchRule == SUBSCRIBER_ID_MATCH_RULE_ALL) { throw new IllegalArgumentException("Invalid SubscriberIdMatchRule" + "on match rule: " + getMatchRuleName(mMatchRule)); } return; default: return; } } @UnsupportedAppUsage public NetworkTemplate(int matchRule, String subscriberId, String networkId) { this(matchRule, subscriberId, new String[] { subscriberId }, networkId); Loading @@ -263,14 +329,25 @@ public class NetworkTemplate implements Parcelable { public NetworkTemplate(int matchRule, String subscriberId, String[] matchSubscriberIds, String networkId) { this(matchRule, subscriberId, matchSubscriberIds, networkId, METERED_ALL, ROAMING_ALL, DEFAULT_NETWORK_ALL, NETWORK_TYPE_ALL, OEM_MANAGED_ALL); DEFAULT_NETWORK_ALL, NETWORK_TYPE_ALL, OEM_MANAGED_ALL, SUBSCRIBER_ID_MATCH_RULE_EXACT); } // TODO: Remove it after updating all of the caller. public NetworkTemplate(int matchRule, String subscriberId, String[] matchSubscriberIds, String networkId, int metered, int roaming, int defaultNetwork, int subType, int oemManaged) { this(matchRule, subscriberId, matchSubscriberIds, networkId, metered, roaming, defaultNetwork, subType, oemManaged, SUBSCRIBER_ID_MATCH_RULE_EXACT); } public NetworkTemplate(int matchRule, String subscriberId, String[] matchSubscriberIds, String networkId, int metered, int roaming, int defaultNetwork, int subType, int oemManaged, int subscriberIdMatchRule) { mMatchRule = matchRule; mSubscriberId = subscriberId; // TODO: Check whether mMatchSubscriberIds = null or mMatchSubscriberIds = {null} when // mSubscriberId is null mMatchSubscriberIds = matchSubscriberIds; mNetworkId = networkId; mMetered = metered; Loading @@ -278,7 +355,8 @@ public class NetworkTemplate implements Parcelable { mDefaultNetwork = defaultNetwork; mSubType = subType; mOemManaged = oemManaged; mSubscriberIdMatchRule = subscriberIdMatchRule; checkValidSubscriberIdMatchRule(); if (!isKnownMatchRule(matchRule)) { Log.e(TAG, "Unknown network template rule " + matchRule + " will not match any identity."); Loading @@ -295,6 +373,7 @@ public class NetworkTemplate implements Parcelable { mDefaultNetwork = in.readInt(); mSubType = in.readInt(); mOemManaged = in.readInt(); mSubscriberIdMatchRule = in.readInt(); } @Override Loading @@ -308,6 +387,7 @@ public class NetworkTemplate implements Parcelable { dest.writeInt(mDefaultNetwork); dest.writeInt(mSubType); dest.writeInt(mOemManaged); dest.writeInt(mSubscriberIdMatchRule); } @Override Loading Loading @@ -346,13 +426,15 @@ public class NetworkTemplate implements Parcelable { if (mOemManaged != OEM_MANAGED_ALL) { builder.append(", oemManaged=").append(mOemManaged); } builder.append(", subscriberIdMatchRule=") .append(subscriberIdMatchRuleToString(mSubscriberIdMatchRule)); return builder.toString(); } @Override public int hashCode() { return Objects.hash(mMatchRule, mSubscriberId, mNetworkId, mMetered, mRoaming, mDefaultNetwork, mSubType, mOemManaged); mDefaultNetwork, mSubType, mOemManaged, mSubscriberIdMatchRule); } @Override Loading @@ -366,11 +448,23 @@ public class NetworkTemplate implements Parcelable { && mRoaming == other.mRoaming && mDefaultNetwork == other.mDefaultNetwork && mSubType == other.mSubType && mOemManaged == other.mOemManaged; && mOemManaged == other.mOemManaged && mSubscriberIdMatchRule == other.mSubscriberIdMatchRule; } return false; } private String subscriberIdMatchRuleToString(int rule) { switch (rule) { case SUBSCRIBER_ID_MATCH_RULE_EXACT: return "EXACT_MATCH"; case SUBSCRIBER_ID_MATCH_RULE_ALL: return "ALL"; default: return "Unknown rule " + rule; } } public boolean isMatchRuleMobile() { switch (mMatchRule) { case MATCH_MOBILE: Loading @@ -386,6 +480,14 @@ public class NetworkTemplate implements Parcelable { case MATCH_MOBILE_WILDCARD: case MATCH_WIFI_WILDCARD: return false; case MATCH_CARRIER: return mSubscriberId != null; case MATCH_WIFI: if (Objects.equals(mNetworkId, WIFI_NETWORKID_ALL) && mSubscriberIdMatchRule == SUBSCRIBER_ID_MATCH_RULE_ALL) { return false; } return true; default: return true; } Loading @@ -405,6 +507,10 @@ public class NetworkTemplate implements Parcelable { return mNetworkId; } public int getSubscriberIdMatchRule() { return mSubscriberIdMatchRule; } /** * Test if given {@link NetworkIdentity} matches this template. */ Loading @@ -429,6 +535,8 @@ public class NetworkTemplate implements Parcelable { return matchesBluetooth(ident); case MATCH_PROXY: return matchesProxy(ident); case MATCH_CARRIER: return matchesCarrier(ident); default: // We have no idea what kind of network template we are, so we // just claim not to match anything. Loading Loading @@ -466,8 +574,23 @@ public class NetworkTemplate implements Parcelable { || getCollapsedRatType(mSubType) == getCollapsedRatType(ident.mSubType); } public boolean matchesSubscriberId(String subscriberId) { return ArrayUtils.contains(mMatchSubscriberIds, subscriberId); /** * Check if this template matches {@code subscriberId}. Returns true if this * template was created with {@code SUBSCRIBER_ID_MATCH_RULE_ALL}, or with a * {@code mMatchSubscriberIds} array that contains {@code subscriberId}. */ public boolean matchesSubscriberId(@Nullable String subscriberId) { return mSubscriberIdMatchRule == SUBSCRIBER_ID_MATCH_RULE_ALL || ArrayUtils.contains(mMatchSubscriberIds, subscriberId); } /** * Check if network with matching SSID. Returns true when the SSID matches, or when * {@code mNetworkId} is {@code WIFI_NETWORKID_ALL}. */ private boolean matchesWifiNetworkId(@Nullable String networkId) { return Objects.equals(mNetworkId, WIFI_NETWORKID_ALL) || Objects.equals(sanitizeSsid(mNetworkId), sanitizeSsid(networkId)); } /** Loading Loading @@ -566,8 +689,8 @@ public class NetworkTemplate implements Parcelable { private boolean matchesWifi(NetworkIdentity ident) { switch (ident.mType) { case TYPE_WIFI: return Objects.equals( sanitizeSsid(mNetworkId), sanitizeSsid(ident.mNetworkId)); return matchesSubscriberId(ident.mSubscriberId) && matchesWifiNetworkId(ident.mNetworkId); default: return false; } Loading @@ -583,6 +706,15 @@ public class NetworkTemplate implements Parcelable { return false; } /** * Check if matches carrier network. The carrier networks means it includes the subscriberId. */ private boolean matchesCarrier(NetworkIdentity ident) { return ident.mSubscriberId != null && !ArrayUtils.isEmpty(mMatchSubscriberIds) && ArrayUtils.contains(mMatchSubscriberIds, ident.mSubscriberId); } private boolean matchesMobileWildcard(NetworkIdentity ident) { if (ident.mType == TYPE_WIMAX) { return true; Loading Loading @@ -635,6 +767,8 @@ public class NetworkTemplate implements Parcelable { return "BLUETOOTH"; case MATCH_PROXY: return "PROXY"; case MATCH_CARRIER: return "CARRIER"; default: return "UNKNOWN(" + matchRule + ")"; } Loading services/core/java/com/android/server/connectivity/MultipathPolicyTracker.java +3 −1 Original line number Diff line number Diff line Loading @@ -27,6 +27,7 @@ import static android.net.NetworkPolicy.LIMIT_DISABLED; import static android.net.NetworkPolicy.WARNING_DISABLED; import static android.net.NetworkTemplate.NETWORK_TYPE_ALL; import static android.net.NetworkTemplate.OEM_MANAGED_ALL; import static android.net.NetworkTemplate.SUBSCRIBER_ID_MATCH_RULE_EXACT; import static android.provider.Settings.Global.NETWORK_DEFAULT_DAILY_MULTIPATH_QUOTA_BYTES; import static android.telephony.SubscriptionManager.INVALID_SUBSCRIPTION_ID; Loading Loading @@ -227,7 +228,8 @@ public class MultipathPolicyTracker { mNetworkTemplate = new NetworkTemplate( NetworkTemplate.MATCH_MOBILE, subscriberId, new String[] { subscriberId }, null, NetworkStats.METERED_ALL, NetworkStats.ROAMING_ALL, NetworkStats.DEFAULT_NETWORK_NO, NETWORK_TYPE_ALL, OEM_MANAGED_ALL); NetworkStats.DEFAULT_NETWORK_NO, NETWORK_TYPE_ALL, OEM_MANAGED_ALL, SUBSCRIBER_ID_MATCH_RULE_EXACT); mUsageCallback = new UsageCallback() { @Override public void onThresholdReached(int networkType, String subscriberId) { Loading tests/net/java/android/net/NetworkTemplateTest.kt +110 −14 Original line number Diff line number Diff line Loading @@ -31,11 +31,16 @@ import android.net.NetworkTemplate.MATCH_MOBILE import android.net.NetworkTemplate.MATCH_MOBILE_WILDCARD import android.net.NetworkTemplate.MATCH_WIFI import android.net.NetworkTemplate.MATCH_WIFI_WILDCARD import android.net.NetworkTemplate.WIFI_NETWORKID_ALL import android.net.NetworkTemplate.NETWORK_TYPE_5G_NSA import android.net.NetworkTemplate.NETWORK_TYPE_ALL import android.net.NetworkTemplate.OEM_MANAGED_ALL import android.net.NetworkTemplate.OEM_MANAGED_NO import android.net.NetworkTemplate.OEM_MANAGED_YES import android.net.NetworkTemplate.SUBSCRIBER_ID_MATCH_RULE_EXACT import android.net.NetworkTemplate.buildTemplateWifi import android.net.NetworkTemplate.buildTemplateWifiWildcard import android.net.NetworkTemplate.buildTemplateCarrier import android.net.NetworkTemplate.buildTemplateMobileWithRatType import android.telephony.TelephonyManager import com.android.testutils.assertParcelSane Loading @@ -53,6 +58,7 @@ import kotlin.test.assertTrue private const val TEST_IMSI1 = "imsi1" private const val TEST_IMSI2 = "imsi2" private const val TEST_SSID1 = "ssid1" private const val TEST_SSID2 = "ssid2" @RunWith(JUnit4::class) class NetworkTemplateTest { Loading @@ -60,8 +66,8 @@ class NetworkTemplateTest { private fun buildMobileNetworkState(subscriberId: String): NetworkStateSnapshot = buildNetworkState(TYPE_MOBILE, subscriberId = subscriberId) private fun buildWifiNetworkState(ssid: String): NetworkStateSnapshot = buildNetworkState(TYPE_WIFI, ssid = ssid) private fun buildWifiNetworkState(subscriberId: String?, ssid: String?): NetworkStateSnapshot = buildNetworkState(TYPE_WIFI, subscriberId = subscriberId, ssid = ssid) private fun buildNetworkState( type: Int, Loading Loading @@ -93,6 +99,95 @@ class NetworkTemplateTest { MockitoAnnotations.initMocks(this) } @Test fun testWifiWildcardMatches() { val templateWifiWildcard = buildTemplateWifiWildcard() val identMobileImsi1 = buildNetworkIdentity(mockContext, buildMobileNetworkState(TEST_IMSI1), false, TelephonyManager.NETWORK_TYPE_UMTS) val identWifiImsiNullSsid1 = buildNetworkIdentity( mockContext, buildWifiNetworkState(null, TEST_SSID1), true, 0) val identWifiImsi1Ssid1 = buildNetworkIdentity( mockContext, buildWifiNetworkState(TEST_IMSI1, TEST_SSID1), true, 0) templateWifiWildcard.assertDoesNotMatch(identMobileImsi1) templateWifiWildcard.assertMatches(identWifiImsiNullSsid1) templateWifiWildcard.assertMatches(identWifiImsi1Ssid1) } @Test fun testWifiMatches() { val templateWifiSsid1 = buildTemplateWifi(TEST_SSID1) val templateWifiSsid1ImsiNull = buildTemplateWifi(TEST_SSID1, null) val templateWifiSsid1Imsi1 = buildTemplateWifi(TEST_SSID1, TEST_IMSI1) val templateWifiSsidAllImsi1 = buildTemplateWifi(WIFI_NETWORKID_ALL, TEST_IMSI1) val identMobile1 = buildNetworkIdentity(mockContext, buildMobileNetworkState(TEST_IMSI1), false, TelephonyManager.NETWORK_TYPE_UMTS) val identWifiImsiNullSsid1 = buildNetworkIdentity( mockContext, buildWifiNetworkState(null, TEST_SSID1), true, 0) val identWifiImsi1Ssid1 = buildNetworkIdentity( mockContext, buildWifiNetworkState(TEST_IMSI1, TEST_SSID1), true, 0) val identWifiImsi2Ssid1 = buildNetworkIdentity( mockContext, buildWifiNetworkState(TEST_IMSI2, TEST_SSID1), true, 0) val identWifiImsi1Ssid2 = buildNetworkIdentity( mockContext, buildWifiNetworkState(TEST_IMSI1, TEST_SSID2), true, 0) // Verify that template with SSID only matches any subscriberId and specific SSID. templateWifiSsid1.assertDoesNotMatch(identMobile1) templateWifiSsid1.assertMatches(identWifiImsiNullSsid1) templateWifiSsid1.assertMatches(identWifiImsi1Ssid1) templateWifiSsid1.assertMatches(identWifiImsi2Ssid1) templateWifiSsid1.assertDoesNotMatch(identWifiImsi1Ssid2) // Verify that template with SSID1 and null imsi matches any network with // SSID1 and null imsi. templateWifiSsid1ImsiNull.assertDoesNotMatch(identMobile1) templateWifiSsid1ImsiNull.assertMatches(identWifiImsiNullSsid1) templateWifiSsid1ImsiNull.assertDoesNotMatch(identWifiImsi1Ssid1) templateWifiSsid1ImsiNull.assertDoesNotMatch(identWifiImsi2Ssid1) templateWifiSsid1ImsiNull.assertDoesNotMatch(identWifiImsi1Ssid2) // Verify that template with SSID1 and imsi1 matches any network with // SSID1 and imsi1. templateWifiSsid1Imsi1.assertDoesNotMatch(identMobile1) templateWifiSsid1Imsi1.assertDoesNotMatch(identWifiImsiNullSsid1) templateWifiSsid1Imsi1.assertMatches(identWifiImsi1Ssid1) templateWifiSsid1Imsi1.assertDoesNotMatch(identWifiImsi2Ssid1) templateWifiSsid1Imsi1.assertDoesNotMatch(identWifiImsi1Ssid2) // Verify that template with SSID all and imsi1 matches any network with // any SSID and imsi1. templateWifiSsidAllImsi1.assertDoesNotMatch(identMobile1) templateWifiSsidAllImsi1.assertDoesNotMatch(identWifiImsiNullSsid1) templateWifiSsidAllImsi1.assertMatches(identWifiImsi1Ssid1) templateWifiSsidAllImsi1.assertDoesNotMatch(identWifiImsi2Ssid1) templateWifiSsidAllImsi1.assertMatches(identWifiImsi1Ssid2) } @Test fun testCarrierMatches() { val templateCarrierImsi1 = buildTemplateCarrier(TEST_IMSI1) val identMobile1 = buildNetworkIdentity(mockContext, buildMobileNetworkState(TEST_IMSI1), false, TelephonyManager.NETWORK_TYPE_UMTS) val identMobile2 = buildNetworkIdentity(mockContext, buildMobileNetworkState(TEST_IMSI2), false, TelephonyManager.NETWORK_TYPE_UMTS) val identWifiSsid1 = buildNetworkIdentity( mockContext, buildWifiNetworkState(null, TEST_SSID1), true, 0) val identCarrierWifiImsi1 = buildNetworkIdentity( mockContext, buildWifiNetworkState(TEST_IMSI1, TEST_SSID1), true, 0) val identCarrierWifiImsi2 = buildNetworkIdentity( mockContext, buildWifiNetworkState(TEST_IMSI2, TEST_SSID1), true, 0) templateCarrierImsi1.assertMatches(identCarrierWifiImsi1) templateCarrierImsi1.assertDoesNotMatch(identCarrierWifiImsi2) templateCarrierImsi1.assertDoesNotMatch(identWifiSsid1) templateCarrierImsi1.assertMatches(identMobile1) templateCarrierImsi1.assertDoesNotMatch(identMobile2) } @Test fun testRatTypeGroupMatches() { val stateMobile = buildMobileNetworkState(TEST_IMSI1) Loading @@ -117,7 +212,7 @@ class NetworkTemplateTest { val identImsi2 = buildNetworkIdentity(mockContext, buildMobileNetworkState(TEST_IMSI2), false, TelephonyManager.NETWORK_TYPE_UMTS) val identWifi = buildNetworkIdentity( mockContext, buildWifiNetworkState(TEST_SSID1), true, 0) mockContext, buildWifiNetworkState(null, TEST_SSID1), true, 0) // Assert that identity with the same RAT matches. templateUmts.assertMatches(identUmts) Loading Loading @@ -151,14 +246,16 @@ class NetworkTemplateTest { fun testParcelUnparcel() { val templateMobile = NetworkTemplate(MATCH_MOBILE, TEST_IMSI1, null, null, METERED_ALL, ROAMING_ALL, DEFAULT_NETWORK_ALL, TelephonyManager.NETWORK_TYPE_LTE, OEM_MANAGED_ALL) OEM_MANAGED_ALL, SUBSCRIBER_ID_MATCH_RULE_EXACT) val templateWifi = NetworkTemplate(MATCH_WIFI, null, null, TEST_SSID1, METERED_ALL, ROAMING_ALL, DEFAULT_NETWORK_ALL, 0, OEM_MANAGED_ALL) ROAMING_ALL, DEFAULT_NETWORK_ALL, 0, OEM_MANAGED_ALL, SUBSCRIBER_ID_MATCH_RULE_EXACT) val templateOem = NetworkTemplate(MATCH_MOBILE, null, null, null, METERED_ALL, ROAMING_ALL, DEFAULT_NETWORK_ALL, 0, OEM_MANAGED_YES) assertParcelSane(templateMobile, 9) assertParcelSane(templateWifi, 9) assertParcelSane(templateOem, 9) ROAMING_ALL, DEFAULT_NETWORK_ALL, 0, OEM_MANAGED_YES, SUBSCRIBER_ID_MATCH_RULE_EXACT) assertParcelSane(templateMobile, 10) assertParcelSane(templateWifi, 10) assertParcelSane(templateOem, 10) } // Verify NETWORK_TYPE_* constants in NetworkTemplate do not conflict with Loading Loading @@ -207,15 +304,14 @@ class NetworkTemplateTest { identSsid: String? = null ) { val oemManagedStates = arrayOf(OEM_NONE, OEM_PAID, OEM_PRIVATE, OEM_PAID or OEM_PRIVATE) // A null subscriberId needs a null matchSubscriberIds argument as well. val matchSubscriberIds = if (subscriberId == null) null else arrayOf(subscriberId) val matchSubscriberIds = arrayOf(subscriberId) val templateOemYes = NetworkTemplate(matchType, subscriberId, matchSubscriberIds, templateSsid, METERED_ALL, ROAMING_ALL, DEFAULT_NETWORK_ALL, NETWORK_TYPE_ALL, OEM_MANAGED_YES) OEM_MANAGED_YES, SUBSCRIBER_ID_MATCH_RULE_EXACT) val templateOemAll = NetworkTemplate(matchType, subscriberId, matchSubscriberIds, templateSsid, METERED_ALL, ROAMING_ALL, DEFAULT_NETWORK_ALL, NETWORK_TYPE_ALL, OEM_MANAGED_ALL) OEM_MANAGED_ALL, SUBSCRIBER_ID_MATCH_RULE_EXACT) for (identityOemManagedState in oemManagedStates) { val ident = buildNetworkIdentity(mockContext, buildNetworkState(networkType, Loading @@ -226,7 +322,7 @@ class NetworkTemplateTest { for (templateOemManagedState in oemManagedStates) { val template = NetworkTemplate(matchType, subscriberId, matchSubscriberIds, templateSsid, METERED_ALL, ROAMING_ALL, DEFAULT_NETWORK_ALL, NETWORK_TYPE_ALL, templateOemManagedState) NETWORK_TYPE_ALL, templateOemManagedState, SUBSCRIBER_ID_MATCH_RULE_EXACT) if (identityOemManagedState == templateOemManagedState) { template.assertMatches(ident) } else { Loading tests/net/java/com/android/server/net/NetworkStatsServiceTest.java +10 −5 File changed.Preview size limit exceeded, changes collapsed. Show changes Loading
core/java/android/net/NetworkTemplate.java +146 −12 Original line number Diff line number Diff line Loading @@ -82,6 +82,24 @@ public class NetworkTemplate implements Parcelable { public static final int MATCH_WIFI_WILDCARD = 7; public static final int MATCH_BLUETOOTH = 8; public static final int MATCH_PROXY = 9; public static final int MATCH_CARRIER = 10; /** * Value of the match rule of the subscriberId to match networks with specific subscriberId. */ public static final int SUBSCRIBER_ID_MATCH_RULE_EXACT = 0; /** * Value of the match rule of the subscriberId to match networks with any subscriberId which * includes null and non-null. */ public static final int SUBSCRIBER_ID_MATCH_RULE_ALL = 1; /** * Wi-Fi Network ID is never supposed to be null (if it is, it is a bug that * should be fixed), so it's not possible to want to match null vs * non-null. Therefore it's fine to use null as a sentinel for Network ID. */ public static final String WIFI_NETWORKID_ALL = null; /** * Include all network types when filtering. This is meant to merge in with the Loading Loading @@ -125,6 +143,7 @@ public class NetworkTemplate implements Parcelable { case MATCH_WIFI_WILDCARD: case MATCH_BLUETOOTH: case MATCH_PROXY: case MATCH_CARRIER: return true; default: Loading Loading @@ -168,10 +187,12 @@ public class NetworkTemplate implements Parcelable { @NetworkType int ratType) { if (TextUtils.isEmpty(subscriberId)) { return new NetworkTemplate(MATCH_MOBILE_WILDCARD, null, null, null, METERED_ALL, ROAMING_ALL, DEFAULT_NETWORK_ALL, ratType, OEM_MANAGED_ALL); METERED_ALL, ROAMING_ALL, DEFAULT_NETWORK_ALL, ratType, OEM_MANAGED_ALL, SUBSCRIBER_ID_MATCH_RULE_EXACT); } return new NetworkTemplate(MATCH_MOBILE, subscriberId, new String[]{subscriberId}, null, METERED_ALL, ROAMING_ALL, DEFAULT_NETWORK_ALL, ratType, OEM_MANAGED_ALL); METERED_ALL, ROAMING_ALL, DEFAULT_NETWORK_ALL, ratType, OEM_MANAGED_ALL, SUBSCRIBER_ID_MATCH_RULE_EXACT); } /** Loading @@ -189,6 +210,8 @@ public class NetworkTemplate implements Parcelable { */ @UnsupportedAppUsage public static NetworkTemplate buildTemplateWifiWildcard() { // TODO: Consider replace this with MATCH_WIFI with NETWORK_ID_ALL // and SUBSCRIBER_ID_MATCH_RULE_ALL. return new NetworkTemplate(MATCH_WIFI_WILDCARD, null, null); } Loading @@ -202,8 +225,27 @@ public class NetworkTemplate implements Parcelable { * Template to match {@link ConnectivityManager#TYPE_WIFI} networks with the * given SSID. */ public static NetworkTemplate buildTemplateWifi(String networkId) { return new NetworkTemplate(MATCH_WIFI, null, networkId); public static NetworkTemplate buildTemplateWifi(@NonNull String networkId) { Objects.requireNonNull(networkId); return new NetworkTemplate(MATCH_WIFI, null /* subscriberId */, new String[] { null } /* matchSubscriberIds */, networkId, METERED_ALL, ROAMING_ALL, DEFAULT_NETWORK_ALL, NETWORK_TYPE_ALL, OEM_MANAGED_ALL, SUBSCRIBER_ID_MATCH_RULE_ALL); } /** * Template to match all {@link ConnectivityManager#TYPE_WIFI} networks with the given SSID, * and IMSI. * * Call with {@link #WIFI_NETWORKID_ALL} for {@code networkId} to get result regardless of SSID. */ public static NetworkTemplate buildTemplateWifi(@Nullable String networkId, @Nullable String subscriberId) { return new NetworkTemplate(MATCH_WIFI, subscriberId, new String[] { subscriberId }, networkId, METERED_ALL, ROAMING_ALL, DEFAULT_NETWORK_ALL, NETWORK_TYPE_ALL, OEM_MANAGED_ALL, SUBSCRIBER_ID_MATCH_RULE_EXACT); } /** Loading Loading @@ -231,6 +273,14 @@ public class NetworkTemplate implements Parcelable { return new NetworkTemplate(MATCH_PROXY, null, null); } /** * Template to match all carrier networks with the given IMSI. */ public static NetworkTemplate buildTemplateCarrier(@NonNull String subscriberId) { Objects.requireNonNull(subscriberId); return new NetworkTemplate(MATCH_CARRIER, subscriberId, null); } private final int mMatchRule; private final String mSubscriberId; Loading @@ -251,10 +301,26 @@ public class NetworkTemplate implements Parcelable { private final int mRoaming; private final int mDefaultNetwork; private final int mSubType; private final int mSubscriberIdMatchRule; // Bitfield containing OEM network properties{@code NetworkIdentity#OEM_*}. private final int mOemManaged; private void checkValidSubscriberIdMatchRule() { switch (mMatchRule) { case MATCH_MOBILE: case MATCH_CARRIER: // MOBILE and CARRIER templates must always specify a subscriber ID. if (mSubscriberIdMatchRule == SUBSCRIBER_ID_MATCH_RULE_ALL) { throw new IllegalArgumentException("Invalid SubscriberIdMatchRule" + "on match rule: " + getMatchRuleName(mMatchRule)); } return; default: return; } } @UnsupportedAppUsage public NetworkTemplate(int matchRule, String subscriberId, String networkId) { this(matchRule, subscriberId, new String[] { subscriberId }, networkId); Loading @@ -263,14 +329,25 @@ public class NetworkTemplate implements Parcelable { public NetworkTemplate(int matchRule, String subscriberId, String[] matchSubscriberIds, String networkId) { this(matchRule, subscriberId, matchSubscriberIds, networkId, METERED_ALL, ROAMING_ALL, DEFAULT_NETWORK_ALL, NETWORK_TYPE_ALL, OEM_MANAGED_ALL); DEFAULT_NETWORK_ALL, NETWORK_TYPE_ALL, OEM_MANAGED_ALL, SUBSCRIBER_ID_MATCH_RULE_EXACT); } // TODO: Remove it after updating all of the caller. public NetworkTemplate(int matchRule, String subscriberId, String[] matchSubscriberIds, String networkId, int metered, int roaming, int defaultNetwork, int subType, int oemManaged) { this(matchRule, subscriberId, matchSubscriberIds, networkId, metered, roaming, defaultNetwork, subType, oemManaged, SUBSCRIBER_ID_MATCH_RULE_EXACT); } public NetworkTemplate(int matchRule, String subscriberId, String[] matchSubscriberIds, String networkId, int metered, int roaming, int defaultNetwork, int subType, int oemManaged, int subscriberIdMatchRule) { mMatchRule = matchRule; mSubscriberId = subscriberId; // TODO: Check whether mMatchSubscriberIds = null or mMatchSubscriberIds = {null} when // mSubscriberId is null mMatchSubscriberIds = matchSubscriberIds; mNetworkId = networkId; mMetered = metered; Loading @@ -278,7 +355,8 @@ public class NetworkTemplate implements Parcelable { mDefaultNetwork = defaultNetwork; mSubType = subType; mOemManaged = oemManaged; mSubscriberIdMatchRule = subscriberIdMatchRule; checkValidSubscriberIdMatchRule(); if (!isKnownMatchRule(matchRule)) { Log.e(TAG, "Unknown network template rule " + matchRule + " will not match any identity."); Loading @@ -295,6 +373,7 @@ public class NetworkTemplate implements Parcelable { mDefaultNetwork = in.readInt(); mSubType = in.readInt(); mOemManaged = in.readInt(); mSubscriberIdMatchRule = in.readInt(); } @Override Loading @@ -308,6 +387,7 @@ public class NetworkTemplate implements Parcelable { dest.writeInt(mDefaultNetwork); dest.writeInt(mSubType); dest.writeInt(mOemManaged); dest.writeInt(mSubscriberIdMatchRule); } @Override Loading Loading @@ -346,13 +426,15 @@ public class NetworkTemplate implements Parcelable { if (mOemManaged != OEM_MANAGED_ALL) { builder.append(", oemManaged=").append(mOemManaged); } builder.append(", subscriberIdMatchRule=") .append(subscriberIdMatchRuleToString(mSubscriberIdMatchRule)); return builder.toString(); } @Override public int hashCode() { return Objects.hash(mMatchRule, mSubscriberId, mNetworkId, mMetered, mRoaming, mDefaultNetwork, mSubType, mOemManaged); mDefaultNetwork, mSubType, mOemManaged, mSubscriberIdMatchRule); } @Override Loading @@ -366,11 +448,23 @@ public class NetworkTemplate implements Parcelable { && mRoaming == other.mRoaming && mDefaultNetwork == other.mDefaultNetwork && mSubType == other.mSubType && mOemManaged == other.mOemManaged; && mOemManaged == other.mOemManaged && mSubscriberIdMatchRule == other.mSubscriberIdMatchRule; } return false; } private String subscriberIdMatchRuleToString(int rule) { switch (rule) { case SUBSCRIBER_ID_MATCH_RULE_EXACT: return "EXACT_MATCH"; case SUBSCRIBER_ID_MATCH_RULE_ALL: return "ALL"; default: return "Unknown rule " + rule; } } public boolean isMatchRuleMobile() { switch (mMatchRule) { case MATCH_MOBILE: Loading @@ -386,6 +480,14 @@ public class NetworkTemplate implements Parcelable { case MATCH_MOBILE_WILDCARD: case MATCH_WIFI_WILDCARD: return false; case MATCH_CARRIER: return mSubscriberId != null; case MATCH_WIFI: if (Objects.equals(mNetworkId, WIFI_NETWORKID_ALL) && mSubscriberIdMatchRule == SUBSCRIBER_ID_MATCH_RULE_ALL) { return false; } return true; default: return true; } Loading @@ -405,6 +507,10 @@ public class NetworkTemplate implements Parcelable { return mNetworkId; } public int getSubscriberIdMatchRule() { return mSubscriberIdMatchRule; } /** * Test if given {@link NetworkIdentity} matches this template. */ Loading @@ -429,6 +535,8 @@ public class NetworkTemplate implements Parcelable { return matchesBluetooth(ident); case MATCH_PROXY: return matchesProxy(ident); case MATCH_CARRIER: return matchesCarrier(ident); default: // We have no idea what kind of network template we are, so we // just claim not to match anything. Loading Loading @@ -466,8 +574,23 @@ public class NetworkTemplate implements Parcelable { || getCollapsedRatType(mSubType) == getCollapsedRatType(ident.mSubType); } public boolean matchesSubscriberId(String subscriberId) { return ArrayUtils.contains(mMatchSubscriberIds, subscriberId); /** * Check if this template matches {@code subscriberId}. Returns true if this * template was created with {@code SUBSCRIBER_ID_MATCH_RULE_ALL}, or with a * {@code mMatchSubscriberIds} array that contains {@code subscriberId}. */ public boolean matchesSubscriberId(@Nullable String subscriberId) { return mSubscriberIdMatchRule == SUBSCRIBER_ID_MATCH_RULE_ALL || ArrayUtils.contains(mMatchSubscriberIds, subscriberId); } /** * Check if network with matching SSID. Returns true when the SSID matches, or when * {@code mNetworkId} is {@code WIFI_NETWORKID_ALL}. */ private boolean matchesWifiNetworkId(@Nullable String networkId) { return Objects.equals(mNetworkId, WIFI_NETWORKID_ALL) || Objects.equals(sanitizeSsid(mNetworkId), sanitizeSsid(networkId)); } /** Loading Loading @@ -566,8 +689,8 @@ public class NetworkTemplate implements Parcelable { private boolean matchesWifi(NetworkIdentity ident) { switch (ident.mType) { case TYPE_WIFI: return Objects.equals( sanitizeSsid(mNetworkId), sanitizeSsid(ident.mNetworkId)); return matchesSubscriberId(ident.mSubscriberId) && matchesWifiNetworkId(ident.mNetworkId); default: return false; } Loading @@ -583,6 +706,15 @@ public class NetworkTemplate implements Parcelable { return false; } /** * Check if matches carrier network. The carrier networks means it includes the subscriberId. */ private boolean matchesCarrier(NetworkIdentity ident) { return ident.mSubscriberId != null && !ArrayUtils.isEmpty(mMatchSubscriberIds) && ArrayUtils.contains(mMatchSubscriberIds, ident.mSubscriberId); } private boolean matchesMobileWildcard(NetworkIdentity ident) { if (ident.mType == TYPE_WIMAX) { return true; Loading Loading @@ -635,6 +767,8 @@ public class NetworkTemplate implements Parcelable { return "BLUETOOTH"; case MATCH_PROXY: return "PROXY"; case MATCH_CARRIER: return "CARRIER"; default: return "UNKNOWN(" + matchRule + ")"; } Loading
services/core/java/com/android/server/connectivity/MultipathPolicyTracker.java +3 −1 Original line number Diff line number Diff line Loading @@ -27,6 +27,7 @@ import static android.net.NetworkPolicy.LIMIT_DISABLED; import static android.net.NetworkPolicy.WARNING_DISABLED; import static android.net.NetworkTemplate.NETWORK_TYPE_ALL; import static android.net.NetworkTemplate.OEM_MANAGED_ALL; import static android.net.NetworkTemplate.SUBSCRIBER_ID_MATCH_RULE_EXACT; import static android.provider.Settings.Global.NETWORK_DEFAULT_DAILY_MULTIPATH_QUOTA_BYTES; import static android.telephony.SubscriptionManager.INVALID_SUBSCRIPTION_ID; Loading Loading @@ -227,7 +228,8 @@ public class MultipathPolicyTracker { mNetworkTemplate = new NetworkTemplate( NetworkTemplate.MATCH_MOBILE, subscriberId, new String[] { subscriberId }, null, NetworkStats.METERED_ALL, NetworkStats.ROAMING_ALL, NetworkStats.DEFAULT_NETWORK_NO, NETWORK_TYPE_ALL, OEM_MANAGED_ALL); NetworkStats.DEFAULT_NETWORK_NO, NETWORK_TYPE_ALL, OEM_MANAGED_ALL, SUBSCRIBER_ID_MATCH_RULE_EXACT); mUsageCallback = new UsageCallback() { @Override public void onThresholdReached(int networkType, String subscriberId) { Loading
tests/net/java/android/net/NetworkTemplateTest.kt +110 −14 Original line number Diff line number Diff line Loading @@ -31,11 +31,16 @@ import android.net.NetworkTemplate.MATCH_MOBILE import android.net.NetworkTemplate.MATCH_MOBILE_WILDCARD import android.net.NetworkTemplate.MATCH_WIFI import android.net.NetworkTemplate.MATCH_WIFI_WILDCARD import android.net.NetworkTemplate.WIFI_NETWORKID_ALL import android.net.NetworkTemplate.NETWORK_TYPE_5G_NSA import android.net.NetworkTemplate.NETWORK_TYPE_ALL import android.net.NetworkTemplate.OEM_MANAGED_ALL import android.net.NetworkTemplate.OEM_MANAGED_NO import android.net.NetworkTemplate.OEM_MANAGED_YES import android.net.NetworkTemplate.SUBSCRIBER_ID_MATCH_RULE_EXACT import android.net.NetworkTemplate.buildTemplateWifi import android.net.NetworkTemplate.buildTemplateWifiWildcard import android.net.NetworkTemplate.buildTemplateCarrier import android.net.NetworkTemplate.buildTemplateMobileWithRatType import android.telephony.TelephonyManager import com.android.testutils.assertParcelSane Loading @@ -53,6 +58,7 @@ import kotlin.test.assertTrue private const val TEST_IMSI1 = "imsi1" private const val TEST_IMSI2 = "imsi2" private const val TEST_SSID1 = "ssid1" private const val TEST_SSID2 = "ssid2" @RunWith(JUnit4::class) class NetworkTemplateTest { Loading @@ -60,8 +66,8 @@ class NetworkTemplateTest { private fun buildMobileNetworkState(subscriberId: String): NetworkStateSnapshot = buildNetworkState(TYPE_MOBILE, subscriberId = subscriberId) private fun buildWifiNetworkState(ssid: String): NetworkStateSnapshot = buildNetworkState(TYPE_WIFI, ssid = ssid) private fun buildWifiNetworkState(subscriberId: String?, ssid: String?): NetworkStateSnapshot = buildNetworkState(TYPE_WIFI, subscriberId = subscriberId, ssid = ssid) private fun buildNetworkState( type: Int, Loading Loading @@ -93,6 +99,95 @@ class NetworkTemplateTest { MockitoAnnotations.initMocks(this) } @Test fun testWifiWildcardMatches() { val templateWifiWildcard = buildTemplateWifiWildcard() val identMobileImsi1 = buildNetworkIdentity(mockContext, buildMobileNetworkState(TEST_IMSI1), false, TelephonyManager.NETWORK_TYPE_UMTS) val identWifiImsiNullSsid1 = buildNetworkIdentity( mockContext, buildWifiNetworkState(null, TEST_SSID1), true, 0) val identWifiImsi1Ssid1 = buildNetworkIdentity( mockContext, buildWifiNetworkState(TEST_IMSI1, TEST_SSID1), true, 0) templateWifiWildcard.assertDoesNotMatch(identMobileImsi1) templateWifiWildcard.assertMatches(identWifiImsiNullSsid1) templateWifiWildcard.assertMatches(identWifiImsi1Ssid1) } @Test fun testWifiMatches() { val templateWifiSsid1 = buildTemplateWifi(TEST_SSID1) val templateWifiSsid1ImsiNull = buildTemplateWifi(TEST_SSID1, null) val templateWifiSsid1Imsi1 = buildTemplateWifi(TEST_SSID1, TEST_IMSI1) val templateWifiSsidAllImsi1 = buildTemplateWifi(WIFI_NETWORKID_ALL, TEST_IMSI1) val identMobile1 = buildNetworkIdentity(mockContext, buildMobileNetworkState(TEST_IMSI1), false, TelephonyManager.NETWORK_TYPE_UMTS) val identWifiImsiNullSsid1 = buildNetworkIdentity( mockContext, buildWifiNetworkState(null, TEST_SSID1), true, 0) val identWifiImsi1Ssid1 = buildNetworkIdentity( mockContext, buildWifiNetworkState(TEST_IMSI1, TEST_SSID1), true, 0) val identWifiImsi2Ssid1 = buildNetworkIdentity( mockContext, buildWifiNetworkState(TEST_IMSI2, TEST_SSID1), true, 0) val identWifiImsi1Ssid2 = buildNetworkIdentity( mockContext, buildWifiNetworkState(TEST_IMSI1, TEST_SSID2), true, 0) // Verify that template with SSID only matches any subscriberId and specific SSID. templateWifiSsid1.assertDoesNotMatch(identMobile1) templateWifiSsid1.assertMatches(identWifiImsiNullSsid1) templateWifiSsid1.assertMatches(identWifiImsi1Ssid1) templateWifiSsid1.assertMatches(identWifiImsi2Ssid1) templateWifiSsid1.assertDoesNotMatch(identWifiImsi1Ssid2) // Verify that template with SSID1 and null imsi matches any network with // SSID1 and null imsi. templateWifiSsid1ImsiNull.assertDoesNotMatch(identMobile1) templateWifiSsid1ImsiNull.assertMatches(identWifiImsiNullSsid1) templateWifiSsid1ImsiNull.assertDoesNotMatch(identWifiImsi1Ssid1) templateWifiSsid1ImsiNull.assertDoesNotMatch(identWifiImsi2Ssid1) templateWifiSsid1ImsiNull.assertDoesNotMatch(identWifiImsi1Ssid2) // Verify that template with SSID1 and imsi1 matches any network with // SSID1 and imsi1. templateWifiSsid1Imsi1.assertDoesNotMatch(identMobile1) templateWifiSsid1Imsi1.assertDoesNotMatch(identWifiImsiNullSsid1) templateWifiSsid1Imsi1.assertMatches(identWifiImsi1Ssid1) templateWifiSsid1Imsi1.assertDoesNotMatch(identWifiImsi2Ssid1) templateWifiSsid1Imsi1.assertDoesNotMatch(identWifiImsi1Ssid2) // Verify that template with SSID all and imsi1 matches any network with // any SSID and imsi1. templateWifiSsidAllImsi1.assertDoesNotMatch(identMobile1) templateWifiSsidAllImsi1.assertDoesNotMatch(identWifiImsiNullSsid1) templateWifiSsidAllImsi1.assertMatches(identWifiImsi1Ssid1) templateWifiSsidAllImsi1.assertDoesNotMatch(identWifiImsi2Ssid1) templateWifiSsidAllImsi1.assertMatches(identWifiImsi1Ssid2) } @Test fun testCarrierMatches() { val templateCarrierImsi1 = buildTemplateCarrier(TEST_IMSI1) val identMobile1 = buildNetworkIdentity(mockContext, buildMobileNetworkState(TEST_IMSI1), false, TelephonyManager.NETWORK_TYPE_UMTS) val identMobile2 = buildNetworkIdentity(mockContext, buildMobileNetworkState(TEST_IMSI2), false, TelephonyManager.NETWORK_TYPE_UMTS) val identWifiSsid1 = buildNetworkIdentity( mockContext, buildWifiNetworkState(null, TEST_SSID1), true, 0) val identCarrierWifiImsi1 = buildNetworkIdentity( mockContext, buildWifiNetworkState(TEST_IMSI1, TEST_SSID1), true, 0) val identCarrierWifiImsi2 = buildNetworkIdentity( mockContext, buildWifiNetworkState(TEST_IMSI2, TEST_SSID1), true, 0) templateCarrierImsi1.assertMatches(identCarrierWifiImsi1) templateCarrierImsi1.assertDoesNotMatch(identCarrierWifiImsi2) templateCarrierImsi1.assertDoesNotMatch(identWifiSsid1) templateCarrierImsi1.assertMatches(identMobile1) templateCarrierImsi1.assertDoesNotMatch(identMobile2) } @Test fun testRatTypeGroupMatches() { val stateMobile = buildMobileNetworkState(TEST_IMSI1) Loading @@ -117,7 +212,7 @@ class NetworkTemplateTest { val identImsi2 = buildNetworkIdentity(mockContext, buildMobileNetworkState(TEST_IMSI2), false, TelephonyManager.NETWORK_TYPE_UMTS) val identWifi = buildNetworkIdentity( mockContext, buildWifiNetworkState(TEST_SSID1), true, 0) mockContext, buildWifiNetworkState(null, TEST_SSID1), true, 0) // Assert that identity with the same RAT matches. templateUmts.assertMatches(identUmts) Loading Loading @@ -151,14 +246,16 @@ class NetworkTemplateTest { fun testParcelUnparcel() { val templateMobile = NetworkTemplate(MATCH_MOBILE, TEST_IMSI1, null, null, METERED_ALL, ROAMING_ALL, DEFAULT_NETWORK_ALL, TelephonyManager.NETWORK_TYPE_LTE, OEM_MANAGED_ALL) OEM_MANAGED_ALL, SUBSCRIBER_ID_MATCH_RULE_EXACT) val templateWifi = NetworkTemplate(MATCH_WIFI, null, null, TEST_SSID1, METERED_ALL, ROAMING_ALL, DEFAULT_NETWORK_ALL, 0, OEM_MANAGED_ALL) ROAMING_ALL, DEFAULT_NETWORK_ALL, 0, OEM_MANAGED_ALL, SUBSCRIBER_ID_MATCH_RULE_EXACT) val templateOem = NetworkTemplate(MATCH_MOBILE, null, null, null, METERED_ALL, ROAMING_ALL, DEFAULT_NETWORK_ALL, 0, OEM_MANAGED_YES) assertParcelSane(templateMobile, 9) assertParcelSane(templateWifi, 9) assertParcelSane(templateOem, 9) ROAMING_ALL, DEFAULT_NETWORK_ALL, 0, OEM_MANAGED_YES, SUBSCRIBER_ID_MATCH_RULE_EXACT) assertParcelSane(templateMobile, 10) assertParcelSane(templateWifi, 10) assertParcelSane(templateOem, 10) } // Verify NETWORK_TYPE_* constants in NetworkTemplate do not conflict with Loading Loading @@ -207,15 +304,14 @@ class NetworkTemplateTest { identSsid: String? = null ) { val oemManagedStates = arrayOf(OEM_NONE, OEM_PAID, OEM_PRIVATE, OEM_PAID or OEM_PRIVATE) // A null subscriberId needs a null matchSubscriberIds argument as well. val matchSubscriberIds = if (subscriberId == null) null else arrayOf(subscriberId) val matchSubscriberIds = arrayOf(subscriberId) val templateOemYes = NetworkTemplate(matchType, subscriberId, matchSubscriberIds, templateSsid, METERED_ALL, ROAMING_ALL, DEFAULT_NETWORK_ALL, NETWORK_TYPE_ALL, OEM_MANAGED_YES) OEM_MANAGED_YES, SUBSCRIBER_ID_MATCH_RULE_EXACT) val templateOemAll = NetworkTemplate(matchType, subscriberId, matchSubscriberIds, templateSsid, METERED_ALL, ROAMING_ALL, DEFAULT_NETWORK_ALL, NETWORK_TYPE_ALL, OEM_MANAGED_ALL) OEM_MANAGED_ALL, SUBSCRIBER_ID_MATCH_RULE_EXACT) for (identityOemManagedState in oemManagedStates) { val ident = buildNetworkIdentity(mockContext, buildNetworkState(networkType, Loading @@ -226,7 +322,7 @@ class NetworkTemplateTest { for (templateOemManagedState in oemManagedStates) { val template = NetworkTemplate(matchType, subscriberId, matchSubscriberIds, templateSsid, METERED_ALL, ROAMING_ALL, DEFAULT_NETWORK_ALL, NETWORK_TYPE_ALL, templateOemManagedState) NETWORK_TYPE_ALL, templateOemManagedState, SUBSCRIBER_ID_MATCH_RULE_EXACT) if (identityOemManagedState == templateOemManagedState) { template.assertMatches(ident) } else { Loading
tests/net/java/com/android/server/net/NetworkStatsServiceTest.java +10 −5 File changed.Preview size limit exceeded, changes collapsed. Show changes