Loading proto/src/persist_atoms.proto +2 −1 Original line number Diff line number Diff line Loading @@ -303,6 +303,7 @@ message CellularServiceState { optional bool is_multi_sim = 7; optional int32 carrier_id = 8; optional int64 total_time_millis = 9; // Duration needs to be rounded when pulled optional bool is_emergency_only = 10; // Internal use only optional int64 last_used_millis = 10001; Loading src/java/com/android/internal/telephony/metrics/MetricsCollector.java +2 −1 Original line number Diff line number Diff line Loading @@ -717,7 +717,8 @@ public class MetricsCollector implements StatsManager.StatsPullAtomCallback { state.simSlotIndex, state.isMultiSim, state.carrierId, (int) (round(state.totalTimeMillis, DURATION_BUCKET_MILLIS) / SECOND_IN_MILLIS)); (int) (round(state.totalTimeMillis, DURATION_BUCKET_MILLIS) / SECOND_IN_MILLIS), state.isEmergencyOnly); } private static StatsEvent buildStatsEvent(VoiceCallRatUsage usage) { Loading src/java/com/android/internal/telephony/metrics/PersistAtomsStorage.java +2 −1 Original line number Diff line number Diff line Loading @@ -1258,7 +1258,8 @@ public class PersistAtomsStorage { && state.isEndc == key.isEndc && state.simSlotIndex == key.simSlotIndex && state.isMultiSim == key.isMultiSim && state.carrierId == key.carrierId) { && state.carrierId == key.carrierId && state.isEmergencyOnly == key.isEmergencyOnly) { return state; } } Loading src/java/com/android/internal/telephony/metrics/ServiceStateStats.java +25 −3 Original line number Diff line number Diff line Loading @@ -92,6 +92,7 @@ public class ServiceStateStats { newState.simSlotIndex = mPhone.getPhoneId(); newState.isMultiSim = SimSlotState.isMultiSim(); newState.carrierId = mPhone.getCarrierId(); newState.isEmergencyOnly = isEmergencyOnly(serviceState); TimestampedServiceState prevState = mLastState.getAndSet(new TimestampedServiceState(newState, now)); Loading Loading @@ -212,6 +213,7 @@ public class ServiceStateStats { copy.isMultiSim = state.isMultiSim; copy.carrierId = state.carrierId; copy.totalTimeMillis = state.totalTimeMillis; copy.isEmergencyOnly = state.isEmergencyOnly; return copy; } Loading @@ -238,10 +240,22 @@ public class ServiceStateStats { if (imsPhone != null) { @NetworkType int imsVoiceRat = imsPhone.getImsStats().getImsVoiceRadioTech(); if (imsVoiceRat != TelephonyManager.NETWORK_TYPE_UNKNOWN) { return imsVoiceRat; // If IMS is over WWAN but WWAN PS is not in-service, then IMS RAT is invalid boolean isImsVoiceRatValid = (imsVoiceRat == TelephonyManager.NETWORK_TYPE_IWLAN || getDataRat(state) != TelephonyManager.NETWORK_TYPE_UNKNOWN); return isImsVoiceRatValid ? imsVoiceRat : TelephonyManager.NETWORK_TYPE_UNKNOWN; } } return state.getVoiceNetworkType(); // If WWAN CS is not in-service, we should return NETWORK_TYPE_UNKNOWN final NetworkRegistrationInfo wwanRegInfo = state.getNetworkRegistrationInfo( NetworkRegistrationInfo.DOMAIN_CS, AccessNetworkConstants.TRANSPORT_TYPE_WWAN); return wwanRegInfo != null && wwanRegInfo.isInService() ? wwanRegInfo.getAccessNetworkTechnology() : TelephonyManager.NETWORK_TYPE_UNKNOWN; } /** Loading @@ -263,11 +277,19 @@ public class ServiceStateStats { state.getNetworkRegistrationInfo( NetworkRegistrationInfo.DOMAIN_PS, AccessNetworkConstants.TRANSPORT_TYPE_WWAN); return wwanRegInfo != null return wwanRegInfo != null && wwanRegInfo.isInService() ? wwanRegInfo.getAccessNetworkTechnology() : TelephonyManager.NETWORK_TYPE_UNKNOWN; } private static boolean isEmergencyOnly(ServiceState state) { NetworkRegistrationInfo regInfo = state.getNetworkRegistrationInfo( NetworkRegistrationInfo.DOMAIN_CS, AccessNetworkConstants.TRANSPORT_TYPE_WWAN); return regInfo != null && !regInfo.isInService() && regInfo.isEmergencyEnabled(); } private static boolean isEndc(ServiceState state) { if (getDataRat(state) != TelephonyManager.NETWORK_TYPE_LTE) { return false; Loading tests/telephonytests/src/com/android/internal/telephony/metrics/ImsStatsTest.java +1 −0 Original line number Diff line number Diff line Loading @@ -123,6 +123,7 @@ public class ImsStatsTest extends TelephonyTest { // WWAN PS RAT is LTE doReturn(new NetworkRegistrationInfo.Builder() .setAccessNetworkTechnology(TelephonyManager.NETWORK_TYPE_LTE) .setRegistrationState(NetworkRegistrationInfo.REGISTRATION_STATE_HOME) .build()) .when(mServiceState).getNetworkRegistrationInfo(DOMAIN_PS, TRANSPORT_TYPE_WWAN); Loading Loading
proto/src/persist_atoms.proto +2 −1 Original line number Diff line number Diff line Loading @@ -303,6 +303,7 @@ message CellularServiceState { optional bool is_multi_sim = 7; optional int32 carrier_id = 8; optional int64 total_time_millis = 9; // Duration needs to be rounded when pulled optional bool is_emergency_only = 10; // Internal use only optional int64 last_used_millis = 10001; Loading
src/java/com/android/internal/telephony/metrics/MetricsCollector.java +2 −1 Original line number Diff line number Diff line Loading @@ -717,7 +717,8 @@ public class MetricsCollector implements StatsManager.StatsPullAtomCallback { state.simSlotIndex, state.isMultiSim, state.carrierId, (int) (round(state.totalTimeMillis, DURATION_BUCKET_MILLIS) / SECOND_IN_MILLIS)); (int) (round(state.totalTimeMillis, DURATION_BUCKET_MILLIS) / SECOND_IN_MILLIS), state.isEmergencyOnly); } private static StatsEvent buildStatsEvent(VoiceCallRatUsage usage) { Loading
src/java/com/android/internal/telephony/metrics/PersistAtomsStorage.java +2 −1 Original line number Diff line number Diff line Loading @@ -1258,7 +1258,8 @@ public class PersistAtomsStorage { && state.isEndc == key.isEndc && state.simSlotIndex == key.simSlotIndex && state.isMultiSim == key.isMultiSim && state.carrierId == key.carrierId) { && state.carrierId == key.carrierId && state.isEmergencyOnly == key.isEmergencyOnly) { return state; } } Loading
src/java/com/android/internal/telephony/metrics/ServiceStateStats.java +25 −3 Original line number Diff line number Diff line Loading @@ -92,6 +92,7 @@ public class ServiceStateStats { newState.simSlotIndex = mPhone.getPhoneId(); newState.isMultiSim = SimSlotState.isMultiSim(); newState.carrierId = mPhone.getCarrierId(); newState.isEmergencyOnly = isEmergencyOnly(serviceState); TimestampedServiceState prevState = mLastState.getAndSet(new TimestampedServiceState(newState, now)); Loading Loading @@ -212,6 +213,7 @@ public class ServiceStateStats { copy.isMultiSim = state.isMultiSim; copy.carrierId = state.carrierId; copy.totalTimeMillis = state.totalTimeMillis; copy.isEmergencyOnly = state.isEmergencyOnly; return copy; } Loading @@ -238,10 +240,22 @@ public class ServiceStateStats { if (imsPhone != null) { @NetworkType int imsVoiceRat = imsPhone.getImsStats().getImsVoiceRadioTech(); if (imsVoiceRat != TelephonyManager.NETWORK_TYPE_UNKNOWN) { return imsVoiceRat; // If IMS is over WWAN but WWAN PS is not in-service, then IMS RAT is invalid boolean isImsVoiceRatValid = (imsVoiceRat == TelephonyManager.NETWORK_TYPE_IWLAN || getDataRat(state) != TelephonyManager.NETWORK_TYPE_UNKNOWN); return isImsVoiceRatValid ? imsVoiceRat : TelephonyManager.NETWORK_TYPE_UNKNOWN; } } return state.getVoiceNetworkType(); // If WWAN CS is not in-service, we should return NETWORK_TYPE_UNKNOWN final NetworkRegistrationInfo wwanRegInfo = state.getNetworkRegistrationInfo( NetworkRegistrationInfo.DOMAIN_CS, AccessNetworkConstants.TRANSPORT_TYPE_WWAN); return wwanRegInfo != null && wwanRegInfo.isInService() ? wwanRegInfo.getAccessNetworkTechnology() : TelephonyManager.NETWORK_TYPE_UNKNOWN; } /** Loading @@ -263,11 +277,19 @@ public class ServiceStateStats { state.getNetworkRegistrationInfo( NetworkRegistrationInfo.DOMAIN_PS, AccessNetworkConstants.TRANSPORT_TYPE_WWAN); return wwanRegInfo != null return wwanRegInfo != null && wwanRegInfo.isInService() ? wwanRegInfo.getAccessNetworkTechnology() : TelephonyManager.NETWORK_TYPE_UNKNOWN; } private static boolean isEmergencyOnly(ServiceState state) { NetworkRegistrationInfo regInfo = state.getNetworkRegistrationInfo( NetworkRegistrationInfo.DOMAIN_CS, AccessNetworkConstants.TRANSPORT_TYPE_WWAN); return regInfo != null && !regInfo.isInService() && regInfo.isEmergencyEnabled(); } private static boolean isEndc(ServiceState state) { if (getDataRat(state) != TelephonyManager.NETWORK_TYPE_LTE) { return false; Loading
tests/telephonytests/src/com/android/internal/telephony/metrics/ImsStatsTest.java +1 −0 Original line number Diff line number Diff line Loading @@ -123,6 +123,7 @@ public class ImsStatsTest extends TelephonyTest { // WWAN PS RAT is LTE doReturn(new NetworkRegistrationInfo.Builder() .setAccessNetworkTechnology(TelephonyManager.NETWORK_TYPE_LTE) .setRegistrationState(NetworkRegistrationInfo.REGISTRATION_STATE_HOME) .build()) .when(mServiceState).getNetworkRegistrationInfo(DOMAIN_PS, TRANSPORT_TYPE_WWAN); Loading