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

Commit 4d59c7c3 authored by Chi Zhang's avatar Chi Zhang
Browse files

Fix carrier ID retrieval in VoiceCallSessionStats.

Cherry-picked from aosp/1425777

Bug: 166840411
Test: statsd_testdrive, atest FrameworksTelephonyTests, atest CtsStatsdHostTestCases:HostAtomTests
Merged-In: I22a55ec22baf41ff95ed384be0a2faafe0a7d929
Merged-In: I971b4358f7dbf84bab95b4c72df04538a4c51b18
Change-Id: I6182299e165c5e59c4750dea53c426730474b937
parent 203e00cd
Loading
Loading
Loading
Loading
+0 −3
Original line number Diff line number Diff line
@@ -490,9 +490,6 @@ public class SubscriptionController extends ISub.Stub {
            notifyOpportunisticSubscriptionInfoChanged();
        }
        metrics.updateActiveSubscriptionInfoList(subInfos);
        for (Phone phone : PhoneFactory.getPhones()) {
            phone.getVoiceCallSessionStats().onActiveSubscriptionInfoChanged(subInfos);
        }
    }

    /**
+2 −23
Original line number Diff line number Diff line
@@ -37,7 +37,6 @@ import android.os.SystemClock;
import android.telephony.Annotation.NetworkType;
import android.telephony.DisconnectCause;
import android.telephony.ServiceState;
import android.telephony.SubscriptionInfo;
import android.telephony.TelephonyManager;
import android.telephony.ims.ImsReasonInfo;
import android.telephony.ims.ImsStreamMediaProfile;
@@ -74,13 +73,6 @@ public class VoiceCallSessionStats {
    /** Bitmask value of unknown audio codecs. */
    private static final long AUDIO_CODEC_UNKNOWN = 1L << AudioCodec.AUDIO_CODEC_UNKNOWN;

    /**
     * Value denoting the carrier ID being unknown.
     *
     * <p>NOTE: 0 is unused in {@code carrier_list.textpb} (it starts from 1).
     */
    private static final int CARRIER_ID_UNKNOWN = 0;

    /** Holds the audio codec bitmask value for CS calls. */
    private static final SparseLongArray CS_CODEC_MAP = buildGsmCdmaCodecMap();

@@ -106,7 +98,6 @@ public class VoiceCallSessionStats {

    private final int mPhoneId;
    private final Phone mPhone;
    private int mCarrierId = CARRIER_ID_UNKNOWN;

    private final PersistAtomsStorage mAtomsStorage =
            PhoneFactory.getMetricsCollector().getAtomsStorage();
@@ -219,18 +210,6 @@ public class VoiceCallSessionStats {

    /* general & misc. */

    /** Updates internal states when carrier changes. */
    public synchronized void onActiveSubscriptionInfoChanged(List<SubscriptionInfo> subInfos) {
        int slotId = getSimSlotId();
        if (subInfos != null) {
            for (SubscriptionInfo subInfo : subInfos) {
                if (subInfo.getSimSlotIndex() == slotId) {
                    mCarrierId = subInfo.getCarrierId();
                }
            }
        }
    }

    /** Updates internal states when audio codec for a call is changed. */
    public synchronized void onAudioCodecChanged(Connection conn, int audioQuality) {
        VoiceCallSession proto = mCallProtos.get(getConnectionId(conn));
@@ -344,7 +323,7 @@ public class VoiceCallSessionStats {
            proto.simSlotIndex = getSimSlotId();
            proto.isMultiSim = SimSlotState.getCurrentState().numActiveSims > 1;
            proto.isEsim = isEsim();
            proto.carrierId = mCarrierId;
            proto.carrierId = mPhone.getCarrierId();
            proto.srvccCompleted = false;
            proto.srvccFailureCount = 0L;
            proto.srvccCancellationCount = 0L;
@@ -441,7 +420,7 @@ public class VoiceCallSessionStats {

    private void updateRatTracker(ServiceState state) {
        int rat = getRat(state);
        mRatUsage.add(mCarrierId, rat, getTimeMillis(), getConnectionIds());
        mRatUsage.add(mPhone.getCarrierId(), rat, getTimeMillis(), getConnectionIds());
        for (int i = 0; i < mCallProtos.size(); i++) {
            VoiceCallSession proto = mCallProtos.valueAt(i);
            if (proto.ratAtEnd != rat) {
+2 −13
Original line number Diff line number Diff line
@@ -41,7 +41,6 @@ import static org.mockito.Mockito.verifyNoMoreInteractions;
import android.telephony.DisconnectCause;
import android.telephony.PreciseDisconnectCause;
import android.telephony.ServiceState;
import android.telephony.SubscriptionInfo;
import android.telephony.TelephonyManager;
import android.telephony.ims.ImsReasonInfo;
import android.telephony.ims.ImsStreamMediaProfile;
@@ -102,10 +101,6 @@ public class VoiceCallSessionStatsTest extends TelephonyTest {
    @Mock private ImsPhoneCall mImsCall0;
    @Mock private ImsPhoneCall mImsCall1;

    @Mock private SubscriptionInfo mSubInfo0;
    @Mock private SubscriptionInfo mSubInfo1;
    private List<SubscriptionInfo> mSubInfos;

    private static class TestableVoiceCallSessionStats extends VoiceCallSessionStats {
        private long mTimeMillis = 0L;

@@ -135,7 +130,9 @@ public class VoiceCallSessionStatsTest extends TelephonyTest {
        super.setUp(getClass().getSimpleName());

        replaceInstance(PhoneFactory.class, "sPhones", null, new Phone[] {mPhone, mSecondPhone});
        doReturn(CARRIER_ID_SLOT_0).when(mPhone).getCarrierId();
        // mPhone's mSST/mServiceState has been set up by TelephonyTest
        doReturn(CARRIER_ID_SLOT_1).when(mSecondPhone).getCarrierId();
        doReturn(mSecondServiceStateTracker).when(mSecondPhone).getServiceStateTracker();
        doReturn(mSecondServiceState).when(mSecondServiceStateTracker).getServiceState();

@@ -176,17 +173,9 @@ public class VoiceCallSessionStatsTest extends TelephonyTest {
        doReturn(PhoneConstants.PHONE_TYPE_GSM).when(mGsmConnection1).getPhoneType();
        doReturn(false).when(mGsmConnection1).isEmergencyCall();

        mSubInfos = List.of(mSubInfo0, mSubInfo1);
        doReturn(0).when(mSubInfo0).getSimSlotIndex();
        doReturn(CARRIER_ID_SLOT_0).when(mSubInfo0).getCarrierId();
        doReturn(1).when(mSubInfo1).getSimSlotIndex();
        doReturn(CARRIER_ID_SLOT_1).when(mSubInfo1).getCarrierId();

        mVoiceCallSessionStats0 = new TestableVoiceCallSessionStats(0, mPhone);
        mVoiceCallSessionStats0.onActiveSubscriptionInfoChanged(mSubInfos);
        mVoiceCallSessionStats0.onServiceStateChanged(mServiceState);
        mVoiceCallSessionStats1 = new TestableVoiceCallSessionStats(1, mSecondPhone);
        mVoiceCallSessionStats1.onActiveSubscriptionInfoChanged(mSubInfos);
        mVoiceCallSessionStats1.onServiceStateChanged(mSecondServiceState);
    }