diff options
5 files changed, 42 insertions, 2 deletions
diff --git a/proto/src/persist_atoms.proto b/proto/src/persist_atoms.proto index 537f824788..3fb8349252 100644 --- a/proto/src/persist_atoms.proto +++ b/proto/src/persist_atoms.proto @@ -382,6 +382,7 @@ message CellularServiceState { optional int32 fold_state = 12; optional bool override_voice_service = 13; optional bool isDataEnabled = 14; + optional bool is_iwlan_cross_sim = 15; // Internal use only optional int64 last_used_millis = 10001; diff --git a/src/java/com/android/internal/telephony/metrics/MetricsCollector.java b/src/java/com/android/internal/telephony/metrics/MetricsCollector.java index 8c1aae3847..798afcac02 100644 --- a/src/java/com/android/internal/telephony/metrics/MetricsCollector.java +++ b/src/java/com/android/internal/telephony/metrics/MetricsCollector.java @@ -934,7 +934,8 @@ public class MetricsCollector implements StatsManager.StatsPullAtomCallback { state.isInternetPdnUp, state.foldState, state.overrideVoiceService, - state.isDataEnabled); + state.isDataEnabled, + state.isIwlanCrossSim); } private static StatsEvent buildStatsEvent(VoiceCallRatUsage usage) { diff --git a/src/java/com/android/internal/telephony/metrics/PersistAtomsStorage.java b/src/java/com/android/internal/telephony/metrics/PersistAtomsStorage.java index d5d041a693..7c25cf0976 100644 --- a/src/java/com/android/internal/telephony/metrics/PersistAtomsStorage.java +++ b/src/java/com/android/internal/telephony/metrics/PersistAtomsStorage.java @@ -1713,7 +1713,8 @@ public class PersistAtomsStorage { && state.isInternetPdnUp == key.isInternetPdnUp && state.foldState == key.foldState && state.overrideVoiceService == key.overrideVoiceService - && state.isDataEnabled == key.isDataEnabled) { + && state.isDataEnabled == key.isDataEnabled + && state.isIwlanCrossSim == key.isIwlanCrossSim) { return state; } } diff --git a/src/java/com/android/internal/telephony/metrics/ServiceStateStats.java b/src/java/com/android/internal/telephony/metrics/ServiceStateStats.java index 14ce2ccdb9..d400c2230b 100644 --- a/src/java/com/android/internal/telephony/metrics/ServiceStateStats.java +++ b/src/java/com/android/internal/telephony/metrics/ServiceStateStats.java @@ -32,6 +32,7 @@ import android.telephony.NetworkRegistrationInfo; import android.telephony.ServiceState; import android.telephony.ServiceState.RoamingType; import android.telephony.TelephonyManager; +import android.telephony.ims.stub.ImsRegistrationImplBase; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.telephony.Phone; @@ -89,6 +90,7 @@ public class ServiceStateStats extends DataNetworkControllerCallback { CellularServiceState newServiceState = copyOf(state.mServiceState); newServiceState.voiceRat = getVoiceRat(mPhone, getServiceStateForPhone(mPhone)); + newServiceState.isIwlanCrossSim = isCrossSimCallingRegistered(mPhone); return new TimestampedServiceState(newServiceState, now); }); addServiceState(lastState, now); @@ -132,6 +134,7 @@ public class ServiceStateStats extends DataNetworkControllerCallback { newState.foldState = mDeviceStateHelper.getFoldState(); newState.overrideVoiceService = mOverrideVoiceService.get(); newState.isDataEnabled = mPhone.getDataSettingsManager().isDataEnabled(); + newState.isIwlanCrossSim = isCrossSimCallingRegistered(mPhone); TimestampedServiceState prevState = mLastState.getAndSet(new TimestampedServiceState(newState, now)); addServiceStateAndSwitch( @@ -302,6 +305,7 @@ public class ServiceStateStats extends DataNetworkControllerCallback { copy.foldState = state.foldState; copy.overrideVoiceService = state.overrideVoiceService; copy.isDataEnabled = state.isDataEnabled; + copy.isIwlanCrossSim = state.isIwlanCrossSim; 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. */ public static @NetworkType int getRat( ServiceState state, @NetworkRegistrationInfo.Domain int domain) { diff --git a/tests/telephonytests/src/com/android/internal/telephony/metrics/ServiceStateStatsTest.java b/tests/telephonytests/src/com/android/internal/telephony/metrics/ServiceStateStatsTest.java index 2509b8c4da..c66cfa7999 100644 --- a/tests/telephonytests/src/com/android/internal/telephony/metrics/ServiceStateStatsTest.java +++ b/tests/telephonytests/src/com/android/internal/telephony/metrics/ServiceStateStatsTest.java @@ -44,6 +44,7 @@ import android.telephony.Annotation.NetworkType; import android.telephony.NetworkRegistrationInfo; import android.telephony.ServiceState; import android.telephony.TelephonyManager; +import android.telephony.ims.stub.ImsRegistrationImplBase; import android.test.suitebuilder.annotation.SmallTest; import com.android.internal.telephony.Phone; @@ -401,6 +402,30 @@ public class ServiceStateStatsTest extends TelephonyTest { @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 + @SmallTest public void onInternetDataNetworkDisconnected() throws Exception { // Using default service state for LTE mServiceStateStats.onServiceStateChanged(mServiceState); |