summaryrefslogtreecommitdiff
path: root/telephony/java/android
diff options
context:
space:
mode:
authorBrad Ebinger <breadley@google.com>2018-03-19 14:30:32 -0700
committerBrad Ebinger <breadley@google.com>2018-03-23 09:58:27 -0700
commitd4285ad1232c87af6fad6ee68c04a2efb96aa924 (patch)
treef7102610f21d1452572b64166e7faae5d6bb1caa /telephony/java/android
parentde51e0c61523f948d9a9797fce1f07e2a67e99fd (diff)
Parse SMS locally upon error to get message ref
Parse the SMS locally to get the message ref when onSmsReceived fails due to the platform being unavailable. This allows the correct message ref to be sent back via acknowledgeSms, instead of the incorrect "0" value. Bug: 74551838 Test: Manual Change-Id: I2f8128d8ff4e07bb3720a344cee70fa5fd5d7535
Diffstat (limited to 'telephony/java/android')
-rw-r--r--telephony/java/android/telephony/SmsMessage.java5
-rw-r--r--telephony/java/android/telephony/ims/stub/ImsSmsImplBase.java12
2 files changed, 15 insertions, 2 deletions
diff --git a/telephony/java/android/telephony/SmsMessage.java b/telephony/java/android/telephony/SmsMessage.java
index 9d03b59797ac..57f89e316e1c 100644
--- a/telephony/java/android/telephony/SmsMessage.java
+++ b/telephony/java/android/telephony/SmsMessage.java
@@ -207,7 +207,10 @@ public class SmsMessage {
*/
public static SmsMessage createFromPdu(byte[] pdu, String format) {
SmsMessageBase wrappedMessage;
-
+ if (pdu == null) {
+ Rlog.i(LOG_TAG, "createFromPdu(): pdu is null");
+ return null;
+ }
if (SmsConstants.FORMAT_3GPP2.equals(format)) {
wrappedMessage = com.android.internal.telephony.cdma.SmsMessage.createFromPdu(pdu);
} else if (SmsConstants.FORMAT_3GPP.equals(format)) {
diff --git a/telephony/java/android/telephony/ims/stub/ImsSmsImplBase.java b/telephony/java/android/telephony/ims/stub/ImsSmsImplBase.java
index 0664a7e9a973..852c8e0618c8 100644
--- a/telephony/java/android/telephony/ims/stub/ImsSmsImplBase.java
+++ b/telephony/java/android/telephony/ims/stub/ImsSmsImplBase.java
@@ -197,6 +197,9 @@ public class ImsSmsImplBase {
* platform will deliver the message to the messages database and notify the IMS provider of the
* result by calling {@link #acknowledgeSms(int, int, int)}.
*
+ * This method must not be called before {@link #onReady()} is called or the call will fail. If
+ * the platform is not available, {@link #acknowledgeSms(int, int, int)} will be called with the
+ * {@link #DELIVER_STATUS_ERROR_GENERIC} result code.
* @param token unique token generated by IMS providers that the platform will use to trigger
* callbacks for this message.
* @param format the format of the message. Valid values are {@link SmsMessage#FORMAT_3GPP} and
@@ -213,7 +216,14 @@ public class ImsSmsImplBase {
mListener.onSmsReceived(token, format, pdu);
} catch (RemoteException e) {
Log.e(LOG_TAG, "Can not deliver sms: " + e.getMessage());
- acknowledgeSms(token, 0, DELIVER_STATUS_ERROR_GENERIC);
+ SmsMessage message = SmsMessage.createFromPdu(pdu, format);
+ if (message != null && message.mWrappedSmsMessage != null) {
+ acknowledgeSms(token, message.mWrappedSmsMessage.mMessageRef,
+ DELIVER_STATUS_ERROR_GENERIC);
+ } else {
+ Log.w(LOG_TAG, "onSmsReceived: Invalid pdu entered.");
+ acknowledgeSms(token, 0, DELIVER_STATUS_ERROR_GENERIC);
+ }
}
}
}