Loading src/java/com/android/internal/telephony/SmsDispatchersController.java +25 −0 Original line number Diff line number Diff line Loading @@ -52,6 +52,7 @@ import java.io.FileDescriptor; import java.io.PrintWriter; import java.util.ArrayList; import java.util.HashMap; import java.util.Map.Entry; /** * Loading Loading @@ -747,6 +748,30 @@ public class SmsDispatchersController extends Handler { return mUsageMonitor; } /** * Handles the sms status report for the sent sms through ImsSmsDispatcher. Carriers can send * the report over CS even if the previously submitted SMS-SUBMIT was sent over IMS. For this * case, finds a corresponding tracker from the tracker map in ImsSmsDispatcher and handles it. * * @param messageRef the TP-MR of the previously submitted SMS-SUBMIT in the report. * @param format the format. * @param pdu the pdu of the report. */ public void handleSentOverImsStatusReport(int messageRef, String format, byte[] pdu) { for (Entry<Integer, SMSDispatcher.SmsTracker> entry : mImsSmsDispatcher.mTrackers.entrySet()) { int token = entry.getKey(); SMSDispatcher.SmsTracker tracker = entry.getValue(); if (tracker.mMessageRef == messageRef) { Pair<Boolean, Boolean> result = handleSmsStatusReport(tracker, format, pdu); if (result.second) { mImsSmsDispatcher.mTrackers.remove(token); } return; } } } /** * Triggers the correct method for handling the sms status report based on the format. * Loading src/java/com/android/internal/telephony/cdma/CdmaSMSDispatcher.java +11 −4 Original line number Diff line number Diff line Loading @@ -102,18 +102,25 @@ public class CdmaSMSDispatcher extends SMSDispatcher { */ @UnsupportedAppUsage private void handleCdmaStatusReport(SmsMessage sms) { byte[] pdu = sms.getPdu(); int messageRef = sms.mMessageRef; boolean handled = false; for (int i = 0, count = deliveryPendingList.size(); i < count; i++) { SmsTracker tracker = deliveryPendingList.get(i); if (tracker.mMessageRef == sms.mMessageRef) { if (tracker.mMessageRef == messageRef) { Pair<Boolean, Boolean> result = mSmsDispatchersController.handleSmsStatusReport(tracker, getFormat(), sms.getPdu()); mSmsDispatchersController.handleSmsStatusReport(tracker, getFormat(), pdu); if (result.second) { deliveryPendingList.remove(i); } handled = true; break; // Only expect to see one tracker matching this message. } } if (!handled) { // Try to find the sent SMS from the map in ImsSmsDispatcher. mSmsDispatchersController.handleSentOverImsStatusReport(messageRef, getFormat(), pdu); } } /** {@inheritDoc} */ Loading src/java/com/android/internal/telephony/gsm/GsmSMSDispatcher.java +8 −2 Original line number Diff line number Diff line Loading @@ -138,6 +138,7 @@ public final class GsmSMSDispatcher extends SMSDispatcher { private void handleStatusReport(AsyncResult ar) { byte[] pdu = (byte[]) ar.result; SmsMessage sms = SmsMessage.newFromCDS(pdu); boolean handled = false; if (sms != null) { int messageRef = sms.mMessageRef; Loading @@ -151,9 +152,14 @@ public final class GsmSMSDispatcher extends SMSDispatcher { if (result.second) { deliveryPendingList.remove(i); } // Only expect to see one tracker matching this messageref break; handled = true; break; // Only expect to see one tracker matching this messageref } } if (!handled) { // Try to find the sent SMS from the map in ImsSmsDispatcher. mSmsDispatchersController.handleSentOverImsStatusReport( messageRef, getFormat(), pdu); } } mCi.acknowledgeLastIncomingGsmSms(true, Intents.RESULT_SMS_HANDLED, null); Loading Loading
src/java/com/android/internal/telephony/SmsDispatchersController.java +25 −0 Original line number Diff line number Diff line Loading @@ -52,6 +52,7 @@ import java.io.FileDescriptor; import java.io.PrintWriter; import java.util.ArrayList; import java.util.HashMap; import java.util.Map.Entry; /** * Loading Loading @@ -747,6 +748,30 @@ public class SmsDispatchersController extends Handler { return mUsageMonitor; } /** * Handles the sms status report for the sent sms through ImsSmsDispatcher. Carriers can send * the report over CS even if the previously submitted SMS-SUBMIT was sent over IMS. For this * case, finds a corresponding tracker from the tracker map in ImsSmsDispatcher and handles it. * * @param messageRef the TP-MR of the previously submitted SMS-SUBMIT in the report. * @param format the format. * @param pdu the pdu of the report. */ public void handleSentOverImsStatusReport(int messageRef, String format, byte[] pdu) { for (Entry<Integer, SMSDispatcher.SmsTracker> entry : mImsSmsDispatcher.mTrackers.entrySet()) { int token = entry.getKey(); SMSDispatcher.SmsTracker tracker = entry.getValue(); if (tracker.mMessageRef == messageRef) { Pair<Boolean, Boolean> result = handleSmsStatusReport(tracker, format, pdu); if (result.second) { mImsSmsDispatcher.mTrackers.remove(token); } return; } } } /** * Triggers the correct method for handling the sms status report based on the format. * Loading
src/java/com/android/internal/telephony/cdma/CdmaSMSDispatcher.java +11 −4 Original line number Diff line number Diff line Loading @@ -102,18 +102,25 @@ public class CdmaSMSDispatcher extends SMSDispatcher { */ @UnsupportedAppUsage private void handleCdmaStatusReport(SmsMessage sms) { byte[] pdu = sms.getPdu(); int messageRef = sms.mMessageRef; boolean handled = false; for (int i = 0, count = deliveryPendingList.size(); i < count; i++) { SmsTracker tracker = deliveryPendingList.get(i); if (tracker.mMessageRef == sms.mMessageRef) { if (tracker.mMessageRef == messageRef) { Pair<Boolean, Boolean> result = mSmsDispatchersController.handleSmsStatusReport(tracker, getFormat(), sms.getPdu()); mSmsDispatchersController.handleSmsStatusReport(tracker, getFormat(), pdu); if (result.second) { deliveryPendingList.remove(i); } handled = true; break; // Only expect to see one tracker matching this message. } } if (!handled) { // Try to find the sent SMS from the map in ImsSmsDispatcher. mSmsDispatchersController.handleSentOverImsStatusReport(messageRef, getFormat(), pdu); } } /** {@inheritDoc} */ Loading
src/java/com/android/internal/telephony/gsm/GsmSMSDispatcher.java +8 −2 Original line number Diff line number Diff line Loading @@ -138,6 +138,7 @@ public final class GsmSMSDispatcher extends SMSDispatcher { private void handleStatusReport(AsyncResult ar) { byte[] pdu = (byte[]) ar.result; SmsMessage sms = SmsMessage.newFromCDS(pdu); boolean handled = false; if (sms != null) { int messageRef = sms.mMessageRef; Loading @@ -151,9 +152,14 @@ public final class GsmSMSDispatcher extends SMSDispatcher { if (result.second) { deliveryPendingList.remove(i); } // Only expect to see one tracker matching this messageref break; handled = true; break; // Only expect to see one tracker matching this messageref } } if (!handled) { // Try to find the sent SMS from the map in ImsSmsDispatcher. mSmsDispatchersController.handleSentOverImsStatusReport( messageRef, getFormat(), pdu); } } mCi.acknowledgeLastIncomingGsmSms(true, Intents.RESULT_SMS_HANDLED, null); Loading