Merge "[MS15.1] Remove get/setSubscriberIdMatchRule dependencies"
This commit is contained in:
@@ -23,7 +23,6 @@ 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;
|
||||
import android.annotation.Nullable;
|
||||
@@ -45,6 +44,7 @@ import java.time.ZoneId;
|
||||
import java.time.ZonedDateTime;
|
||||
import java.util.Iterator;
|
||||
import java.util.Objects;
|
||||
import java.util.Set;
|
||||
|
||||
/**
|
||||
* Policy for networks matching a {@link NetworkTemplate}, including usage cycle
|
||||
@@ -62,15 +62,16 @@ public class NetworkPolicy implements Parcelable, Comparable<NetworkPolicy> {
|
||||
* Initial Version of the NetworkTemplate backup serializer.
|
||||
*/
|
||||
private static final int TEMPLATE_BACKUP_VERSION_1_INIT = 1;
|
||||
private static final int TEMPLATE_BACKUP_VERSION_2_UNSUPPORTED = 2;
|
||||
/**
|
||||
* Version of the NetworkTemplate backup serializer that added carrier template support.
|
||||
*/
|
||||
private static final int TEMPLATE_BACKUP_VERSION_2_SUPPORT_CARRIER_TEMPLATE = 2;
|
||||
private static final int TEMPLATE_BACKUP_VERSION_3_SUPPORT_CARRIER_TEMPLATE = 3;
|
||||
/**
|
||||
* Latest Version of the NetworkTemplate Backup Serializer.
|
||||
*/
|
||||
private static final int TEMPLATE_BACKUP_VERSION_LATEST =
|
||||
TEMPLATE_BACKUP_VERSION_2_SUPPORT_CARRIER_TEMPLATE;
|
||||
TEMPLATE_BACKUP_VERSION_3_SUPPORT_CARRIER_TEMPLATE;
|
||||
|
||||
public static final int CYCLE_NONE = -1;
|
||||
public static final long WARNING_DISABLED = -1;
|
||||
@@ -337,10 +338,9 @@ public class NetworkPolicy implements Parcelable, Comparable<NetworkPolicy> {
|
||||
out.writeInt(TEMPLATE_BACKUP_VERSION_LATEST);
|
||||
|
||||
out.writeInt(template.getMatchRule());
|
||||
BackupUtils.writeString(out, template.getSubscriberId());
|
||||
BackupUtils.writeString(out, template.getNetworkId());
|
||||
BackupUtils.writeString(out, template.getSubscriberIds().iterator().next());
|
||||
BackupUtils.writeString(out, template.getWifiNetworkKey());
|
||||
out.writeInt(template.getMeteredness());
|
||||
out.writeInt(template.getSubscriberIdMatchRule());
|
||||
|
||||
return baos.toByteArray();
|
||||
}
|
||||
@@ -349,33 +349,32 @@ public class NetworkPolicy implements Parcelable, Comparable<NetworkPolicy> {
|
||||
private static NetworkTemplate getNetworkTemplateFromBackup(DataInputStream in)
|
||||
throws IOException, BackupUtils.BadVersionException {
|
||||
int version = in.readInt();
|
||||
if (version < TEMPLATE_BACKUP_VERSION_1_INIT || version > TEMPLATE_BACKUP_VERSION_LATEST) {
|
||||
if (version < TEMPLATE_BACKUP_VERSION_1_INIT || version > TEMPLATE_BACKUP_VERSION_LATEST
|
||||
|| version == TEMPLATE_BACKUP_VERSION_2_UNSUPPORTED) {
|
||||
throw new BackupUtils.BadVersionException("Unknown Backup Serialization Version");
|
||||
}
|
||||
|
||||
int matchRule = in.readInt();
|
||||
final String subscriberId = BackupUtils.readString(in);
|
||||
final String networkId = BackupUtils.readString(in);
|
||||
final String wifiNetworkKey = BackupUtils.readString(in);
|
||||
|
||||
final int metered;
|
||||
final int subscriberIdMatchRule;
|
||||
if (version >= TEMPLATE_BACKUP_VERSION_2_SUPPORT_CARRIER_TEMPLATE) {
|
||||
if (version >= TEMPLATE_BACKUP_VERSION_3_SUPPORT_CARRIER_TEMPLATE) {
|
||||
metered = in.readInt();
|
||||
subscriberIdMatchRule = in.readInt();
|
||||
} else {
|
||||
// For backward compatibility, fill the missing filters from match rules.
|
||||
metered = (matchRule == MATCH_MOBILE
|
||||
|| matchRule == NetworkTemplate.MATCH_MOBILE_WILDCARD
|
||||
|| matchRule == MATCH_CARRIER) ? METERED_YES : METERED_ALL;
|
||||
subscriberIdMatchRule = SUBSCRIBER_ID_MATCH_RULE_EXACT;
|
||||
metered = (matchRule == MATCH_MOBILE || matchRule == MATCH_CARRIER)
|
||||
? METERED_YES : METERED_ALL;
|
||||
}
|
||||
|
||||
try {
|
||||
return new NetworkTemplate(matchRule,
|
||||
subscriberId, new String[]{subscriberId},
|
||||
networkId, metered, NetworkStats.ROAMING_ALL,
|
||||
NetworkStats.DEFAULT_NETWORK_ALL, NetworkTemplate.NETWORK_TYPE_ALL,
|
||||
NetworkTemplate.OEM_MANAGED_ALL, subscriberIdMatchRule);
|
||||
final NetworkTemplate.Builder builder = new NetworkTemplate.Builder(matchRule)
|
||||
.setWifiNetworkKey(wifiNetworkKey)
|
||||
.setMeteredness(metered);
|
||||
if (subscriberId != null) {
|
||||
builder.setSubscriberIds(Set.of(subscriberId));
|
||||
}
|
||||
return builder.build();
|
||||
} catch (IllegalArgumentException e) {
|
||||
throw new BackupUtils.BadVersionException(
|
||||
"Restored network template contains unknown match rule " + matchRule, e);
|
||||
|
||||
@@ -51,6 +51,7 @@ import android.util.ArraySet;
|
||||
|
||||
import com.android.internal.util.ArrayUtils;
|
||||
import com.android.net.module.util.NetworkIdentityUtils;
|
||||
import com.android.net.module.util.NetworkStatsUtils;
|
||||
|
||||
import java.lang.annotation.Retention;
|
||||
import java.lang.annotation.RetentionPolicy;
|
||||
@@ -114,27 +115,6 @@ public final class NetworkTemplate implements Parcelable {
|
||||
*/
|
||||
public static final int MATCH_CARRIER = 10;
|
||||
|
||||
/** @hide */
|
||||
@Retention(RetentionPolicy.SOURCE)
|
||||
@IntDef(prefix = { "SUBSCRIBER_ID_MATCH_RULE_" }, value = {
|
||||
SUBSCRIBER_ID_MATCH_RULE_EXACT,
|
||||
SUBSCRIBER_ID_MATCH_RULE_ALL
|
||||
})
|
||||
public @interface SubscriberIdMatchRule{}
|
||||
/**
|
||||
* Value of the match rule of the subscriberId to match networks with specific subscriberId.
|
||||
*
|
||||
* @hide
|
||||
*/
|
||||
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.
|
||||
*
|
||||
* @hide
|
||||
*/
|
||||
public static final int SUBSCRIBER_ID_MATCH_RULE_ALL = 1;
|
||||
|
||||
// TODO: Remove this and replace all callers with WIFI_NETWORK_KEY_ALL.
|
||||
/** @hide */
|
||||
public static final String WIFI_NETWORKID_ALL = null;
|
||||
@@ -235,11 +215,11 @@ public final class NetworkTemplate implements Parcelable {
|
||||
if (TextUtils.isEmpty(subscriberId)) {
|
||||
return new NetworkTemplate(MATCH_MOBILE_WILDCARD, null, null, null,
|
||||
metered, ROAMING_ALL, DEFAULT_NETWORK_ALL, ratType, OEM_MANAGED_ALL,
|
||||
SUBSCRIBER_ID_MATCH_RULE_EXACT);
|
||||
NetworkStatsUtils.SUBSCRIBER_ID_MATCH_RULE_EXACT);
|
||||
}
|
||||
return new NetworkTemplate(MATCH_MOBILE, subscriberId, new String[]{subscriberId}, null,
|
||||
metered, ROAMING_ALL, DEFAULT_NETWORK_ALL, ratType, OEM_MANAGED_ALL,
|
||||
SUBSCRIBER_ID_MATCH_RULE_EXACT);
|
||||
NetworkStatsUtils.SUBSCRIBER_ID_MATCH_RULE_EXACT);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -285,7 +265,7 @@ public final class NetworkTemplate implements Parcelable {
|
||||
new String[] { null } /* matchSubscriberIds */,
|
||||
networkId, METERED_ALL, ROAMING_ALL,
|
||||
DEFAULT_NETWORK_ALL, NETWORK_TYPE_ALL, OEM_MANAGED_ALL,
|
||||
SUBSCRIBER_ID_MATCH_RULE_ALL);
|
||||
NetworkStatsUtils.SUBSCRIBER_ID_MATCH_RULE_ALL);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -302,7 +282,7 @@ public final class NetworkTemplate implements Parcelable {
|
||||
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);
|
||||
NetworkStatsUtils.SUBSCRIBER_ID_MATCH_RULE_EXACT);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -346,7 +326,7 @@ public final class NetworkTemplate implements Parcelable {
|
||||
return new NetworkTemplate(MATCH_CARRIER, subscriberId,
|
||||
new String[] { subscriberId }, null /* networkId */, METERED_YES, ROAMING_ALL,
|
||||
DEFAULT_NETWORK_ALL, NETWORK_TYPE_ALL, OEM_MANAGED_ALL,
|
||||
SUBSCRIBER_ID_MATCH_RULE_EXACT);
|
||||
NetworkStatsUtils.SUBSCRIBER_ID_MATCH_RULE_EXACT);
|
||||
}
|
||||
|
||||
private final int mMatchRule;
|
||||
@@ -384,7 +364,7 @@ public final class NetworkTemplate implements Parcelable {
|
||||
case MATCH_MOBILE:
|
||||
case MATCH_CARRIER:
|
||||
// MOBILE and CARRIER templates must always specify a subscriber ID.
|
||||
if (subscriberIdMatchRule == SUBSCRIBER_ID_MATCH_RULE_ALL) {
|
||||
if (subscriberIdMatchRule == NetworkStatsUtils.SUBSCRIBER_ID_MATCH_RULE_ALL) {
|
||||
throw new IllegalArgumentException("Invalid SubscriberIdMatchRule "
|
||||
+ "on match rule: " + getMatchRuleName(matchRule));
|
||||
}
|
||||
@@ -411,7 +391,7 @@ public final class NetworkTemplate implements Parcelable {
|
||||
this(matchRule, subscriberId, matchSubscriberIds, networkId,
|
||||
(matchRule == MATCH_MOBILE || matchRule == MATCH_MOBILE_WILDCARD) ? METERED_YES
|
||||
: METERED_ALL , ROAMING_ALL, DEFAULT_NETWORK_ALL, NETWORK_TYPE_ALL,
|
||||
OEM_MANAGED_ALL, SUBSCRIBER_ID_MATCH_RULE_EXACT);
|
||||
OEM_MANAGED_ALL, NetworkStatsUtils.SUBSCRIBER_ID_MATCH_RULE_EXACT);
|
||||
}
|
||||
|
||||
/** @hide */
|
||||
@@ -420,7 +400,8 @@ public final class NetworkTemplate implements Parcelable {
|
||||
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);
|
||||
defaultNetwork, subType, oemManaged,
|
||||
NetworkStatsUtils.SUBSCRIBER_ID_MATCH_RULE_EXACT);
|
||||
}
|
||||
|
||||
/** @hide */
|
||||
@@ -539,9 +520,9 @@ public final class NetworkTemplate implements Parcelable {
|
||||
|
||||
private static String subscriberIdMatchRuleToString(int rule) {
|
||||
switch (rule) {
|
||||
case SUBSCRIBER_ID_MATCH_RULE_EXACT:
|
||||
case NetworkStatsUtils.SUBSCRIBER_ID_MATCH_RULE_EXACT:
|
||||
return "EXACT_MATCH";
|
||||
case SUBSCRIBER_ID_MATCH_RULE_ALL:
|
||||
case NetworkStatsUtils.SUBSCRIBER_ID_MATCH_RULE_ALL:
|
||||
return "ALL";
|
||||
default:
|
||||
return "Unknown rule " + rule;
|
||||
@@ -608,15 +589,6 @@ public final class NetworkTemplate implements Parcelable {
|
||||
return mNetworkId;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get Subscriber Id Match Rule of the template.
|
||||
*
|
||||
* @hide
|
||||
*/
|
||||
public int getSubscriberIdMatchRule() {
|
||||
return mSubscriberIdMatchRule;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get meteredness filter of the template.
|
||||
*/
|
||||
@@ -730,7 +702,7 @@ public final class NetworkTemplate implements Parcelable {
|
||||
* @hide
|
||||
*/
|
||||
public boolean matchesSubscriberId(@Nullable String subscriberId) {
|
||||
return mSubscriberIdMatchRule == SUBSCRIBER_ID_MATCH_RULE_ALL
|
||||
return mSubscriberIdMatchRule == NetworkStatsUtils.SUBSCRIBER_ID_MATCH_RULE_ALL
|
||||
|| ArrayUtils.contains(mMatchSubscriberIds, subscriberId);
|
||||
}
|
||||
|
||||
@@ -1176,7 +1148,8 @@ public final class NetworkTemplate implements Parcelable {
|
||||
public NetworkTemplate build() {
|
||||
assertRequestableParameters();
|
||||
final int subscriberIdMatchRule = mMatchSubscriberIds.isEmpty()
|
||||
? SUBSCRIBER_ID_MATCH_RULE_ALL : SUBSCRIBER_ID_MATCH_RULE_EXACT;
|
||||
? NetworkStatsUtils.SUBSCRIBER_ID_MATCH_RULE_ALL
|
||||
: NetworkStatsUtils.SUBSCRIBER_ID_MATCH_RULE_EXACT;
|
||||
return new NetworkTemplate(getWildcardDeducedMatchRule(),
|
||||
mMatchSubscriberIds.isEmpty() ? null : mMatchSubscriberIds.iterator().next(),
|
||||
mMatchSubscriberIds.toArray(new String[0]),
|
||||
|
||||
@@ -25,9 +25,7 @@ import static android.net.NetworkCapabilities.NET_CAPABILITY_NOT_ROAMING;
|
||||
import static android.net.NetworkCapabilities.TRANSPORT_CELLULAR;
|
||||
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;
|
||||
|
||||
@@ -77,6 +75,8 @@ import java.time.ZoneId;
|
||||
import java.time.ZoneOffset;
|
||||
import java.time.ZonedDateTime;
|
||||
import java.time.temporal.ChronoUnit;
|
||||
import java.util.Objects;
|
||||
import java.util.Set;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
@@ -224,12 +224,13 @@ public class MultipathPolicyTracker {
|
||||
"Can't get TelephonyManager for subId %d", subId));
|
||||
}
|
||||
|
||||
subscriberId = tele.getSubscriberId();
|
||||
mNetworkTemplate = new NetworkTemplate(
|
||||
NetworkTemplate.MATCH_MOBILE, subscriberId, new String[] { subscriberId },
|
||||
null, NetworkStats.METERED_YES, NetworkStats.ROAMING_ALL,
|
||||
NetworkStats.DEFAULT_NETWORK_NO, NETWORK_TYPE_ALL, OEM_MANAGED_ALL,
|
||||
SUBSCRIBER_ID_MATCH_RULE_EXACT);
|
||||
subscriberId = Objects.requireNonNull(tele.getSubscriberId(),
|
||||
"Null subscriber Id for subId " + subId);
|
||||
mNetworkTemplate = new NetworkTemplate.Builder(NetworkTemplate.MATCH_MOBILE)
|
||||
.setSubscriberIds(Set.of(subscriberId))
|
||||
.setMeteredness(NetworkStats.METERED_YES)
|
||||
.setDefaultNetworkStatus(NetworkStats.DEFAULT_NETWORK_NO)
|
||||
.build();
|
||||
mUsageCallback = new UsageCallback() {
|
||||
@Override
|
||||
public void onThresholdReached(int networkType, String subscriberId) {
|
||||
|
||||
@@ -255,6 +255,7 @@ import com.android.internal.util.IndentingPrintWriter;
|
||||
import com.android.internal.util.StatLogger;
|
||||
import com.android.internal.util.XmlUtils;
|
||||
import com.android.net.module.util.NetworkIdentityUtils;
|
||||
import com.android.net.module.util.NetworkStatsUtils;
|
||||
import com.android.net.module.util.PermissionUtils;
|
||||
import com.android.server.EventLogTags;
|
||||
import com.android.server.LocalServices;
|
||||
@@ -2388,7 +2389,8 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub {
|
||||
templateMeteredness = readIntAttribute(in, ATTR_TEMPLATE_METERED);
|
||||
|
||||
} else {
|
||||
subscriberIdMatchRule = NetworkTemplate.SUBSCRIBER_ID_MATCH_RULE_EXACT;
|
||||
subscriberIdMatchRule =
|
||||
NetworkStatsUtils.SUBSCRIBER_ID_MATCH_RULE_EXACT;
|
||||
if (templateType == MATCH_MOBILE) {
|
||||
Log.d(TAG, "Update template match rule from mobile to carrier and"
|
||||
+ " force to metered");
|
||||
@@ -2451,11 +2453,17 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub {
|
||||
} else {
|
||||
inferred = false;
|
||||
}
|
||||
final NetworkTemplate template = new NetworkTemplate(templateType,
|
||||
subscriberId, new String[] { subscriberId },
|
||||
networkId, templateMeteredness, NetworkStats.ROAMING_ALL,
|
||||
NetworkStats.DEFAULT_NETWORK_ALL, NetworkTemplate.NETWORK_TYPE_ALL,
|
||||
NetworkTemplate.OEM_MANAGED_ALL, subscriberIdMatchRule);
|
||||
final NetworkTemplate.Builder builder =
|
||||
new NetworkTemplate.Builder(templateType)
|
||||
.setWifiNetworkKey(networkId)
|
||||
.setMeteredness(templateMeteredness);
|
||||
if (subscriberIdMatchRule
|
||||
== NetworkStatsUtils.SUBSCRIBER_ID_MATCH_RULE_EXACT) {
|
||||
final ArraySet<String> ids = new ArraySet<>();
|
||||
ids.add(subscriberId);
|
||||
builder.setSubscriberIds(ids);
|
||||
}
|
||||
final NetworkTemplate template = builder.build();
|
||||
if (NetworkPolicy.isTemplatePersistable(template)) {
|
||||
mNetworkPolicy.put(template, new NetworkPolicy(template, cycleRule,
|
||||
warningBytes, limitBytes, lastWarningSnooze,
|
||||
@@ -2671,8 +2679,10 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub {
|
||||
if (subscriberId != null) {
|
||||
out.attribute(null, ATTR_SUBSCRIBER_ID, subscriberId);
|
||||
}
|
||||
writeIntAttribute(out, ATTR_SUBSCRIBER_ID_MATCH_RULE,
|
||||
template.getSubscriberIdMatchRule());
|
||||
final int subscriberIdMatchRule = template.getSubscriberIds().isEmpty()
|
||||
? NetworkStatsUtils.SUBSCRIBER_ID_MATCH_RULE_ALL
|
||||
: NetworkStatsUtils.SUBSCRIBER_ID_MATCH_RULE_EXACT;
|
||||
writeIntAttribute(out, ATTR_SUBSCRIBER_ID_MATCH_RULE, subscriberIdMatchRule);
|
||||
final String networkId = template.getNetworkId();
|
||||
if (networkId != null) {
|
||||
out.attribute(null, ATTR_NETWORK_ID, networkId);
|
||||
|
||||
@@ -1986,9 +1986,8 @@ public class NetworkPolicyManagerServiceTest {
|
||||
assertEquals("Unexpected template match rule in network policies",
|
||||
NetworkTemplate.MATCH_CARRIER,
|
||||
actualPolicy.template.getMatchRule());
|
||||
assertEquals("Unexpected subscriberId match rule in network policies",
|
||||
NetworkTemplate.SUBSCRIBER_ID_MATCH_RULE_EXACT,
|
||||
actualPolicy.template.getSubscriberIdMatchRule());
|
||||
assertTrue("Unexpected subscriberIds size in network policies",
|
||||
actualPolicy.template.getSubscriberIds().size() > 0);
|
||||
assertEquals("Unexpected template meteredness in network policies",
|
||||
METERED_YES, actualPolicy.template.getMeteredness());
|
||||
}
|
||||
@@ -2003,9 +2002,8 @@ public class NetworkPolicyManagerServiceTest {
|
||||
assertEquals("Unexpected template match rule in network policies",
|
||||
NetworkTemplate.MATCH_WIFI,
|
||||
actualPolicy.template.getMatchRule());
|
||||
assertEquals("Unexpected subscriberId match rule in network policies",
|
||||
NetworkTemplate.SUBSCRIBER_ID_MATCH_RULE_ALL,
|
||||
actualPolicy.template.getSubscriberIdMatchRule());
|
||||
assertEquals("Unexpected subscriberIds size in network policies",
|
||||
actualPolicy.template.getSubscriberIds().size(), 0);
|
||||
assertEquals("Unexpected template meteredness in network policies",
|
||||
METERED_NO, actualPolicy.template.getMeteredness());
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user