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

Commit 22e3a0d8 authored by Aswin Sankar's avatar Aswin Sankar Committed by Android (Google) Code Review
Browse files

Merge "ServiceStateStats tracks cross-SIM calling reg" into main

parents 9db4e850 c80cf2c8
Loading
Loading
Loading
Loading
+1 −0
Original line number Original line Diff line number Diff line
@@ -383,6 +383,7 @@ message CellularServiceState {
    optional int32 fold_state = 12;
    optional int32 fold_state = 12;
    optional bool override_voice_service = 13;
    optional bool override_voice_service = 13;
    optional bool isDataEnabled = 14;
    optional bool isDataEnabled = 14;
    optional bool is_iwlan_cross_sim = 15;


    // Internal use only
    // Internal use only
    optional int64 last_used_millis = 10001;
    optional int64 last_used_millis = 10001;
+2 −1
Original line number Original line Diff line number Diff line
@@ -935,7 +935,8 @@ public class MetricsCollector implements StatsManager.StatsPullAtomCallback {
                state.isInternetPdnUp,
                state.isInternetPdnUp,
                state.foldState,
                state.foldState,
                state.overrideVoiceService,
                state.overrideVoiceService,
                state.isDataEnabled);
                state.isDataEnabled,
                state.isIwlanCrossSim);
    }
    }


    private static StatsEvent buildStatsEvent(VoiceCallRatUsage usage) {
    private static StatsEvent buildStatsEvent(VoiceCallRatUsage usage) {
+2 −1
Original line number Original line Diff line number Diff line
@@ -1713,7 +1713,8 @@ public class PersistAtomsStorage {
                    && state.isInternetPdnUp == key.isInternetPdnUp
                    && state.isInternetPdnUp == key.isInternetPdnUp
                    && state.foldState == key.foldState
                    && state.foldState == key.foldState
                    && state.overrideVoiceService == key.overrideVoiceService
                    && state.overrideVoiceService == key.overrideVoiceService
                    && state.isDataEnabled == key.isDataEnabled) {
                    && state.isDataEnabled == key.isDataEnabled
                    && state.isIwlanCrossSim == key.isIwlanCrossSim) {
                return state;
                return state;
            }
            }
        }
        }
+12 −0
Original line number Original line Diff line number Diff line
@@ -32,6 +32,7 @@ import android.telephony.NetworkRegistrationInfo;
import android.telephony.ServiceState;
import android.telephony.ServiceState;
import android.telephony.ServiceState.RoamingType;
import android.telephony.ServiceState.RoamingType;
import android.telephony.TelephonyManager;
import android.telephony.TelephonyManager;
import android.telephony.ims.stub.ImsRegistrationImplBase;


import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.telephony.Phone;
import com.android.internal.telephony.Phone;
@@ -89,6 +90,7 @@ public class ServiceStateStats extends DataNetworkControllerCallback {
                            CellularServiceState newServiceState = copyOf(state.mServiceState);
                            CellularServiceState newServiceState = copyOf(state.mServiceState);
                            newServiceState.voiceRat =
                            newServiceState.voiceRat =
                                    getVoiceRat(mPhone, getServiceStateForPhone(mPhone));
                                    getVoiceRat(mPhone, getServiceStateForPhone(mPhone));
                            newServiceState.isIwlanCrossSim = isCrossSimCallingRegistered(mPhone);
                            return new TimestampedServiceState(newServiceState, now);
                            return new TimestampedServiceState(newServiceState, now);
                        });
                        });
        addServiceState(lastState, now);
        addServiceState(lastState, now);
