Add metered, roaming, and defaultNetwork info to NetworkTemplate.
This will allow data usage clients to query for and receive callbacks on data usage matching these conditions. Bug: 35142602 Test: atest FrameworksNetTests Change-Id: I4d985a2734eeab7ee454c09cc2098b6b3c671c23
This commit is contained in:
@@ -24,6 +24,15 @@ import static android.net.ConnectivityManager.TYPE_WIFI;
|
|||||||
import static android.net.ConnectivityManager.TYPE_WIFI_P2P;
|
import static android.net.ConnectivityManager.TYPE_WIFI_P2P;
|
||||||
import static android.net.ConnectivityManager.TYPE_WIMAX;
|
import static android.net.ConnectivityManager.TYPE_WIMAX;
|
||||||
import static android.net.NetworkIdentity.COMBINE_SUBTYPE_ENABLED;
|
import static android.net.NetworkIdentity.COMBINE_SUBTYPE_ENABLED;
|
||||||
|
import static android.net.NetworkStats.DEFAULT_NETWORK_ALL;
|
||||||
|
import static android.net.NetworkStats.DEFAULT_NETWORK_NO;
|
||||||
|
import static android.net.NetworkStats.DEFAULT_NETWORK_YES;
|
||||||
|
import static android.net.NetworkStats.METERED_ALL;
|
||||||
|
import static android.net.NetworkStats.METERED_NO;
|
||||||
|
import static android.net.NetworkStats.METERED_YES;
|
||||||
|
import static android.net.NetworkStats.ROAMING_ALL;
|
||||||
|
import static android.net.NetworkStats.ROAMING_NO;
|
||||||
|
import static android.net.NetworkStats.ROAMING_YES;
|
||||||
import static android.net.wifi.WifiInfo.removeDoubleQuotes;
|
import static android.net.wifi.WifiInfo.removeDoubleQuotes;
|
||||||
import static android.telephony.TelephonyManager.NETWORK_CLASS_2_G;
|
import static android.telephony.TelephonyManager.NETWORK_CLASS_2_G;
|
||||||
import static android.telephony.TelephonyManager.NETWORK_CLASS_3_G;
|
import static android.telephony.TelephonyManager.NETWORK_CLASS_3_G;
|
||||||
@@ -191,16 +200,30 @@ public class NetworkTemplate implements Parcelable {
|
|||||||
|
|
||||||
private final String mNetworkId;
|
private final String mNetworkId;
|
||||||
|
|
||||||
|
// Matches for the NetworkStats constants METERED_*, ROAMING_* and DEFAULT_NETWORK_*.
|
||||||
|
private final int mMetered;
|
||||||
|
private final int mRoaming;
|
||||||
|
private final int mDefaultNetwork;
|
||||||
|
|
||||||
public NetworkTemplate(int matchRule, String subscriberId, String networkId) {
|
public NetworkTemplate(int matchRule, String subscriberId, String networkId) {
|
||||||
this(matchRule, subscriberId, new String[] { subscriberId }, networkId);
|
this(matchRule, subscriberId, new String[] { subscriberId }, networkId);
|
||||||
}
|
}
|
||||||
|
|
||||||
public NetworkTemplate(int matchRule, String subscriberId, String[] matchSubscriberIds,
|
public NetworkTemplate(int matchRule, String subscriberId, String[] matchSubscriberIds,
|
||||||
String networkId) {
|
String networkId) {
|
||||||
|
this(matchRule, subscriberId, matchSubscriberIds, networkId, METERED_ALL, ROAMING_ALL,
|
||||||
|
DEFAULT_NETWORK_ALL);
|
||||||
|
}
|
||||||
|
|
||||||
|
public NetworkTemplate(int matchRule, String subscriberId, String[] matchSubscriberIds,
|
||||||
|
String networkId, int metered, int roaming, int defaultNetwork) {
|
||||||
mMatchRule = matchRule;
|
mMatchRule = matchRule;
|
||||||
mSubscriberId = subscriberId;
|
mSubscriberId = subscriberId;
|
||||||
mMatchSubscriberIds = matchSubscriberIds;
|
mMatchSubscriberIds = matchSubscriberIds;
|
||||||
mNetworkId = networkId;
|
mNetworkId = networkId;
|
||||||
|
mMetered = metered;
|
||||||
|
mRoaming = roaming;
|
||||||
|
mDefaultNetwork = defaultNetwork;
|
||||||
|
|
||||||
if (!isKnownMatchRule(matchRule)) {
|
if (!isKnownMatchRule(matchRule)) {
|
||||||
Log.e(TAG, "Unknown network template rule " + matchRule
|
Log.e(TAG, "Unknown network template rule " + matchRule
|
||||||
@@ -213,6 +236,9 @@ public class NetworkTemplate implements Parcelable {
|
|||||||
mSubscriberId = in.readString();
|
mSubscriberId = in.readString();
|
||||||
mMatchSubscriberIds = in.createStringArray();
|
mMatchSubscriberIds = in.createStringArray();
|
||||||
mNetworkId = in.readString();
|
mNetworkId = in.readString();
|
||||||
|
mMetered = in.readInt();
|
||||||
|
mRoaming = in.readInt();
|
||||||
|
mDefaultNetwork = in.readInt();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -221,6 +247,9 @@ public class NetworkTemplate implements Parcelable {
|
|||||||
dest.writeString(mSubscriberId);
|
dest.writeString(mSubscriberId);
|
||||||
dest.writeStringArray(mMatchSubscriberIds);
|
dest.writeStringArray(mMatchSubscriberIds);
|
||||||
dest.writeString(mNetworkId);
|
dest.writeString(mNetworkId);
|
||||||
|
dest.writeInt(mMetered);
|
||||||
|
dest.writeInt(mRoaming);
|
||||||
|
dest.writeInt(mDefaultNetwork);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -243,12 +272,23 @@ public class NetworkTemplate implements Parcelable {
|
|||||||
if (mNetworkId != null) {
|
if (mNetworkId != null) {
|
||||||
builder.append(", networkId=").append(mNetworkId);
|
builder.append(", networkId=").append(mNetworkId);
|
||||||
}
|
}
|
||||||
|
if (mMetered != METERED_ALL) {
|
||||||
|
builder.append(", metered=").append(NetworkStats.meteredToString(mMetered));
|
||||||
|
}
|
||||||
|
if (mRoaming != ROAMING_ALL) {
|
||||||
|
builder.append(", roaming=").append(NetworkStats.roamingToString(mRoaming));
|
||||||
|
}
|
||||||
|
if (mDefaultNetwork != DEFAULT_NETWORK_ALL) {
|
||||||
|
builder.append(", defaultNetwork=").append(NetworkStats.defaultNetworkToString(
|
||||||
|
mDefaultNetwork));
|
||||||
|
}
|
||||||
return builder.toString();
|
return builder.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int hashCode() {
|
public int hashCode() {
|
||||||
return Objects.hash(mMatchRule, mSubscriberId, mNetworkId);
|
return Objects.hash(mMatchRule, mSubscriberId, mNetworkId, mMetered, mRoaming,
|
||||||
|
mDefaultNetwork);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -257,7 +297,10 @@ public class NetworkTemplate implements Parcelable {
|
|||||||
final NetworkTemplate other = (NetworkTemplate) obj;
|
final NetworkTemplate other = (NetworkTemplate) obj;
|
||||||
return mMatchRule == other.mMatchRule
|
return mMatchRule == other.mMatchRule
|
||||||
&& Objects.equals(mSubscriberId, other.mSubscriberId)
|
&& Objects.equals(mSubscriberId, other.mSubscriberId)
|
||||||
&& Objects.equals(mNetworkId, other.mNetworkId);
|
&& Objects.equals(mNetworkId, other.mNetworkId)
|
||||||
|
&& mMetered == other.mMetered
|
||||||
|
&& mRoaming == other.mRoaming
|
||||||
|
&& mDefaultNetwork == other.mDefaultNetwork;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@@ -300,6 +343,10 @@ public class NetworkTemplate implements Parcelable {
|
|||||||
* Test if given {@link NetworkIdentity} matches this template.
|
* Test if given {@link NetworkIdentity} matches this template.
|
||||||
*/
|
*/
|
||||||
public boolean matches(NetworkIdentity ident) {
|
public boolean matches(NetworkIdentity ident) {
|
||||||
|
if (!matchesMetered(ident)) return false;
|
||||||
|
if (!matchesRoaming(ident)) return false;
|
||||||
|
if (!matchesDefaultNetwork(ident)) return false;
|
||||||
|
|
||||||
switch (mMatchRule) {
|
switch (mMatchRule) {
|
||||||
case MATCH_MOBILE_ALL:
|
case MATCH_MOBILE_ALL:
|
||||||
return matchesMobile(ident);
|
return matchesMobile(ident);
|
||||||
@@ -326,6 +373,24 @@ public class NetworkTemplate implements Parcelable {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private boolean matchesMetered(NetworkIdentity ident) {
|
||||||
|
return (mMetered == METERED_ALL)
|
||||||
|
|| (mMetered == METERED_YES && ident.mMetered)
|
||||||
|
|| (mMetered == METERED_NO && !ident.mMetered);
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean matchesRoaming(NetworkIdentity ident) {
|
||||||
|
return (mRoaming == ROAMING_ALL)
|
||||||
|
|| (mRoaming == ROAMING_YES && ident.mRoaming)
|
||||||
|
|| (mRoaming == ROAMING_NO && !ident.mRoaming);
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean matchesDefaultNetwork(NetworkIdentity ident) {
|
||||||
|
return (mDefaultNetwork == DEFAULT_NETWORK_ALL)
|
||||||
|
|| (mDefaultNetwork == DEFAULT_NETWORK_YES && ident.mDefaultNetwork)
|
||||||
|
|| (mDefaultNetwork == DEFAULT_NETWORK_NO && !ident.mDefaultNetwork);
|
||||||
|
}
|
||||||
|
|
||||||
public boolean matchesSubscriberId(String subscriberId) {
|
public boolean matchesSubscriberId(String subscriberId) {
|
||||||
return ArrayUtils.contains(mMatchSubscriberIds, subscriberId);
|
return ArrayUtils.contains(mMatchSubscriberIds, subscriberId);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user