diff options
author | Jeff Sharkey <jsharkey@android.com> | 2011-09-26 10:47:10 -0700 |
---|---|---|
committer | Jeff Sharkey <jsharkey@android.com> | 2011-09-26 10:50:30 -0700 |
commit | 630a1712168f402653039e368259cb9480454fa8 (patch) | |
tree | 8c8e457aa5e19f9af8fe6a5219357668eeb4c1c4 | |
parent | 61c0818f2425691e67921ee41ca80e62d2cb9004 (diff) | |
download | frameworks_base-630a1712168f402653039e368259cb9480454fa8.zip frameworks_base-630a1712168f402653039e368259cb9480454fa8.tar.gz frameworks_base-630a1712168f402653039e368259cb9480454fa8.tar.bz2 |
Overlay to configure data usage network types.
Specify which network types should be counted when computing data
usage totals.
Bug: 5361005
Change-Id: I830caed1a29199892d209a692b50f8b3e144cafe
-rw-r--r-- | core/java/android/net/NetworkTemplate.java | 41 | ||||
-rw-r--r-- | core/java/com/android/internal/util/ArrayUtils.java | 9 | ||||
-rwxr-xr-x | core/res/res/values/config.xml | 12 |
3 files changed, 48 insertions, 14 deletions
diff --git a/core/java/android/net/NetworkTemplate.java b/core/java/android/net/NetworkTemplate.java index cd49023..418b82f 100644 --- a/core/java/android/net/NetworkTemplate.java +++ b/core/java/android/net/NetworkTemplate.java @@ -19,14 +19,15 @@ package android.net; import static android.net.ConnectivityManager.TYPE_ETHERNET; import static android.net.ConnectivityManager.TYPE_WIFI; import static android.net.ConnectivityManager.TYPE_WIMAX; -import static android.net.ConnectivityManager.isNetworkTypeMobile; import static android.net.NetworkIdentity.scrubSubscriberId; 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_4_G; import static android.telephony.TelephonyManager.NETWORK_CLASS_UNKNOWN; 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.Parcelable; @@ -52,6 +53,16 @@ public class NetworkTemplate implements Parcelable { 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 * 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) { switch (mMatchRule) { @@ -171,23 +182,25 @@ public class NetworkTemplate implements Parcelable { } /** - * Check if mobile network with matching IMSI. Also matches - * {@link #TYPE_WIMAX}. + * Check if mobile network with matching IMSI. */ private boolean matchesMobile(NetworkIdentity ident) { - if (isNetworkTypeMobile(ident.mType) && Objects.equal(mSubscriberId, ident.mSubscriberId)) { - return true; - } else if (ident.mType == TYPE_WIMAX) { + if (ident.mType == TYPE_WIMAX) { + // TODO: consider matching against WiMAX subscriber identity 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. */ 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)) { case NETWORK_CLASS_UNKNOWN: 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 - * {@link #TYPE_WIMAX}. + * Check if mobile network classified 4G with matching IMSI. */ 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)) { case NETWORK_CLASS_4_G: return true; } - } else if (ident.mType == TYPE_WIMAX) { - return true; } return false; } diff --git a/core/java/com/android/internal/util/ArrayUtils.java b/core/java/com/android/internal/util/ArrayUtils.java index 159929b..3d22929 100644 --- a/core/java/com/android/internal/util/ArrayUtils.java +++ b/core/java/com/android/internal/util/ArrayUtils.java @@ -133,4 +133,13 @@ public class ArrayUtils } return false; } + + public static boolean contains(int[] array, int value) { + for (int element : array) { + if (element == value) { + return true; + } + } + return false; + } } diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml index 5eb3e5a..ae39760 100755 --- a/core/res/res/values/config.xml +++ b/core/res/res/values/config.xml @@ -138,6 +138,18 @@ <item>"0,1"</item> </string-array> + <!-- Set of NetworkInfo.getType() that reflect data usage. --> + <integer-array translatable="false" name="config_data_usage_network_types"> + <item>0</item> <!-- TYPE_MOBILE --> + <item>2</item> <!-- TYPE_MOBILE_MMS --> + <item>3</item> <!-- TYPE_MOBILE_SUPL --> + <item>4</item> <!-- TYPE_MOBILE_DUN --> + <item>5</item> <!-- TYPE_MOBILE_HIPRI --> + <item>10</item> <!-- TYPE_MOBILE_FOTA --> + <item>11</item> <!-- TYPE_MOBILE_IMS --> + <item>12</item> <!-- TYPE_MOBILE_CBS --> + </integer-array> + <!-- The maximum duration (in milliseconds) we expect a network transition to take --> <integer name="config_networkTransitionTimeout">60000</integer> |