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

Commit 2d655689 authored by Sarah Chin's avatar Sarah Chin Committed by android-build-merger
Browse files

Merge "5G metered metrics"

am: fdc031d8

Change-Id: Idd80857b16ef4bbaead10a1e730216c6fc4b800f
parents c21c7446 fdc031d8
Loading
Loading
Loading
Loading
+11 −0
Original line number Diff line number Diff line
@@ -795,6 +795,9 @@ message TelephonyEvent {

    // Emergency Number update event (Device HAL >= 1.4).
    EMERGENCY_NUMBER_REPORT = 21;

    // Network capabilities change event.
    NETWORK_CAPABILITIES_CHANGED = 22;
  }

  enum ApnType {
@@ -1697,6 +1700,11 @@ message TelephonyEvent {
    optional string preferApn = 12;
  }

  message NetworkCapabilitiesInfo {
    // Is network unmetered
    optional bool is_network_unmetered = 1;
  }

  // Time when event happened on device, in milliseconds since epoch
  optional int64 timestamp_millis = 1;

@@ -1769,6 +1777,9 @@ message TelephonyEvent {

  // Updated Emergency Call info.
  optional EmergencyNumberInfo updated_emergency_number = 25;

  // NetworkCapabilities changed info.
  optional NetworkCapabilitiesInfo network_capabilities = 26;
}

message ActiveSubscriptionInfo {
+9 −0
Original line number Diff line number Diff line
@@ -34,6 +34,7 @@ import android.util.SparseArray;
import com.android.internal.telephony.DctConstants;
import com.android.internal.telephony.Phone;
import com.android.internal.telephony.RILConstants;
import com.android.internal.telephony.metrics.TelephonyMetrics;
import com.android.internal.util.IndentingPrintWriter;

import java.io.FileDescriptor;
@@ -216,6 +217,14 @@ public class DcNetworkAgent extends NetworkAgent {
                    + ", dc=" + mDataConnection.getName();
            logd(logStr);
            mNetCapsLocalLog.log(logStr);
            if (networkCapabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)) {
                // only log metrics for DataConnection with NET_CAPABILITY_INTERNET
                if (mNetworkCapabilities == null
                        || networkCapabilities.isMetered() != mNetworkCapabilities.isMetered()) {
                    TelephonyMetrics.getInstance().writeNetworkCapabilitiesChangedEvent(
                            mPhone.getPhoneId(), networkCapabilities);
                }
            }
            mNetworkCapabilities = networkCapabilities;
        }
        sendNetworkCapabilities(networkCapabilities);
+9 −0
Original line number Diff line number Diff line
@@ -25,6 +25,7 @@ import static com.android.internal.telephony.nano.TelephonyProto.TelephonyEvent;
import static com.android.internal.telephony.nano.TelephonyProto.TelephonyEvent.CarrierIdMatching;
import static com.android.internal.telephony.nano.TelephonyProto.TelephonyEvent.CarrierKeyChange;
import static com.android.internal.telephony.nano.TelephonyProto.TelephonyEvent.ModemRestart;
import static com.android.internal.telephony.nano.TelephonyProto.TelephonyEvent.NetworkCapabilitiesInfo;
import static com.android.internal.telephony.nano.TelephonyProto.TelephonyEvent.RilDeactivateDataCall;
import static com.android.internal.telephony.nano.TelephonyProto.TelephonyEvent.RilSetupDataCall;
import static com.android.internal.telephony.nano.TelephonyProto.TelephonyEvent.RilSetupDataCallResponse;
@@ -209,4 +210,12 @@ public class TelephonyEventBuilder {
        mEvent.onDemandDataSwitch = onDemandDataSwitch;
        return this;
    }

    /** Set and build network capabilities changed event. */
    public TelephonyEventBuilder setNetworkCapabilities(
            NetworkCapabilitiesInfo networkCapabilities) {
        mEvent.type = TelephonyEvent.Type.NETWORK_CAPABILITIES_CHANGED;
        mEvent.networkCapabilities = networkCapabilities;
        return this;
    }
}
+35 −0
Original line number Diff line number Diff line
@@ -37,6 +37,7 @@ import static com.android.internal.telephony.nano.TelephonyProto.PdpType.PDP_TYP
import static com.android.internal.telephony.nano.TelephonyProto.PdpType.PDP_TYPE_UNSTRUCTURED;
import static com.android.internal.telephony.nano.TelephonyProto.PdpType.PDP_UNKNOWN;

