summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--proto/src/persist_atoms.proto1
-rw-r--r--src/java/com/android/internal/telephony/InboundSmsHandler.java17
-rw-r--r--src/java/com/android/internal/telephony/SmsBroadcastUndelivered.java4
-rw-r--r--src/java/com/android/internal/telephony/metrics/MetricsCollector.java3
-rw-r--r--src/java/com/android/internal/telephony/metrics/SmsStats.java26
-rw-r--r--tests/telephonytests/src/com/android/internal/telephony/metrics/PersistAtomsStorageTest.java5
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;
}
}