Overlay to configure data usage network types.
Specify which network types should be counted when computing data usage totals. Bug: 5361005 Change-Id: I830caed1a29199892d209a692b50f8b3e144cafe
This commit is contained in:
@@ -19,14 +19,15 @@ package android.net;
|
|||||||
import static android.net.ConnectivityManager.TYPE_ETHERNET;
|
import static android.net.ConnectivityManager.TYPE_ETHERNET;
|
||||||
import static android.net.ConnectivityManager.TYPE_WIFI;
|
import static android.net.ConnectivityManager.TYPE_WIFI;
|
||||||
import static android.net.ConnectivityManager.TYPE_WIMAX;
|
import static android.net.ConnectivityManager.TYPE_WIMAX;
|
||||||
import static android.net.ConnectivityManager.isNetworkTypeMobile;
|
|
||||||
import static android.net.NetworkIdentity.scrubSubscriberId;
|
import static android.net.NetworkIdentity.scrubSubscriberId;
|
||||||
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;
|
||||||
import static android.telephony.TelephonyManager.NETWORK_CLASS_4_G;
|
import static android.telephony.TelephonyManager.NETWORK_CLASS_4_G;
|
||||||
import static android.telephony.TelephonyManager.NETWORK_CLASS_UNKNOWN;
|
import static android.telephony.TelephonyManager.NETWORK_CLASS_UNKNOWN;
|
||||||
import static android.telephony.TelephonyManager.getNetworkClass;
|
import static android.telephony.TelephonyManager.getNetworkClass;
|
||||||
|
import static com.android.internal.util.ArrayUtils.contains;
|
||||||
|
|
||||||
|
import android.content.res.Resources;
|
||||||
import android.os.Parcel;
|
import android.os.Parcel;
|
||||||
import android.os.Parcelable;
|
import android.os.Parcelable;
|
||||||
|
|
||||||
@@ -51,6 +52,16 @@ public class NetworkTemplate implements Parcelable {
|
|||||||
/** {@hide} */
|
/** {@hide} */
|
||||||
public static final int MATCH_ETHERNET = 5;
|
public static final int MATCH_ETHERNET = 5;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set of {@link NetworkInfo#getType()} that reflect data usage.
|
||||||
|
*/
|
||||||
|
private static final int[] DATA_USAGE_NETWORK_TYPES;
|
||||||
|
|
||||||
|
static {
|
||||||
|
DATA_USAGE_NETWORK_TYPES = Resources.getSystem().getIntArray(
|
||||||
|
com.android.internal.R.array.config_data_usage_network_types);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Template to combine all {@link ConnectivityManager#TYPE_MOBILE} style
|
* Template to combine all {@link ConnectivityManager#TYPE_MOBILE} style
|
||||||
* networks together. Only uses statistics for requested IMSI.
|
* networks together. Only uses statistics for requested IMSI.
|
||||||
@@ -151,7 +162,7 @@ public class NetworkTemplate implements Parcelable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Test if this network matches the given template and IMSI.
|
* Test if given {@link NetworkIdentity} matches this template.
|
||||||
*/
|
*/
|
||||||
public boolean matches(NetworkIdentity ident) {
|
public boolean matches(NetworkIdentity ident) {
|
||||||
switch (mMatchRule) {
|
switch (mMatchRule) {
|
||||||
@@ -171,23 +182,25 @@ public class NetworkTemplate implements Parcelable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Check if mobile network with matching IMSI. Also matches
|
* Check if mobile network with matching IMSI.
|
||||||
* {@link #TYPE_WIMAX}.
|
|
||||||
*/
|
*/
|
||||||
private boolean matchesMobile(NetworkIdentity ident) {
|
private boolean matchesMobile(NetworkIdentity ident) {
|
||||||
if (isNetworkTypeMobile(ident.mType) && Objects.equal(mSubscriberId, ident.mSubscriberId)) {
|
if (ident.mType == TYPE_WIMAX) {
|
||||||
return true;
|
// TODO: consider matching against WiMAX subscriber identity
|
||||||
} else if (ident.mType == TYPE_WIMAX) {
|
|
||||||
return true;
|
return true;
|
||||||
|
} else {
|
||||||
|
return (contains(DATA_USAGE_NETWORK_TYPES, ident.mType)
|
||||||
|
&& Objects.equal(mSubscriberId, ident.mSubscriberId));
|
||||||
}
|
}
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Check if mobile network classified 3G or lower with matching IMSI.
|
* Check if mobile network classified 3G or lower with matching IMSI.
|
||||||
*/
|
*/
|
||||||
private boolean matchesMobile3gLower(NetworkIdentity ident) {
|
private boolean matchesMobile3gLower(NetworkIdentity ident) {
|
||||||
if (isNetworkTypeMobile(ident.mType) && Objects.equal(mSubscriberId, ident.mSubscriberId)) {
|
if (ident.mType == TYPE_WIMAX) {
|
||||||
|
return false;
|
||||||
|
} else if (matchesMobile(ident)) {
|
||||||
switch (getNetworkClass(ident.mSubType)) {
|
switch (getNetworkClass(ident.mSubType)) {
|
||||||
case NETWORK_CLASS_UNKNOWN:
|
case NETWORK_CLASS_UNKNOWN:
|
||||||
case NETWORK_CLASS_2_G:
|
case NETWORK_CLASS_2_G:
|
||||||
@@ -199,17 +212,17 @@ public class NetworkTemplate implements Parcelable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Check if mobile network classified 4G with matching IMSI. Also matches
|
* Check if mobile network classified 4G with matching IMSI.
|
||||||
* {@link #TYPE_WIMAX}.
|
|
||||||
*/
|
*/
|
||||||
private boolean matchesMobile4g(NetworkIdentity ident) {
|
private boolean matchesMobile4g(NetworkIdentity ident) {
|
||||||
if (isNetworkTypeMobile(ident.mType) && Objects.equal(mSubscriberId, ident.mSubscriberId)) {
|
if (ident.mType == TYPE_WIMAX) {
|
||||||
|
// TODO: consider matching against WiMAX subscriber identity
|
||||||
|
return true;
|
||||||
|
} else if (matchesMobile(ident)) {
|
||||||
switch (getNetworkClass(ident.mSubType)) {
|
switch (getNetworkClass(ident.mSubType)) {
|
||||||
case NETWORK_CLASS_4_G:
|
case NETWORK_CLASS_4_G:
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
} else if (ident.mType == TYPE_WIMAX) {
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user