Loading src/java/com/android/internal/telephony/metrics/TelephonyMetrics.java +21 −5 Original line number Diff line number Diff line Loading @@ -57,6 +57,7 @@ import android.telephony.SubscriptionInfo; import android.telephony.SubscriptionManager; import android.telephony.TelephonyHistogram; import android.telephony.TelephonyManager; import android.telephony.TelephonyManager.PrefNetworkMode; import android.telephony.data.DataCallResponse; import android.telephony.data.DataService; import android.telephony.emergency.EmergencyNumber; Loading Loading @@ -1227,6 +1228,20 @@ public class TelephonyMetrics { .setSignalStrength(signalStrength).build()); } private TelephonySettings cloneCurrentTelephonySettings(int phoneId) { TelephonySettings newSettings = new TelephonySettings(); TelephonySettings lastSettings = mLastSettings.get(phoneId); if (lastSettings != null) { // No clone method available, so each relevant field is copied individually. newSettings.preferredNetworkMode = lastSettings.preferredNetworkMode; newSettings.isEnhanced4GLteModeEnabled = lastSettings.isEnhanced4GLteModeEnabled; newSettings.isVtOverLteEnabled = lastSettings.isVtOverLteEnabled; newSettings.isWifiCallingEnabled = lastSettings.isWifiCallingEnabled; newSettings.isVtOverWifiEnabled = lastSettings.isVtOverWifiEnabled; } return newSettings; } /** * Write IMS feature settings changed event * Loading @@ -1235,8 +1250,9 @@ public class TelephonyMetrics { * @param network The IMS network type * @param value The settings. 0 indicates disabled, otherwise enabled. */ public void writeImsSetFeatureValue(int phoneId, int feature, int network, int value) { TelephonySettings s = new TelephonySettings(); public synchronized void writeImsSetFeatureValue(int phoneId, int feature, int network, int value) { TelephonySettings s = cloneCurrentTelephonySettings(phoneId); if (network == ImsRegistrationImplBase.REGISTRATION_TECH_LTE) { switch (feature) { case MmTelFeature.MmTelCapabilities.CAPABILITY_TYPE_VOICE: Loading @@ -1257,7 +1273,6 @@ public class TelephonyMetrics { } } // If the settings don't change, we don't log the event. if (mLastSettings.get(phoneId) != null && Arrays.equals(TelephonySettings.toByteArray(mLastSettings.get(phoneId)), Loading @@ -1284,8 +1299,9 @@ public class TelephonyMetrics { * @param phoneId Phone id * @param networkType The preferred network */ public void writeSetPreferredNetworkType(int phoneId, int networkType) { TelephonySettings s = new TelephonySettings(); public synchronized void writeSetPreferredNetworkType(int phoneId, @PrefNetworkMode int networkType) { TelephonySettings s = cloneCurrentTelephonySettings(phoneId); s.preferredNetworkMode = networkType + 1; // If the settings don't change, we don't log the event. Loading tests/telephonytests/src/com/android/internal/telephony/metrics/TelephonyMetricsTest.java +31 −0 Original line number Diff line number Diff line Loading @@ -73,6 +73,7 @@ import com.android.internal.telephony.nano.TelephonyProto.TelephonyServiceState; import com.android.internal.telephony.nano.TelephonyProto.TelephonyServiceState.FrequencyRange; import com.android.internal.telephony.nano.TelephonyProto.TelephonyServiceState.NrState; import com.android.internal.telephony.nano.TelephonyProto.TelephonyServiceState.RoamingType; import com.android.internal.telephony.nano.TelephonyProto.TelephonySettings.RilNetworkMode; import org.junit.After; import org.junit.Before; Loading Loading @@ -419,6 +420,36 @@ public class TelephonyMetricsTest extends TelephonyTest { assertTrue(log.callSessions[0].events[1].settings.isEnhanced4GLteModeEnabled); } // Test multiple events impacting TelephonySettings. @Test @SmallTest public void testTelephonySettingsEvents() throws Exception { mMetrics.writeImsSetFeatureValue(mPhone.getPhoneId(), MmTelFeature.MmTelCapabilities.CAPABILITY_TYPE_VOICE, ImsRegistrationImplBase.REGISTRATION_TECH_LTE, 1); mMetrics.writeSetPreferredNetworkType(mPhone.getPhoneId(), TelephonyManager.NETWORK_MODE_LTE_ONLY); mMetrics.writeImsSetFeatureValue(mPhone.getPhoneId(), MmTelFeature.MmTelCapabilities.CAPABILITY_TYPE_VOICE, ImsRegistrationImplBase.REGISTRATION_TECH_IWLAN, 1); TelephonyLog log = buildProto(); assertEquals(3, log.events.length); assertTrue(log.events[0].settings.isEnhanced4GLteModeEnabled); assertFalse(log.events[0].settings.isWifiCallingEnabled); assertEquals(log.events[0].settings.preferredNetworkMode, RilNetworkMode.NETWORK_MODE_UNKNOWN); assertTrue(log.events[1].settings.isEnhanced4GLteModeEnabled); assertFalse(log.events[1].settings.isWifiCallingEnabled); assertEquals(log.events[1].settings.preferredNetworkMode, RilNetworkMode.NETWORK_MODE_LTE_ONLY); assertTrue(log.events[2].settings.isEnhanced4GLteModeEnabled); assertTrue(log.events[2].settings.isWifiCallingEnabled); assertEquals(log.events[2].settings.preferredNetworkMode, RilNetworkMode.NETWORK_MODE_LTE_ONLY); } // Test write on ims call handover event @Test @SmallTest Loading Loading
src/java/com/android/internal/telephony/metrics/TelephonyMetrics.java +21 −5 Original line number Diff line number Diff line Loading @@ -57,6 +57,7 @@ import android.telephony.SubscriptionInfo; import android.telephony.SubscriptionManager; import android.telephony.TelephonyHistogram; import android.telephony.TelephonyManager; import android.telephony.TelephonyManager.PrefNetworkMode; import android.telephony.data.DataCallResponse; import android.telephony.data.DataService; import android.telephony.emergency.EmergencyNumber; Loading Loading @@ -1227,6 +1228,20 @@ public class TelephonyMetrics { .setSignalStrength(signalStrength).build()); } private TelephonySettings cloneCurrentTelephonySettings(int phoneId) { TelephonySettings newSettings = new TelephonySettings(); TelephonySettings lastSettings = mLastSettings.get(phoneId); if (lastSettings != null) { // No clone method available, so each relevant field is copied individually. newSettings.preferredNetworkMode = lastSettings.preferredNetworkMode; newSettings.isEnhanced4GLteModeEnabled = lastSettings.isEnhanced4GLteModeEnabled; newSettings.isVtOverLteEnabled = lastSettings.isVtOverLteEnabled; newSettings.isWifiCallingEnabled = lastSettings.isWifiCallingEnabled; newSettings.isVtOverWifiEnabled = lastSettings.isVtOverWifiEnabled; } return newSettings; } /** * Write IMS feature settings changed event * Loading @@ -1235,8 +1250,9 @@ public class TelephonyMetrics { * @param network The IMS network type * @param value The settings. 0 indicates disabled, otherwise enabled. */ public void writeImsSetFeatureValue(int phoneId, int feature, int network, int value) { TelephonySettings s = new TelephonySettings(); public synchronized void writeImsSetFeatureValue(int phoneId, int feature, int network, int value) { TelephonySettings s = cloneCurrentTelephonySettings(phoneId); if (network == ImsRegistrationImplBase.REGISTRATION_TECH_LTE) { switch (feature) { case MmTelFeature.MmTelCapabilities.CAPABILITY_TYPE_VOICE: Loading @@ -1257,7 +1273,6 @@ public class TelephonyMetrics { } } // If the settings don't change, we don't log the event. if (mLastSettings.get(phoneId) != null && Arrays.equals(TelephonySettings.toByteArray(mLastSettings.get(phoneId)), Loading @@ -1284,8 +1299,9 @@ public class TelephonyMetrics { * @param phoneId Phone id * @param networkType The preferred network */ public void writeSetPreferredNetworkType(int phoneId, int networkType) { TelephonySettings s = new TelephonySettings(); public synchronized void writeSetPreferredNetworkType(int phoneId, @PrefNetworkMode int networkType) { TelephonySettings s = cloneCurrentTelephonySettings(phoneId); s.preferredNetworkMode = networkType + 1; // If the settings don't change, we don't log the event. Loading
tests/telephonytests/src/com/android/internal/telephony/metrics/TelephonyMetricsTest.java +31 −0 Original line number Diff line number Diff line Loading @@ -73,6 +73,7 @@ import com.android.internal.telephony.nano.TelephonyProto.TelephonyServiceState; import com.android.internal.telephony.nano.TelephonyProto.TelephonyServiceState.FrequencyRange; import com.android.internal.telephony.nano.TelephonyProto.TelephonyServiceState.NrState; import com.android.internal.telephony.nano.TelephonyProto.TelephonyServiceState.RoamingType; import com.android.internal.telephony.nano.TelephonyProto.TelephonySettings.RilNetworkMode; import org.junit.After; import org.junit.Before; Loading Loading @@ -419,6 +420,36 @@ public class TelephonyMetricsTest extends TelephonyTest { assertTrue(log.callSessions[0].events[1].settings.isEnhanced4GLteModeEnabled); } // Test multiple events impacting TelephonySettings. @Test @SmallTest public void testTelephonySettingsEvents() throws Exception { mMetrics.writeImsSetFeatureValue(mPhone.getPhoneId(), MmTelFeature.MmTelCapabilities.CAPABILITY_TYPE_VOICE, ImsRegistrationImplBase.REGISTRATION_TECH_LTE, 1); mMetrics.writeSetPreferredNetworkType(mPhone.getPhoneId(), TelephonyManager.NETWORK_MODE_LTE_ONLY); mMetrics.writeImsSetFeatureValue(mPhone.getPhoneId(), MmTelFeature.MmTelCapabilities.CAPABILITY_TYPE_VOICE, ImsRegistrationImplBase.REGISTRATION_TECH_IWLAN, 1); TelephonyLog log = buildProto(); assertEquals(3, log.events.length); assertTrue(log.events[0].settings.isEnhanced4GLteModeEnabled); assertFalse(log.events[0].settings.isWifiCallingEnabled); assertEquals(log.events[0].settings.preferredNetworkMode, RilNetworkMode.NETWORK_MODE_UNKNOWN); assertTrue(log.events[1].settings.isEnhanced4GLteModeEnabled); assertFalse(log.events[1].settings.isWifiCallingEnabled); assertEquals(log.events[1].settings.preferredNetworkMode, RilNetworkMode.NETWORK_MODE_LTE_ONLY); assertTrue(log.events[2].settings.isEnhanced4GLteModeEnabled); assertTrue(log.events[2].settings.isWifiCallingEnabled); assertEquals(log.events[2].settings.preferredNetworkMode, RilNetworkMode.NETWORK_MODE_LTE_ONLY); } // Test write on ims call handover event @Test @SmallTest Loading