import android.net.NetworkCapabilities;
import android.os.Build;
import android.os.SystemClock;
import android.os.SystemProperties;
@@ -93,6 +94,7 @@ import com.android.internal.telephony.nano.TelephonyProto.TelephonyEvent.Carrier
import com.android.internal.telephony.nano.TelephonyProto.TelephonyEvent.CarrierKeyChange;
import com.android.internal.telephony.nano.TelephonyProto.TelephonyEvent.DataSwitch;
import com.android.internal.telephony.nano.TelephonyProto.TelephonyEvent.ModemRestart;
import com.android.internal.telephony.nano.TelephonyProto.TelephonyEvent.NetworkCapabilitiesInfo;
import com.android.internal.telephony.nano.TelephonyProto.TelephonyEvent.OnDemandDataSwitch;
import com.android.internal.telephony.nano.TelephonyProto.TelephonyEvent.RilDeactivateDataCall;
import com.android.internal.telephony.nano.TelephonyProto.TelephonyEvent.RilDeactivateDataCall.DeactivateReason;
@@ -206,6 +208,12 @@ public class TelephonyMetrics {
     */
    private final SparseArray<CarrierIdMatching> mLastCarrierId = new SparseArray<>();

    /**
     * Last NetworkCapabilitiesInfo, indexed by phone id.
     */
    private final SparseArray<NetworkCapabilitiesInfo> mLastNetworkCapabilitiesInfos =
            new SparseArray<>();

    /**
     * Last RilDataCall Events (indexed by cid), indexed by phone id
     */
@@ -314,6 +322,8 @@ public class TelephonyMetrics {
                return "NITZ_TIME";
            case TelephonyEvent.Type.EMERGENCY_NUMBER_REPORT:
                return "EMERGENCY_NUMBER_REPORT";
            case TelephonyEvent.Type.NETWORK_CAPABILITIES_CHANGED:
                return "NETWORK_CAPABILITIES_CHANGED";
            default:
                return Integer.toString(event);
        }
@@ -652,6 +662,13 @@ public class TelephonyMetrics {
            addTelephonyEvent(event);
        }

        for (int i = 0; i < mLastNetworkCapabilitiesInfos.size(); i++) {
            final int key = mLastNetworkCapabilitiesInfos.keyAt(i);
            TelephonyEvent event = new TelephonyEventBuilder(mStartElapsedTimeMs, key)
                    .setNetworkCapabilities(mLastNetworkCapabilitiesInfos.get(key)).build();
            addTelephonyEvent(event);
        }

        for (int i = 0; i < mLastRilDataCallEvents.size(); i++) {
            final int key = mLastRilDataCallEvents.keyAt(i);
            for (int j = 0; j < mLastRilDataCallEvents.get(key).size(); j++) {
@@ -2515,6 +2532,24 @@ public class TelephonyMetrics {
        addTelephonyEvent(event);
    }

    /**
     * Write network capabilities changed event
     *
     * @param phoneId Phone id
     * @param networkCapabilities Network capabilities
     */
    public void writeNetworkCapabilitiesChangedEvent(int phoneId,
            NetworkCapabilities networkCapabilities) {
        final NetworkCapabilitiesInfo caps = new NetworkCapabilitiesInfo();
        caps.isNetworkUnmetered = networkCapabilities.hasCapability(
                NetworkCapabilities.NET_CAPABILITY_NOT_METERED);

        TelephonyEvent event = new TelephonyEventBuilder(phoneId)
                .setNetworkCapabilities(caps).build();
        mLastNetworkCapabilitiesInfos.put(phoneId, caps);
        addTelephonyEvent(event);
    }

    /**
     * Convert SMS format
     */
+27 −0
Original line number Diff line number Diff line
@@ -38,6 +38,7 @@ import static org.junit.Assert.assertTrue;
import static org.mockito.Mockito.doReturn;

import android.net.LinkAddress;
import android.net.NetworkCapabilities;
import android.net.NetworkUtils;
import android.telephony.ServiceState;
import android.telephony.TelephonyManager;
@@ -306,6 +307,32 @@ public class TelephonyMetricsTest extends TelephonyTest {
                log.events[0].updatedEmergencyNumber.routing);
    }

    // Test write Network Capabilities changed event
    @Test
    @SmallTest
    public void testWriteNetworkCapabilitiesChangedEvent() throws Exception {
        NetworkCapabilities caps = new NetworkCapabilities();
        caps.addCapability(NetworkCapabilities.NET_CAPABILITY_NOT_METERED);
        mMetrics.writeNetworkCapabilitiesChangedEvent(mPhone.getPhoneId(), caps);

        caps.removeCapability(NetworkCapabilities.NET_CAPABILITY_NOT_METERED);
        mMetrics.writeNetworkCapabilitiesChangedEvent(mPhone.getPhoneId(), caps);

        TelephonyLog log = buildProto();

        assertEquals(2, log.events.length);
        assertEquals(0, log.callSessions.length);
        assertEquals(0, log.smsSessions.length);

        assertEquals(mPhone.getPhoneId(), log.events[0].phoneId);
        assertEquals(TelephonyEvent.Type.NETWORK_CAPABILITIES_CHANGED, log.events[0].type);
        assertTrue(log.events[0].networkCapabilities.isNetworkUnmetered);

        assertEquals(mPhone.getPhoneId(), log.events[1].phoneId);
        assertEquals(TelephonyEvent.Type.NETWORK_CAPABILITIES_CHANGED, log.events[1].type);
        assertFalse(log.events[1].networkCapabilities.isNetworkUnmetered);
    }

    // Test write on IMS call start
    @Test
    @SmallTest