summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--proto/src/persist_atoms.proto1
-rw-r--r--src/java/com/android/internal/telephony/metrics/MetricsCollector.java3
-rw-r--r--src/java/com/android/internal/telephony/metrics/PersistAtomsStorage.java3
-rw-r--r--src/java/com/android/internal/telephony/metrics/ServiceStateStats.java12
-rw-r--r--tests/telephonytests/src/com/android/internal/telephony/metrics/ServiceStateStatsTest.java25
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);