diff options
6 files changed, 36 insertions, 20 deletions
diff --git a/proto/src/persist_atoms.proto b/proto/src/persist_atoms.proto index a7d523ca19..4b70d2941f 100644 --- a/proto/src/persist_atoms.proto +++ b/proto/src/persist_atoms.proto @@ -344,6 +344,7 @@ message IncomingSms { optional int32 count = 15; optional bool is_managed_profile = 16; optional bool is_ntn = 17; + optional bool is_emergency = 18; // Internal use only optional int32 hashCode = 10001; diff --git a/src/java/com/android/internal/telephony/InboundSmsHandler.java b/src/java/com/android/internal/telephony/InboundSmsHandler.java index 4a0701b5bc..49d1adc7fa 100644 --- a/src/java/com/android/internal/telephony/InboundSmsHandler.java +++ b/src/java/com/android/internal/telephony/InboundSmsHandler.java @@ -747,7 +747,9 @@ public abstract class InboundSmsHandler extends StateMachine { // data will be tracked when the message is processed (processMessagePart). if (result != Intents.RESULT_SMS_HANDLED && result != Activity.RESULT_OK) { mMetrics.writeIncomingSmsError(mPhone.getPhoneId(), is3gpp2(), smsSource, result); - mPhone.getSmsStats().onIncomingSmsError(is3gpp2(), smsSource, result); + mPhone.getSmsStats().onIncomingSmsError(is3gpp2(), smsSource, result, + TelephonyManager.from(mContext) + .isEmergencyNumber(smsb.getOriginatingAddress())); if (mPhone != null) { TelephonyAnalytics telephonyAnalytics = mPhone.getTelephonyAnalytics(); if (telephonyAnalytics != null) { @@ -1020,7 +1022,8 @@ public abstract class InboundSmsHandler extends StateMachine { + (pduList.size() == 0 ? "pduList.size() == 0" : "pduList.contains(null)"); logeWithLocalLog(errorMsg, tracker.getMessageId()); mPhone.getSmsStats().onIncomingSmsError( - is3gpp2(), tracker.getSource(), RESULT_SMS_NULL_PDU); + is3gpp2(), tracker.getSource(), RESULT_SMS_NULL_PDU, + TelephonyManager.from(mContext).isEmergencyNumber(tracker.getAddress())); if (mPhone != null) { TelephonyAnalytics telephonyAnalytics = mPhone.getTelephonyAnalytics(); if (telephonyAnalytics != null) { @@ -1049,7 +1052,9 @@ public abstract class InboundSmsHandler extends StateMachine { SmsConstants.FORMAT_3GPP, timestamps, false, tracker.getMessageId()); mPhone.getSmsStats().onIncomingSmsWapPush(tracker.getSource(), - messageCount, RESULT_SMS_NULL_MESSAGE, tracker.getMessageId()); + messageCount, RESULT_SMS_NULL_MESSAGE, tracker.getMessageId(), + TelephonyManager.from(mContext) + .isEmergencyNumber(tracker.getAddress())); return false; } } @@ -1084,7 +1089,8 @@ public abstract class InboundSmsHandler extends StateMachine { mMetrics.writeIncomingWapPush(mPhone.getPhoneId(), tracker.getSource(), format, timestamps, wapPushResult, tracker.getMessageId()); mPhone.getSmsStats().onIncomingSmsWapPush(tracker.getSource(), messageCount, - result, tracker.getMessageId()); + result, tracker.getMessageId(), TelephonyManager.from(mContext) + .isEmergencyNumber(tracker.getAddress())); // result is Activity.RESULT_OK if an ordered broadcast was sent if (result == Activity.RESULT_OK) { return true; @@ -1104,7 +1110,8 @@ public abstract class InboundSmsHandler extends StateMachine { mMetrics.writeIncomingSmsSession(mPhone.getPhoneId(), tracker.getSource(), format, timestamps, block, tracker.getMessageId()); mPhone.getSmsStats().onIncomingSmsSuccess(is3gpp2(), tracker.getSource(), - messageCount, block, tracker.getMessageId()); + messageCount, block, tracker.getMessageId(), + TelephonyManager.from(mContext).isEmergencyNumber(tracker.getAddress())); CarrierRoamingSatelliteSessionStats sessionStats = CarrierRoamingSatelliteSessionStats.getInstance(mPhone.getSubId()); sessionStats.onIncomingSms(mPhone.getSubId()); diff --git a/src/java/com/android/internal/telephony/SmsBroadcastUndelivered.java b/src/java/com/android/internal/telephony/SmsBroadcastUndelivered.java index 7fc499e6a0..077ee0bf3c 100644 --- a/src/java/com/android/internal/telephony/SmsBroadcastUndelivered.java +++ b/src/java/com/android/internal/telephony/SmsBroadcastUndelivered.java @@ -30,6 +30,7 @@ import android.os.PersistableBundle; import android.os.UserManager; import android.telephony.CarrierConfigManager; import android.telephony.SubscriptionManager; +import android.telephony.TelephonyManager; import com.android.internal.telephony.analytics.TelephonyAnalytics; import com.android.internal.telephony.analytics.TelephonyAnalytics.SmsMmsAnalytics; @@ -243,7 +244,8 @@ public class SmsBroadcastUndelivered { message.mMessageCount); if (phone != null) { phone.getSmsStats().onDroppedIncomingMultipartSms(message.mIs3gpp2, rows, - message.mMessageCount); + message.mMessageCount, TelephonyManager.from(context) + .isEmergencyNumber(message.mAddress)); TelephonyAnalytics telephonyAnalytics = phone.getTelephonyAnalytics(); if (telephonyAnalytics != null) { SmsMmsAnalytics smsMmsAnalytics = diff --git a/src/java/com/android/internal/telephony/metrics/MetricsCollector.java b/src/java/com/android/internal/telephony/metrics/MetricsCollector.java index 4232f20ed8..e6f25bb853 100644 --- a/src/java/com/android/internal/telephony/metrics/MetricsCollector.java +++ b/src/java/com/android/internal/telephony/metrics/MetricsCollector.java @@ -1152,7 +1152,8 @@ public class MetricsCollector implements StatsManager.StatsPullAtomCallback { sms.messageId, sms.count, sms.isManagedProfile, - sms.isNtn); + sms.isNtn, + sms.isEmergency); } private static StatsEvent buildStatsEvent(OutgoingSms sms) { diff --git a/src/java/com/android/internal/telephony/metrics/SmsStats.java b/src/java/com/android/internal/telephony/metrics/SmsStats.java index d6d9388228..b62114c3e8 100644 --- a/src/java/com/android/internal/telephony/metrics/SmsStats.java +++ b/src/java/com/android/internal/telephony/metrics/SmsStats.java @@ -89,8 +89,9 @@ public class SmsStats { } /** Create a new atom when multi-part incoming SMS is dropped due to missing parts. */ - public void onDroppedIncomingMultipartSms(boolean is3gpp2, int receivedCount, int totalCount) { - IncomingSms proto = getIncomingDefaultProto(is3gpp2, SOURCE_NOT_INJECTED); + public void onDroppedIncomingMultipartSms(boolean is3gpp2, int receivedCount, int totalCount, + boolean isEmergency) { + IncomingSms proto = getIncomingDefaultProto(is3gpp2, SOURCE_NOT_INJECTED, isEmergency); // Keep SMS tech as unknown because it's possible that it changed overtime and is not // necessarily the current one. Similarly mark the RAT as unknown. proto.smsTech = INCOMING_SMS__SMS_TECH__SMS_TECH_UNKNOWN; @@ -104,21 +105,21 @@ public class SmsStats { /** Create a new atom when an SMS for the voicemail indicator is received. */ public void onIncomingSmsVoicemail(boolean is3gpp2, @InboundSmsHandler.SmsSource int smsSource) { - IncomingSms proto = getIncomingDefaultProto(is3gpp2, smsSource); + IncomingSms proto = getIncomingDefaultProto(is3gpp2, smsSource, false); proto.smsType = INCOMING_SMS__SMS_TYPE__SMS_TYPE_VOICEMAIL_INDICATION; mAtomsStorage.addIncomingSms(proto); } /** Create a new atom when an SMS of type zero is received. */ public void onIncomingSmsTypeZero(@InboundSmsHandler.SmsSource int smsSource) { - IncomingSms proto = getIncomingDefaultProto(false /* is3gpp2 */, smsSource); + IncomingSms proto = getIncomingDefaultProto(false /* is3gpp2 */, smsSource, false); proto.smsType = INCOMING_SMS__SMS_TYPE__SMS_TYPE_ZERO; mAtomsStorage.addIncomingSms(proto); } /** Create a new atom when an SMS-PP for the SIM card is received. */ public void onIncomingSmsPP(@InboundSmsHandler.SmsSource int smsSource, boolean success) { - IncomingSms proto = getIncomingDefaultProto(false /* is3gpp2 */, smsSource); + IncomingSms proto = getIncomingDefaultProto(false /* is3gpp2 */, smsSource, false); proto.smsType = INCOMING_SMS__SMS_TYPE__SMS_TYPE_SMS_PP; proto.error = getIncomingSmsError(success); mAtomsStorage.addIncomingSms(proto); @@ -127,8 +128,8 @@ public class SmsStats { /** Create a new atom when an SMS is received successfully. */ public void onIncomingSmsSuccess(boolean is3gpp2, @InboundSmsHandler.SmsSource int smsSource, int messageCount, - boolean blocked, long messageId) { - IncomingSms proto = getIncomingDefaultProto(is3gpp2, smsSource); + boolean blocked, long messageId, boolean isEmergency) { + IncomingSms proto = getIncomingDefaultProto(is3gpp2, smsSource, isEmergency); proto.totalParts = messageCount; proto.receivedParts = messageCount; proto.blocked = blocked; @@ -138,16 +139,16 @@ public class SmsStats { /** Create a new atom when an incoming SMS has an error. */ public void onIncomingSmsError(boolean is3gpp2, - @InboundSmsHandler.SmsSource int smsSource, int result) { - IncomingSms proto = getIncomingDefaultProto(is3gpp2, smsSource); + @InboundSmsHandler.SmsSource int smsSource, int result, boolean isEmergency) { + IncomingSms proto = getIncomingDefaultProto(is3gpp2, smsSource, isEmergency); proto.error = getIncomingSmsError(result); mAtomsStorage.addIncomingSms(proto); } /** Create a new atom when an incoming WAP_PUSH SMS is received. */ public void onIncomingSmsWapPush(@InboundSmsHandler.SmsSource int smsSource, - int messageCount, int result, long messageId) { - IncomingSms proto = getIncomingDefaultProto(false, smsSource); + int messageCount, int result, long messageId, boolean isEmergency) { + IncomingSms proto = getIncomingDefaultProto(false, smsSource, isEmergency); proto.smsType = INCOMING_SMS__SMS_TYPE__SMS_TYPE_WAP_PUSH; proto.totalParts = messageCount; proto.receivedParts = messageCount; @@ -219,7 +220,7 @@ public class SmsStats { /** Creates a proto for a normal single-part {@code IncomingSms} with default values. */ private IncomingSms getIncomingDefaultProto(boolean is3gpp2, - @InboundSmsHandler.SmsSource int smsSource) { + @InboundSmsHandler.SmsSource int smsSource, boolean isEmergency) { IncomingSms proto = new IncomingSms(); proto.smsFormat = getSmsFormat(is3gpp2); proto.smsTech = getSmsTech(smsSource, is3gpp2); @@ -240,6 +241,7 @@ public class SmsStats { proto.count = 1; proto.isManagedProfile = mPhone.isManagedProfile(); proto.isNtn = isNonTerrestrialNetwork(); + proto.isEmergency = isEmergency; return proto; } diff --git a/tests/telephonytests/src/com/android/internal/telephony/metrics/PersistAtomsStorageTest.java b/tests/telephonytests/src/com/android/internal/telephony/metrics/PersistAtomsStorageTest.java index a9b183f456..0f37a5776f 100644 --- a/tests/telephonytests/src/com/android/internal/telephony/metrics/PersistAtomsStorageTest.java +++ b/tests/telephonytests/src/com/android/internal/telephony/metrics/PersistAtomsStorageTest.java @@ -1022,6 +1022,7 @@ public class PersistAtomsStorageTest extends TelephonyTest { mIncomingSms1.count = 1; mIncomingSms1.isManagedProfile = false; mIncomingSms1.isNtn = false; + mIncomingSms1.isEmergency = true; mIncomingSms2 = new IncomingSms(); mIncomingSms2.smsFormat = INCOMING_SMS__SMS_FORMAT__SMS_FORMAT_3GPP2; @@ -1041,6 +1042,7 @@ public class PersistAtomsStorageTest extends TelephonyTest { mIncomingSms2.count = 2; mIncomingSms2.isManagedProfile = true; mIncomingSms2.isNtn = true; + mIncomingSms2.isEmergency = true; mIncomingSms = new IncomingSms[] {mIncomingSms1, mIncomingSms2}; @@ -5981,7 +5983,8 @@ public class PersistAtomsStorageTest extends TelephonyTest { && incomingSms.carrierId == expectedIncomingSms.carrierId && incomingSms.messageId == expectedIncomingSms.messageId && incomingSms.isManagedProfile == expectedIncomingSms.isManagedProfile - && incomingSms.isNtn == expectedIncomingSms.isNtn) { + && incomingSms.isNtn == expectedIncomingSms.isNtn + && incomingSms.isEmergency == expectedIncomingSms.isEmergency) { actualCount = incomingSms.count; } } |