TEMP_NOT_METERED only for 5G override
This will bring DataConnection back to the state before ag/10946664 went
in and add TEMP_NOT_METERED case only when mUnmeteredOverride is true.
Test: atest DataConnectionTest
Bug: 176836936
Change-Id: I50d3dabffe5e62f56c5958afe8adb194444594a6
Merged-In: I50d3dabffe5e62f56c5958afe8adb194444594a6
diff --git a/src/java/com/android/internal/telephony/dataconnection/DataConnection.java b/src/java/com/android/internal/telephony/dataconnection/DataConnection.java
index 22e51f3..7aa9d0b 100644
--- a/src/java/com/android/internal/telephony/dataconnection/DataConnection.java
+++ b/src/java/com/android/internal/telephony/dataconnection/DataConnection.java
@@ -1395,11 +1395,15 @@
}
}
- // 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);
@@ -1421,20 +1425,18 @@
result.setCapability(NetworkCapabilities.NET_CAPABILITY_NOT_ROAMING,
!mPhone.getServiceState().getDataRoaming());
- if ((mSubscriptionOverride & SUBSCRIPTION_OVERRIDE_CONGESTED) == 0) {
- result.addCapability(NetworkCapabilities.NET_CAPABILITY_NOT_CONGESTED);
+ result.addCapability(NetworkCapabilities.NET_CAPABILITY_NOT_CONGESTED);
+
+ // 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);
}
- // 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);
- }
+ result.setCapability(NetworkCapabilities.NET_CAPABILITY_TEMPORARILY_NOT_METERED,
+ mUnmeteredOverride);
final boolean suspended =
mNetworkInfo.getDetailedState() == NetworkInfo.DetailedState.SUSPENDED;
diff --git a/tests/telephonytests/src/com/android/internal/telephony/dataconnection/DataConnectionTest.java b/tests/telephonytests/src/com/android/internal/telephony/dataconnection/DataConnectionTest.java
index e79bdfd..d1571ad 100644
--- a/tests/telephonytests/src/com/android/internal/telephony/dataconnection/DataConnectionTest.java
+++ b/tests/telephonytests/src/com/android/internal/telephony/dataconnection/DataConnectionTest.java
@@ -18,7 +18,6 @@
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;
@@ -617,7 +616,6 @@
testConnectEvent();
assertFalse(getNetworkCapabilities().hasCapability(NET_CAPABILITY_NOT_METERED));
- assertFalse(getNetworkCapabilities().hasCapability(NET_CAPABILITY_TEMPORARILY_NOT_METERED));
}
@Test
@@ -641,18 +639,18 @@
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));
}