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

Commit f7f3d12f authored by Sarah Chin's avatar Sarah Chin Committed by Automerger Merge Worker
Browse files

Merge changes from topic "5g_tempnotmetered" am: c99581db

Original change: https://android-review.googlesource.com/c/platform/frameworks/opt/telephony/+/1544172

MUST ONLY BE SUBMITTED BY AUTOMERGER

Change-Id: Iaa35937da48c9293b0c2ac288a074e53061133c2
parents d5a96ebd c99581db
Loading
Loading
Loading
Loading
+31 −29
Original line number Diff line number Diff line
@@ -50,9 +50,9 @@ import android.telephony.AccessNetworkConstants;
import android.telephony.AccessNetworkConstants.TransportType;
import android.telephony.Annotation.ApnType;
import android.telephony.Annotation.DataFailureCause;
import android.telephony.AnomalyReporter;
import android.telephony.Annotation.DataState;
import android.telephony.Annotation.NetworkType;
import android.telephony.AnomalyReporter;
import android.telephony.CarrierConfigManager;
import android.telephony.DataFailCause;
import android.telephony.NetworkRegistrationInfo;
@@ -1613,11 +1613,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);
@@ -1639,29 +1643,27 @@ 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);

        // 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);

        // 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);
            if (result.hasCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)
        if (mUnmeteredOverride && result.hasCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)
                && (mPhone.getRadioAccessFamily() & TelephonyManager.NETWORK_TYPE_BITMASK_NR)
                == 0) {
            String message = "Unexpected TEMPORARILY_NOT_METERED on devices not supporting NR.";
            loge(message);
            // Using fixed UUID to avoid duplicate bugreport notification
            AnomalyReporter.reportAnomaly(
                        UUID.fromString("9151f0fc-01df-4afb-b744-9c4529055248"),
                        message);
            }
        } else {
            result.removeCapability(NetworkCapabilities.NET_CAPABILITY_TEMPORARILY_NOT_METERED);
                    UUID.fromString("9151f0fc-01df-4afb-b744-9c4529055248"), message);
        }

        result.setCapability(NetworkCapabilities.NET_CAPABILITY_NOT_SUSPENDED, !mIsSuspended);
+3 −5
Original line number Diff line number Diff line
@@ -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;

@@ -610,7 +609,6 @@ public class DataConnectionTest extends TelephonyTest {
        testConnectEvent();

        assertFalse(getNetworkCapabilities().hasCapability(NET_CAPABILITY_NOT_METERED));
        assertFalse(getNetworkCapabilities().hasCapability(NET_CAPABILITY_TEMPORARILY_NOT_METERED));
    }

    @Test
@@ -634,18 +632,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));
    }