Loading src/java/com/android/internal/telephony/dataconnection/DataConnection.java +19 −17 Original line number Diff line number Diff line Loading @@ -1396,11 +1396,15 @@ public class DataConnection extends StateMachine { } } // DataConnection has the immutable NOT_METERED capability only if all APNs in the // APN setting are unmetered according to carrier config METERED_APN_TYPES_STRINGS. // All other cases should use the dynamic TEMPORARILY_NOT_METERED capability instead. result.setCapability(NetworkCapabilities.NET_CAPABILITY_NOT_METERED, !ApnSettingUtils.isMetered(mApnSetting, mPhone)); // Mark NOT_METERED in the following cases: // 1. All APNs in the APN settings are unmetered. // 2. The non-restricted data is intended for unmetered use only. if ((mUnmeteredUseOnly && !mRestrictedNetworkOverride) || !ApnSettingUtils.isMetered(mApnSetting, mPhone)) { result.addCapability(NetworkCapabilities.NET_CAPABILITY_NOT_METERED); } else { result.removeCapability(NetworkCapabilities.NET_CAPABILITY_NOT_METERED); } if (result.deduceRestrictedCapability()) { result.removeCapability(NetworkCapabilities.NET_CAPABILITY_NOT_RESTRICTED); Loading @@ -1422,21 +1426,19 @@ public class DataConnection extends StateMachine { result.setCapability(NetworkCapabilities.NET_CAPABILITY_NOT_ROAMING, !mPhone.getServiceState().getDataRoaming()); if ((mSubscriptionOverride & SUBSCRIPTION_OVERRIDE_CONGESTED) == 0) { result.addCapability(NetworkCapabilities.NET_CAPABILITY_NOT_CONGESTED); } // Mark TEMPORARILY_NOT_METERED in the following cases: // 1. The non-restricted data is intended for unmetered use only. // 2. DcTracker set an unmetered override due to network/location (eg. 5G). // 3. SubscriptionManager set an unmetered override as requested by policy. if ((mUnmeteredUseOnly && !mRestrictedNetworkOverride) || mUnmeteredOverride || (mSubscriptionOverride & SUBSCRIPTION_OVERRIDE_UNMETERED) != 0) { result.addCapability(NetworkCapabilities.NET_CAPABILITY_TEMPORARILY_NOT_METERED); } else { result.removeCapability(NetworkCapabilities.NET_CAPABILITY_TEMPORARILY_NOT_METERED); // Override values set above when requested by policy if ((mSubscriptionOverride & SUBSCRIPTION_OVERRIDE_UNMETERED) != 0) { result.addCapability(NetworkCapabilities.NET_CAPABILITY_NOT_METERED); } if ((mSubscriptionOverride & SUBSCRIPTION_OVERRIDE_CONGESTED) != 0) { result.removeCapability(NetworkCapabilities.NET_CAPABILITY_NOT_CONGESTED); } result.setCapability(NetworkCapabilities.NET_CAPABILITY_TEMPORARILY_NOT_METERED, mUnmeteredOverride); final boolean suspended = mNetworkInfo.getDetailedState() == NetworkInfo.DetailedState.SUSPENDED; result.setCapability(NetworkCapabilities.NET_CAPABILITY_NOT_SUSPENDED, !suspended); Loading tests/telephonytests/src/com/android/internal/telephony/dataconnection/DataConnectionTest.java +3 −5 Original line number Diff line number Diff line Loading @@ -18,7 +18,6 @@ package com.android.internal.telephony.dataconnection; import static android.net.NetworkCapabilities.NET_CAPABILITY_NOT_CONGESTED; import static android.net.NetworkCapabilities.NET_CAPABILITY_NOT_METERED; import static android.net.NetworkCapabilities.NET_CAPABILITY_TEMPORARILY_NOT_METERED; import static android.net.NetworkPolicyManager.SUBSCRIPTION_OVERRIDE_CONGESTED; import static android.net.NetworkPolicyManager.SUBSCRIPTION_OVERRIDE_UNMETERED; Loading Loading @@ -617,7 +616,6 @@ public class DataConnectionTest extends TelephonyTest { testConnectEvent(); assertFalse(getNetworkCapabilities().hasCapability(NET_CAPABILITY_NOT_METERED)); assertFalse(getNetworkCapabilities().hasCapability(NET_CAPABILITY_TEMPORARILY_NOT_METERED)); } @Test Loading @@ -641,18 +639,18 @@ public class DataConnectionTest extends TelephonyTest { new String[] { "default" }); testConnectEvent(); assertFalse(getNetworkCapabilities().hasCapability(NET_CAPABILITY_TEMPORARILY_NOT_METERED)); assertFalse(getNetworkCapabilities().hasCapability(NET_CAPABILITY_NOT_METERED)); assertTrue(getNetworkCapabilities().hasCapability(NET_CAPABILITY_NOT_CONGESTED)); mDc.onSubscriptionOverride(SUBSCRIPTION_OVERRIDE_UNMETERED, SUBSCRIPTION_OVERRIDE_UNMETERED); assertTrue(getNetworkCapabilities().hasCapability(NET_CAPABILITY_TEMPORARILY_NOT_METERED)); assertTrue(getNetworkCapabilities().hasCapability(NET_CAPABILITY_NOT_METERED)); assertTrue(getNetworkCapabilities().hasCapability(NET_CAPABILITY_NOT_CONGESTED)); mDc.onSubscriptionOverride(SUBSCRIPTION_OVERRIDE_UNMETERED, 0); assertFalse(getNetworkCapabilities().hasCapability(NET_CAPABILITY_TEMPORARILY_NOT_METERED)); assertFalse(getNetworkCapabilities().hasCapability(NET_CAPABILITY_NOT_METERED)); assertTrue(getNetworkCapabilities().hasCapability(NET_CAPABILITY_NOT_CONGESTED)); } Loading Loading
src/java/com/android/internal/telephony/dataconnection/DataConnection.java +19 −17 Original line number Diff line number Diff line Loading @@ -1396,11 +1396,15 @@ public class DataConnection extends StateMachine { } } // DataConnection has the immutable NOT_METERED capability only if all APNs in the // APN setting are unmetered according to carrier config METERED_APN_TYPES_STRINGS. // All other cases should use the dynamic TEMPORARILY_NOT_METERED capability instead. result.setCapability(NetworkCapabilities.NET_CAPABILITY_NOT_METERED, !ApnSettingUtils.isMetered(mApnSetting, mPhone)); // Mark NOT_METERED in the following cases: // 1. All APNs in the APN settings are unmetered. // 2. The non-restricted data is intended for unmetered use only. if ((mUnmeteredUseOnly && !mRestrictedNetworkOverride) || !ApnSettingUtils.isMetered(mApnSetting, mPhone)) { result.addCapability(NetworkCapabilities.NET_CAPABILITY_NOT_METERED); } else { result.removeCapability(NetworkCapabilities.NET_CAPABILITY_NOT_METERED); } if (result.deduceRestrictedCapability()) { result.removeCapability(NetworkCapabilities.NET_CAPABILITY_NOT_RESTRICTED); Loading @@ -1422,21 +1426,19 @@ public class DataConnection extends StateMachine { result.setCapability(NetworkCapabilities.NET_CAPABILITY_NOT_ROAMING, !mPhone.getServiceState().getDataRoaming()); if ((mSubscriptionOverride & SUBSCRIPTION_OVERRIDE_CONGESTED) == 0) { result.addCapability(NetworkCapabilities.NET_CAPABILITY_NOT_CONGESTED); } // Mark TEMPORARILY_NOT_METERED in the following cases: // 1. The non-restricted data is intended for unmetered use only. // 2. DcTracker set an unmetered override due to network/location (eg. 5G). // 3. SubscriptionManager set an unmetered override as requested by policy. if ((mUnmeteredUseOnly && !mRestrictedNetworkOverride) || mUnmeteredOverride || (mSubscriptionOverride & SUBSCRIPTION_OVERRIDE_UNMETERED) != 0) { result.addCapability(NetworkCapabilities.NET_CAPABILITY_TEMPORARILY_NOT_METERED); } else { result.removeCapability(NetworkCapabilities.NET_CAPABILITY_TEMPORARILY_NOT_METERED); // Override values set above when requested by policy if ((mSubscriptionOverride & SUBSCRIPTION_OVERRIDE_UNMETERED) != 0) { result.addCapability(NetworkCapabilities.NET_CAPABILITY_NOT_METERED); } if ((mSubscriptionOverride & SUBSCRIPTION_OVERRIDE_CONGESTED) != 0) { result.removeCapability(NetworkCapabilities.NET_CAPABILITY_NOT_CONGESTED); } result.setCapability(NetworkCapabilities.NET_CAPABILITY_TEMPORARILY_NOT_METERED, mUnmeteredOverride); final boolean suspended = mNetworkInfo.getDetailedState() == NetworkInfo.DetailedState.SUSPENDED; result.setCapability(NetworkCapabilities.NET_CAPABILITY_NOT_SUSPENDED, !suspended); Loading
tests/telephonytests/src/com/android/internal/telephony/dataconnection/DataConnectionTest.java +3 −5 Original line number Diff line number Diff line Loading @@ -18,7 +18,6 @@ package com.android.internal.telephony.dataconnection; import static android.net.NetworkCapabilities.NET_CAPABILITY_NOT_CONGESTED; import static android.net.NetworkCapabilities.NET_CAPABILITY_NOT_METERED; import static android.net.NetworkCapabilities.NET_CAPABILITY_TEMPORARILY_NOT_METERED; import static android.net.NetworkPolicyManager.SUBSCRIPTION_OVERRIDE_CONGESTED; import static android.net.NetworkPolicyManager.SUBSCRIPTION_OVERRIDE_UNMETERED; Loading Loading @@ -617,7 +616,6 @@ public class DataConnectionTest extends TelephonyTest { testConnectEvent(); assertFalse(getNetworkCapabilities().hasCapability(NET_CAPABILITY_NOT_METERED)); assertFalse(getNetworkCapabilities().hasCapability(NET_CAPABILITY_TEMPORARILY_NOT_METERED)); } @Test Loading @@ -641,18 +639,18 @@ public class DataConnectionTest extends TelephonyTest { new String[] { "default" }); testConnectEvent(); assertFalse(getNetworkCapabilities().hasCapability(NET_CAPABILITY_TEMPORARILY_NOT_METERED)); assertFalse(getNetworkCapabilities().hasCapability(NET_CAPABILITY_NOT_METERED)); assertTrue(getNetworkCapabilities().hasCapability(NET_CAPABILITY_NOT_CONGESTED)); mDc.onSubscriptionOverride(SUBSCRIPTION_OVERRIDE_UNMETERED, SUBSCRIPTION_OVERRIDE_UNMETERED); assertTrue(getNetworkCapabilities().hasCapability(NET_CAPABILITY_TEMPORARILY_NOT_METERED)); assertTrue(getNetworkCapabilities().hasCapability(NET_CAPABILITY_NOT_METERED)); assertTrue(getNetworkCapabilities().hasCapability(NET_CAPABILITY_NOT_CONGESTED)); mDc.onSubscriptionOverride(SUBSCRIPTION_OVERRIDE_UNMETERED, 0); assertFalse(getNetworkCapabilities().hasCapability(NET_CAPABILITY_TEMPORARILY_NOT_METERED)); assertFalse(getNetworkCapabilities().hasCapability(NET_CAPABILITY_NOT_METERED)); assertTrue(getNetworkCapabilities().hasCapability(NET_CAPABILITY_NOT_CONGESTED)); } Loading