From c5996b9969b241dfe647c7de4d7995c6e848d1db Mon Sep 17 00:00:00 2001 From: Sang-Jun Park Date: Mon, 31 Jan 2011 18:44:37 +0900 Subject: Fix delivery report error with PENDING status in SMS 1. According to TS 23.040, TP-Status values is changed properly. 2. When processing Status Report, it should be checked whether tpStatus is PENDING or FAILED. Change-Id: I91c315cfb363f3e4b936c6b6b1a01083687a580f --- core/java/android/provider/Telephony.java | 4 ++-- .../java/com/android/internal/telephony/gsm/GsmSMSDispatcher.java | 7 ++++++- 2 files changed, 8 insertions(+), 3 deletions(-) mode change 100644 => 100755 core/java/android/provider/Telephony.java mode change 100644 => 100755 telephony/java/com/android/internal/telephony/gsm/GsmSMSDispatcher.java diff --git a/core/java/android/provider/Telephony.java b/core/java/android/provider/Telephony.java old mode 100644 new mode 100755 index 6d8bd9ba573c..940bd2457d5a --- a/core/java/android/provider/Telephony.java +++ b/core/java/android/provider/Telephony.java @@ -114,8 +114,8 @@ public final class Telephony { public static final int STATUS_NONE = -1; public static final int STATUS_COMPLETE = 0; - public static final int STATUS_PENDING = 64; - public static final int STATUS_FAILED = 128; + public static final int STATUS_PENDING = 32; + public static final int STATUS_FAILED = 64; /** * The subject of the message, if present diff --git a/telephony/java/com/android/internal/telephony/gsm/GsmSMSDispatcher.java b/telephony/java/com/android/internal/telephony/gsm/GsmSMSDispatcher.java old mode 100644 new mode 100755 index 3079a64086c7..49fa5daa05f3 --- a/telephony/java/com/android/internal/telephony/gsm/GsmSMSDispatcher.java +++ b/telephony/java/com/android/internal/telephony/gsm/GsmSMSDispatcher.java @@ -22,6 +22,7 @@ import android.app.PendingIntent.CanceledException; import android.content.Intent; import android.os.AsyncResult; import android.os.Message; +import android.provider.Telephony.Sms; import android.provider.Telephony.Sms.Intents; import android.telephony.ServiceState; import android.util.Config; @@ -60,13 +61,17 @@ final class GsmSMSDispatcher extends SMSDispatcher { String pduString = (String) ar.result; SmsMessage sms = SmsMessage.newFromCDS(pduString); + int tpStatus = sms.getStatus(); + if (sms != null) { int messageRef = sms.messageRef; for (int i = 0, count = deliveryPendingList.size(); i < count; i++) { SmsTracker tracker = deliveryPendingList.get(i); if (tracker.mMessageRef == messageRef) { // Found it. Remove from list and broadcast. - deliveryPendingList.remove(i); + if(tpStatus >= Sms.STATUS_FAILED || tpStatus < Sms.STATUS_PENDING ) { + deliveryPendingList.remove(i); + } PendingIntent intent = tracker.mDeliveryIntent; Intent fillIn = new Intent(); fillIn.putExtra("pdu", IccUtils.hexStringToBytes(pduString)); -- cgit v1.2.3-59-g8ed1b