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

Commit 6e64f758 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Report NR connected state to provide resolution of 5G NSA mode"

parents edb21629 10dc347f
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -5191,6 +5191,12 @@ message DataUsageBytesTransfer {
    // record is combined across opportunistic data subscriptions.
    // See {@link SubscriptionManager#setOpportunistic}.
    optional DataSubscriptionState opportunistic_data_sub = 10;

    // Indicate whether NR is connected, server side could use this with RAT type to determine if
    // the record is for 5G NSA (Non Stand Alone) mode, where the primary cell is still LTE and
    // network allocates a secondary 5G cell so telephony reports RAT = LTE along with NR state as
    // connected.
    optional bool is_nr_connected = 11;
}

/**
+13 −3
Original line number Diff line number Diff line
@@ -1130,19 +1130,29 @@ public class StatsPullAtomService extends SystemService {

    private void addDataUsageBytesTransferAtoms(@NonNull NetworkStatsExt statsExt,
            @NonNull List<StatsEvent> pulledData) {

        // Workaround for 5G NSA mode, see {@link NetworkTemplate#NETWORK_TYPE_5G_NSA}.
        // 5G NSA mode means the primary cell is LTE with a secondary connection to an
        // NR cell. To mitigate risk, NetworkStats is currently storing this state as
        // a fake RAT type rather than storing the boolean separately.
        final boolean is5GNsa = statsExt.ratType == NetworkTemplate.NETWORK_TYPE_5G_NSA;
        // Report NR connected in 5G non-standalone mode, or if the RAT type is NR to begin with.
        final boolean isNR = is5GNsa || statsExt.ratType == TelephonyManager.NETWORK_TYPE_NR;

        final NetworkStats.Entry entry = new NetworkStats.Entry(); // for recycling
        for (int i = 0; i < statsExt.stats.size(); i++) {
            statsExt.stats.getValues(i, entry);
            pulledData.add(FrameworkStatsLog.buildStatsEvent(
                    FrameworkStatsLog.DATA_USAGE_BYTES_TRANSFER, entry.set, entry.rxBytes,
                    entry.rxPackets, entry.txBytes, entry.txPackets, statsExt.ratType,
                    entry.rxPackets, entry.txBytes, entry.txPackets,
                    is5GNsa ? TelephonyManager.NETWORK_TYPE_LTE : statsExt.ratType,
                    // Fill information about subscription, these cannot be null since invalid data
                    // would be filtered when adding into subInfo list.
                    statsExt.subInfo.mcc, statsExt.subInfo.mnc, statsExt.subInfo.carrierId,
                    statsExt.subInfo.isOpportunistic
                            ? DATA_USAGE_BYTES_TRANSFER__OPPORTUNISTIC_DATA_SUB__OPPORTUNISTIC
                            : DATA_USAGE_BYTES_TRANSFER__OPPORTUNISTIC_DATA_SUB__NOT_OPPORTUNISTIC)
            );
                            : DATA_USAGE_BYTES_TRANSFER__OPPORTUNISTIC_DATA_SUB__NOT_OPPORTUNISTIC,
                    isNR));
        }
    }