Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b86d67f5 authored by Jack Yu's avatar Jack Yu
Browse files

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
parent aedf23aa
Loading
Loading
Loading
Loading
+7 −0
Original line number Diff line number Diff line
@@ -20,3 +20,10 @@ flag {
  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"
}
+12 −2
Original line number Diff line number Diff line
@@ -598,10 +598,20 @@ public class DataConfigManager extends Handler {
     */
    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);
    }

    /**
+22 −4
Original line number Diff line number Diff line
@@ -18,18 +18,17 @@ package com.android.internal.telephony.data;

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 @@ public class DataConfigManagerTest extends TelephonyTest {
        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 @@ public class DataConfigManagerTest extends TelephonyTest {
                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);
    }
}