Forced EMBB and URLCC slices to be metered
Made consumer slices metered. We can make it configurable
in the future.
Fix: 301310451
Test: Basic telephony functionality tests
Test: atest DataConfigManagerTest
Change-Id: I9904375b44f7f00cea94f74040a5031affa838b8
diff --git a/flags/data.aconfig b/flags/data.aconfig
index 0bcd4bd..8d05a51 100644
--- a/flags/data.aconfig
+++ b/flags/data.aconfig
@@ -20,3 +20,10 @@
description: "Allow bring up MMTEL in nonVops area specified by carrier config."
bug: "241198464"
}
+
+flag {
+ name: "metered_embb_urlcc"
+ namespace: "telephony"
+ description: "Force networks that have PRIORITIZE_BANDWIDTH or PRIORITIZE_LATENCY to be metered."
+ bug: "301310451"
+}
diff --git a/src/java/com/android/internal/telephony/data/DataConfigManager.java b/src/java/com/android/internal/telephony/data/DataConfigManager.java
index 950ac10..39e7325 100644
--- a/src/java/com/android/internal/telephony/data/DataConfigManager.java
+++ b/src/java/com/android/internal/telephony/data/DataConfigManager.java
@@ -598,10 +598,20 @@
*/
public @NonNull @NetCapability Set<Integer> getMeteredNetworkCapabilities(boolean isRoaming) {
Set<Integer> meteredApnTypes = isRoaming ? mRoamingMeteredApnTypes : mMeteredApnTypes;
- return meteredApnTypes.stream()
+ Set<Integer> meteredCapabilities = meteredApnTypes.stream()
.map(DataUtils::apnTypeToNetworkCapability)
.filter(cap -> cap >= 0)
- .collect(Collectors.toUnmodifiableSet());
+ .collect(Collectors.toSet());
+
+ // Consumer slices are the slices that are allowed to be accessed by regular application to
+ // get better performance. They should be metered. This can be turned into configurations in
+ // the future.
+ if (mFeatureFlags.meteredEmbbUrlcc()) {
+ meteredCapabilities.add(NetworkCapabilities.NET_CAPABILITY_PRIORITIZE_BANDWIDTH);
+ meteredCapabilities.add(NetworkCapabilities.NET_CAPABILITY_PRIORITIZE_LATENCY);
+ }
+
+ return Collections.unmodifiableSet(meteredCapabilities);
}
/**
diff --git a/tests/telephonytests/src/com/android/internal/telephony/data/DataConfigManagerTest.java b/tests/telephonytests/src/com/android/internal/telephony/data/DataConfigManagerTest.java
index 4fcf620..005b312 100644
--- a/tests/telephonytests/src/com/android/internal/telephony/data/DataConfigManagerTest.java
+++ b/tests/telephonytests/src/com/android/internal/telephony/data/DataConfigManagerTest.java
@@ -18,18 +18,17 @@
import static com.google.common.truth.Truth.assertThat;
-import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.when;
+import android.net.NetworkCapabilities;
import android.os.Looper;
import android.os.PersistableBundle;
import android.telephony.CarrierConfigManager;
import android.telephony.SignalStrength;
import android.telephony.TelephonyDisplayInfo;
import android.telephony.TelephonyManager;
+import android.telephony.data.ApnSetting;
import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper;
@@ -51,7 +50,6 @@
logd("DataConfigManagerTest +Setup!");
super.setUp(getClass().getSimpleName());
mBundle = mContextFixture.getCarrierConfigBundle();
- when(mCarrierConfigManager.getConfigForSubId(anyInt(), any())).thenReturn(mBundle);
mDataConfigManagerUT = new DataConfigManager(mPhone, Looper.myLooper(), mFeatureFlags);
logd("DataConfigManagerTest -Setup!");
}
@@ -145,4 +143,24 @@
signalStrength))
.isEqualTo(0/*OUT_OF_SERVICE_AUTO_DATA_SWITCH_SCORE*/);
}
+
+ @Test
+ public void testMeteredNetworkCapabilities() {
+ doReturn(true).when(mFeatureFlags).meteredEmbbUrlcc();
+ mBundle.putStringArray(CarrierConfigManager.KEY_CARRIER_METERED_APN_TYPES_STRINGS,
+ new String[] {ApnSetting.TYPE_MMS_STRING, ApnSetting.TYPE_DEFAULT_STRING});
+ mBundle.putStringArray(CarrierConfigManager.KEY_CARRIER_METERED_ROAMING_APN_TYPES_STRINGS,
+ new String[] {ApnSetting.TYPE_SUPL_STRING, ApnSetting.TYPE_MCX_STRING});
+ mDataConfigManagerUT.sendEmptyMessage(1/*EVENT_CARRIER_CONFIG_CHANGED*/);
+ processAllMessages();
+
+ assertThat(mDataConfigManagerUT.getMeteredNetworkCapabilities(false)).containsExactly(
+ NetworkCapabilities.NET_CAPABILITY_MMS, NetworkCapabilities.NET_CAPABILITY_INTERNET,
+ NetworkCapabilities.NET_CAPABILITY_PRIORITIZE_BANDWIDTH,
+ NetworkCapabilities.NET_CAPABILITY_PRIORITIZE_LATENCY);
+ assertThat(mDataConfigManagerUT.getMeteredNetworkCapabilities(true)).containsExactly(
+ NetworkCapabilities.NET_CAPABILITY_SUPL, NetworkCapabilities.NET_CAPABILITY_MCX,
+ NetworkCapabilities.NET_CAPABILITY_PRIORITIZE_BANDWIDTH,
+ NetworkCapabilities.NET_CAPABILITY_PRIORITIZE_LATENCY);
+ }
}