@@ -132,6 +134,7 @@ public class ServiceStateStats extends DataNetworkControllerCallback {
            newState.foldState = mDeviceStateHelper.getFoldState();
            newState.foldState = mDeviceStateHelper.getFoldState();
            newState.overrideVoiceService = mOverrideVoiceService.get();
            newState.overrideVoiceService = mOverrideVoiceService.get();
            newState.isDataEnabled = mPhone.getDataSettingsManager().isDataEnabled();
            newState.isDataEnabled = mPhone.getDataSettingsManager().isDataEnabled();
            newState.isIwlanCrossSim = isCrossSimCallingRegistered(mPhone);
            TimestampedServiceState prevState =
            TimestampedServiceState prevState =
                    mLastState.getAndSet(new TimestampedServiceState(newState, now));
                    mLastState.getAndSet(new TimestampedServiceState(newState, now));
            addServiceStateAndSwitch(
            addServiceStateAndSwitch(
@@ -302,6 +305,7 @@ public class ServiceStateStats extends DataNetworkControllerCallback {
        copy.foldState = state.foldState;
        copy.foldState = state.foldState;
        copy.overrideVoiceService = state.overrideVoiceService;
        copy.overrideVoiceService = state.overrideVoiceService;
        copy.isDataEnabled = state.isDataEnabled;
        copy.isDataEnabled = state.isDataEnabled;
        copy.isIwlanCrossSim = state.isIwlanCrossSim;
        return copy;
        return copy;
    }
    }


@@ -360,6 +364,14 @@ public class ServiceStateStats extends DataNetworkControllerCallback {
        }
        }
    }
    }


    private boolean isCrossSimCallingRegistered(Phone phone) {
        if (phone.getImsPhone() != null) {
            return phone.getImsPhone().getImsRegistrationTech()
                    == ImsRegistrationImplBase.REGISTRATION_TECH_CROSS_SIM;
        }
        return false;
    }

    /** Returns RAT used by WWAN if WWAN is in service. */
    /** Returns RAT used by WWAN if WWAN is in service. */
    public static @NetworkType int getRat(
    public static @NetworkType int getRat(
            ServiceState state, @NetworkRegistrationInfo.Domain int domain) {
            ServiceState state, @NetworkRegistrationInfo.Domain int domain) {
+25 −0
Original line number Original line Diff line number Diff line
@@ -44,6 +44,7 @@ import android.telephony.Annotation.NetworkType;
import android.telephony.NetworkRegistrationInfo;
import android.telephony.NetworkRegistrationInfo;
import android.telephony.ServiceState;
import android.telephony.ServiceState;
import android.telephony.TelephonyManager;
import android.telephony.TelephonyManager;
import android.telephony.ims.stub.ImsRegistrationImplBase;
import android.test.suitebuilder.annotation.SmallTest;
import android.test.suitebuilder.annotation.SmallTest;


import com.android.internal.telephony.Phone;
import com.android.internal.telephony.Phone;
@@ -399,6 +400,30 @@ public class ServiceStateStatsTest extends TelephonyTest {
        verifyNoMoreInteractions(mPersistAtomsStorage);
        verifyNoMoreInteractions(mPersistAtomsStorage);
    }
    }


    @Test
    @SmallTest
    public void onImsVoiceRegistrationChanged_crossSimCalling() throws Exception {
        mServiceStateStats.onServiceStateChanged(mServiceState);
        mockWwanPsRat(TelephonyManager.NETWORK_TYPE_UNKNOWN);
        doReturn(TelephonyManager.NETWORK_TYPE_IWLAN).when(mImsStats).getImsVoiceRadioTech();
        doReturn(ImsRegistrationImplBase.REGISTRATION_TECH_CROSS_SIM).when(mImsPhone)
                .getImsRegistrationTech();
        mServiceStateStats.incTimeMillis(100L);
        mServiceStateStats.onImsVoiceRegistrationChanged();
        mServiceStateStats.incTimeMillis(200L);
        mServiceStateStats.conclude();

        ArgumentCaptor<CellularServiceState> captor =
                ArgumentCaptor.forClass(CellularServiceState.class);
        verify(mPersistAtomsStorage, times(2))
                .addCellularServiceStateAndCellularDataServiceSwitch(captor.capture(), eq(null));
        CellularServiceState state = captor.getAllValues().get(1);

        assertEquals(200L, state.totalTimeMillis);
        assertEquals(TelephonyManager.NETWORK_TYPE_IWLAN, state.voiceRat);
        assertTrue(state.isIwlanCrossSim);
    }

    @Test
    @Test
    @SmallTest
    @SmallTest
    public void onInternetDataNetworkDisconnected() throws Exception {
    public void onInternetDataNetworkDisconnected() throws Exception {