diff --git a/core/java/android/net/DhcpInfoInternal.java b/core/java/android/net/DhcpInfoInternal.java index c87c34b8b12a8..f3508c1105bbb 100644 --- a/core/java/android/net/DhcpInfoInternal.java +++ b/core/java/android/net/DhcpInfoInternal.java @@ -147,7 +147,11 @@ public class DhcpInfoInternal { * metered, and sensitive to heavy data transfers. */ public boolean hasMeteredHint() { - return "ANDROID_METERED".equals(vendorInfo); + if (vendorInfo != null) { + return vendorInfo.contains("ANDROID_METERED"); + } else { + return false; + } } public String toString() { diff --git a/services/java/com/android/server/net/NetworkPolicyManagerService.java b/services/java/com/android/server/net/NetworkPolicyManagerService.java index 5255647693d16..8ebe224f15fd4 100644 --- a/services/java/com/android/server/net/NetworkPolicyManagerService.java +++ b/services/java/com/android/server/net/NetworkPolicyManagerService.java @@ -1497,6 +1497,11 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub { public boolean isNetworkMetered(NetworkState state) { final NetworkIdentity ident = NetworkIdentity.buildNetworkIdentity(mContext, state); + // roaming networks are always considered metered + if (ident.getRoaming()) { + return true; + } + final NetworkPolicy policy; synchronized (mRulesLock) { policy = findPolicyForNetworkLocked(ident);